Linux 2.6内核进程调度队列(了解)
更多文章 | CSDN
更多文章 | 知乎
更多文章 | 腾讯云
Linux 2.6 内核在进程调度方面引入了 O(1) 调度器,该调度器的核心目标是保证调度决策的时间复杂度为恒定时间 O(1),即无论系统中有多少个进程,调度器的决策时间始终保持不变。这个设计对于大规模系统具有重要意义,可以有效避免调度决策的性能瓶颈。
1. 调度队列结构Linux 2.6 内核的进程调度通过多个调度队列进行管理,核心数据结构是 运行队列(Runqueue),每个 CPU 核心都维护一个独立的运行队列。运行队列(Runqueue):每个 CPU 核心维护一个独立的运行队列,队列内包含当前可运行的进程。运行队列结构主要由以下几个组件组成:
优先级数组:
活跃数组(Active Array):存放当前可运行的进程,按优先级分为 140 个队列(0~139)。
0~99:实时进程(RT进程,如硬实时任务)。
100~139:普通进程(分时进程,如用户程序)。
过期数组(Expired Array):存放已经用完时间片的进程,结构与活跃数组相同。
时间片管 ...
环境变量1. 什么是环境变量?环境变量(Environment Variables)是操作系统中用于指定系统运行环境参数的一组动态键值对。每个环境变量由一个 名称(键) 和一个 值 组成,用于存储应用程序或系统需要访问的配置信息。例如:
名称:PATH
值:/usr/bin:/usr/local/bin
环境变量的作用类似于操作系统的“配置开关”,可以影响程序的运行行为、路径搜索、资源访问等。
1. 环境变量的分类根据作用范围和修改权限,环境变量可分为两类:
1. 用户环境变量(User Variables)
作用范围:仅对当前用户生效。
用途:存储用户个性化配置(如用户专属的软件路径)。
2. 系统环境变量(System Variables)
作用范围:对所有用户和系统进程生效。
用途:存储全局配置(如系统工具路径、公共依赖库路径)。
3. 临时环境变量
作用:仅在当前终端会话或子进程中有效。
2. 和环境变量相关的命令
echo:显示某个环境变量值
export:设置一个新的环境变量
env:显示所有环境变量
unset: 清除环境变量
set:显示本地定义的 shell ...
Linux
未读进程状态和优先级
[!TIP]
相关推荐视频 | B站
一、进程状态分类Linux 中的进程状态可以通过 ps 命令或者 top 命令来查看,常见的状态码有以下几种:
状态码
名称
含义说明
R
运行(Running)
进程正在运行或处于可运行状态(等待 CPU 调度)
S
可中断睡眠(Sleeping)
进程正在等待某个事件(如 I/O、信号等),可以被信号或外部事件唤醒
D
不可中断睡眠(Uninterruptible Sleep)
进程正等待 无法被信号唤醒 的事件(如磁盘 I/O),一般出现在设备驱动程序中,例如正在等待硬件操作
T
停止(Stopped/Traced)
进程已被暂停执行,例如收到了 SIGSTOP 信号,或者在被调试时被暂停。
Z
僵尸(Zombie)
子进程已结束/终止,但父进程未回收它的资源(PID 和退出状态仍占用系统资源),导致进程表里留有“尸体”
X
死亡(Dead)
进程已彻底终止,且不会再存在于进程表中(非常短暂极少见,用户通常看不到)
特殊状态说明
僵尸进程 ...
Linux
未读深入理解 Linux 进程管理一、管理哲学/本质:先描述,再组织(校长如何管理学校?)一个操作系统不仅仅只能运行一个进程,可以同时运行多个进程。操作系统的进程管理:先描述,在组织 → 任何一个进程。在操作系统中,管理任何对象,最终都可以转化成为对某种数据结构的增删查改。想象你是一所大学的校长,管理数万名学生。你不需要认识每个学生,只需通过 学生档案系统 管理:
描述:每个学生有专属档案(学号、姓名、专业、成绩、宿舍号…)
组织:档案按学院 → 专业 → 班级形成 链表结构
管理:调整专业只需修改档案中的“专业”字段,开除学生只需删除对应档案(增删查改)
操作系统管理进程同理:
描述:为每个进程创建 task_struct(进程的“档案”)
组织:通过链表、队列等数据结构管理所有 task_struct
控制:调整优先级、终止进程等操作只需修改对应结构体
数据结构的作用
学校:学生档案链表 → 管理学生 增删查改(如入学、转班、退学)。
操作系统:进程 PCB 链表 → 管理进程的创建、调度、终止等。
二、进程的定义与核心概念1. 什么是进程?
进程 = ...
Linux
未读冯 ・ 诺依曼体系结构:计算机世界的基石在计算机科学中,冯诺依曼体系结构(Von Neumann Architecture) 是一种广泛采用的计算机架构模型,几乎所有现代计算机系统都基于此架构设计。它是由著名的数学家约翰·冯·诺依曼于 1945 年提出的,至今仍在各类计算机硬件的设计中占据主导地位。冯诺依曼体系结构的核心思想可以简单总结为:计算机由内存、CPU、输入输出设备、总线和外设组成,且指令和数据存储在同一个内存中。
1. 冯诺依曼体系结构的组成冯诺依曼体系结构主要包括以下几个基本组成部分:
CPU(中央处理单元)CPU 是计算机的大脑,负责执行程序指令和数据处理。在冯诺依曼架构中,CPU 被分为两个主要部分:
运算器(ALU):负责执行各种算术运算和逻辑运算。
控制器:负责指挥计算机其他部分的工作,协调不同部件的操作。
内存内存是冯诺依曼体系结构中存储数据和程序指令的地方。程序在执行时,首先会被加载到内存中,而后由 CPU 进行处理。
输入输出设备输入设备如键盘、鼠标、摄像头等,用于向计算机提供外部数据;输出设备如显示器、打印机、扬声器等,则用于将计算机的处理结果反 ...
Linux
未读进度条的实现进度条是用户界面中常见的元素,用于显示任务的完成进度。通过实现一个进度条,可以学习如何在 Linux 下进行简单的用户界面设计,同时也能理解文件链接和代码维护的重要性。结合之前讲的倒计时的代码,我们正式来实现我们 Linux 下第一个小程序 —— 进度条。结合之前讲解的 Linux 文件链接 和考虑到代码的 维护性,依旧采用 头文件 .h、函数体文件 .c、main 函数文件 .c 的三个文件进行讲解:
makefile 的配置为了方便进度条的运行展示,这里给出我的 makefile 配置(第一种旨在理解编译流程,第二种全自动更方便):
1234567891011121314151617181920# 目标文件 processBar 依赖于 processBar.oprocessBar: processBar.o gcc processBar.o -o processBar# 目标文件 processBar.o 依赖于 processBar.sprocessBar.o: processBar.s gcc -c processBar.s -o processBar.o# 目标 ...
Linux 开发工具(下)Linux 项目自动化构建工具 —— make / Makefile1. 什么是 make 和 Makefile?在大型软件项目中,源代码通常散布在多个文件和目录中。为了高效地管理这些文件之间的依赖关系并实现自动化编译,Linux 提供了非常强大的工具 —— make。make 是一个自动化构建工具,它通过读取 Makefile 文件中的规则来决定如何编译和链接程序。Makefile 是一个文本文件,其中定义了项目的依赖关系和构建规则。
为什么需要 make?
自动化构建:手动编译多个源文件并管理它们之间的依赖关系非常繁琐,make 可以自动化这一过程。
增量编译:make 只会重新编译那些被修改的文件及其依赖项,从而节省编译时间。
跨平台兼容:Makefile 可以在不同的平台上使用,只需稍作修改。
2. make 的基本工作原理make 的核心功能是根据文件的修改时间自动判断哪些文件需要重新编译。具体来说,它会根据文件间的依赖关系,确保只有修改过的部分被重新编译,避免无谓的重复编译。
基本逻辑
目标文件与依赖关系 make 通过比较目标文件与 ...
Linux
未读Linux 软件包管理器 yum在 Linux 中,安装软件的常见方式主要有三种:源代码安装、rpm 安装和 yum 安装。它们各自有优缺点,适用于不同的场景。
安装方式
优点
缺点
源代码安装
- 高度定制化(调整编译选项、安装路径等)
- 操作复杂,需要手动执行 ./configure, make, make install 等步骤
- 软件版本灵活(能获取最新版本或特定版本)
- 依赖管理困难,需手动解决依赖关系
- 跨平台兼容性强(适配不同架构或操作系统)
- 编译过程时间长,消耗大量计算资源
- 升级和卸载困难,缺乏统一的版本管理
rpm 安装
- 安装速度快,使用预编译的二进制包
- 依赖需手动解决,可能出现“依赖地狱”
- 安装时自动检查并提示缺少的依赖项
- 版本受限于本地或下载的 RPM 包,可能无法获取最新版本
- 通过 rpm 命令可管理软件包(查询、验证、升级、卸载等)
- 默认不关联远程仓库,依赖本地或手动下载的 RPM 包
yum 安装
- 自动解决依赖关系,简化安装过程
- 需要联网访问仓库(离线环境需配 ...
Linux 开发工具(上)Linux 编辑器 —— vimVim 是一个强大、多模式的文本编辑器,具有高度的可定制性和丰富的功能。打开文件:在命令行中输入 vim filename,打开指定文件。Vim 从入门到牛逼 / Vim 从入门到牛逼(备用)
打开当前目录下的文件 code.c,使用命令:vim code.c,同时 支持相对路径和绝对路径 打开:vim home/code.c。
Vim 的主要模式:
命令模式(Normal Mode):命令模式是 Vim 的核心模式,几乎所有操作都从这里开始,启动 Vim 后,默认处于命令模式。在此模式下,键盘输入被解释为命令而非文本输入。只能使用方向键、删除、复制、粘贴等操作用来进行文本的导航、选择、删除、替换等。(按 i 进入插入模式,按 : 进入底行模式,按 Esc 从其他模式返回到命令模式)
插入模式(Insert Mode):按下 i 键进入插入模式。插入模式下可以像普通文本编辑器一样输入文本。按 Esc 键返回命令模式。
底行模式(Ex Mode 或 Bottom Line Mode):底行模式是 Vim 的强大功能之一, ...
shell 命令以及运行原理1. Shell 是什么?Shell 是用户与操作系统内核(Kernel)之间的“翻译官”。
你可以把操作系统内核想象成一个国家的总统(Kernel),他直接管理国家资源(CPU、内存、磁盘等)。但普通人(用户)无法直接和总统对话,必须通过一个“秘书”(Shell)来传达需求。
用户通过 Shell 输入命令(比如 ls、cd)。
Shell 将命令“翻译”成内核能理解的指令,交给内核执行。
内核处理完成后,结果再通过 Shell 返回给用户。
2. 为什么不能直接操作内核?
内核是操作系统的核心,直接操作风险极高。比如,直接让内核删除某个文件,就像让总统亲自去处理一个普通任务——虽然高效但风险极高,一旦出错可能导致系统崩溃。
Shell 的存在是为了安全和易用:
用户无需理解底层硬件细节(比如如何读写磁盘)。
Shell 通过权限控制和语法检查,避免用户误操作导致系统崩溃。
3. Shell 的“媒婆”比喻Shell 是“媒婆”,内核是“村花小花”:你想追求小花(让内核干活),但不好意思直接开口(直接操作内核)。于是你找 ...