秦皇岛和平大街网站建设,做网站如何引流,网站模板视频教程,公司做网站哪个好文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤#xff08;重要#xff09; 二、Linux2.6内核进程O(1)调度队列#xff08;重要#x… 文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤重要 二、Linux2.6内核进程O(1)调度队列重要2.1 基本过程 前言
本文主要介绍了进程的优先级及其调度算法 一、进程优先级
我们计算机里面一般只有一个cpu用来处理进程数据所以对于进程获得CPU的使用权需要一种重要调度指标而进程优先级就是这种指标它用来决定一个进程能够优先获得CPU时间、内存等系统资源。
1.1 基本概念
cpu资源分配的先后顺序就是指进程的优先权priority。优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤可以改善系统性 能。还可以把进程运⾏到指定的CPU上这样⼀来把不重要的进程安排到某个CPU可能会改善 系统整体性能。
1.2 查看系统进程
在linux或者unix系统中⽤ps ‒l 命令则会类似输出以下⼏个内容 ps -l命令用于显示当前终端上的所有进程的详细信息。 ps -al命令则更加全面它显示了系统中所有用户的所有进程包括其他用户的进程的详细信息。与ps -l相比ps -al的输出包含了更多进程的信息并且不受当前终端的限制。 我们很容易注意到其中的⼏个重要信息有下 • UID : 代表执⾏者的⾝份 • PID : 代表这个进程的代号 • PPID 代表这个进程是由哪个进程发展衍⽣⽽来的亦即⽗进程的代号 • PRI 代表这个进程可被执⾏的优先级其值越⼩越早被执⾏默认为80 • NI 代表这个进程的nice值
1.3 PRI和NI • PRI也还是⽐较好理解的即进程的优先级或者通俗点说就是程序被CPU执⾏的先后顺序此 值越⼩进程的优先级别越⾼ • 那NI呢?就是我们所要说的nice值了其表⽰进程可被执⾏的优先级的修正数值 • PRI值越⼩越快被执⾏那么加⼊nice值后将会使得PRI变为PRI(new)PRI(oldest)nice(这意味着我们修改进程优先级的时候无论中间的PRI怎么改变都会会以最开始的PRI值作为基准值去改变) • 这样当nice值为负值的时候那么该程序将会优先级值将变⼩即其优先级会变⾼则其越快 被执⾏ • 所以调整进程优先级在Linux下就是调整进程nice值 •nice其取值范围是-20⾄19⼀共40个级别。当我们调整的nice值超过这个区间的时候会以区间里面的最低或最高值作为nice值 • 需要强调⼀点的是进程的nice值不是进程的优先级他们不是⼀个概念但是进程nice值会影响到进程的优先级变化。可以理解nice值是进程优先级的修正数据 1.4 调整优先级
虽然一般情况下我们是不需要调整优先级的不过我们仍然需要了解如何调整优先级。使用下面的命令都需要管理者的身份。
1.4.1 top命令
⽤top命令更改已存在进程的nice
top进⼊top后按“r”‒输⼊进程PID‒输⼊nice值按”q“退出及修改完成
1.4.2 nice命令
nice命令用于在启动一个新进程时指定其优先级即进程的“nice值”。Nice值是一个整数范围从-20最高优先级到19最低优先级默认情况下大多数进程的nice值为0。
语法nice [选项] [nice值] 命令 [参数]参数 -n 或 --adjustment指定nice值的增量或减量。 -h 或 --help显示帮助信息。 -V 或 --version显示版本信息。
1.4.3 renice命令
renice命令用于修改已经运行的进程的优先级。
语法renice [选项] 优先级 进程ID选项 -n指定要改变的优先级值取值范围为-20到19。 -g指定要调整优先级的进程组ID。 -u指定要调整优先级的用户名。 -p指定要调整优先级的进程ID默认。 -h 或 --help显示帮助信息。 -V 或 --version显示版本信息。
二、进程切换
2.1 补充概念 • 竞争性:系 统进程数⽬众多⽽CPU资源只有少量甚⾄1个所以进程之间是具有竞争属性的。为 了⾼效完成任务更合理竞争相关资源便具有了优先级 • 独⽴性: 多进程运⾏需要独享各种资源多进程运⾏期间互不⼲扰 • 并⾏: 多个进程在多个CPU下分别同时进⾏运⾏这称之为并⾏ •并发: 多个进程在⼀个CPU下采⽤进程切换的⽅式在⼀段时间之内让多个进程都得以推进称 之为并发 2.2 进程的运行和切换步骤重要
在进程运行的过程中会有个时间片的概念是操作系统进行进程调度时分配给每个进程的一段固定时间。这么做一部分上是为了防止某个进程卡死的情况例如某个进程调度的时候代码内部有个while1函数导致一直运行。及时的切换到运行队列里其它进程是很有必要的
时间片内进程可以执行其代码、访问内存和进行输入输出操作。当进程的时间片用完时操作系统会暂停该进程的执行并将其保存到某种状态通常是通过进程控制块PCB然后切换到另一个进程的时间片。 切换步骤: 一个时间片结束的进程但是还没被cpu执行完其内部的所有代码数据从cpu内被剥离下来此时进程内临时运行的数据比如执行到代码的哪一行了其中变量的一些数据等会被保存下来通常是保存到进程的私有堆栈也就是保存在task_struct本身及task_struct里面会定义一个或多个变量或指针来存储自己寄存器里面的信息及cpu内寄存器里面的内容当前进程的上下文数据会被保存到某个指定的地方这样子寄存器就可以处理新的进程的数据了而旧的进程可以重新链入运行队列当恢复到这个进程的时候就会把前一次本进程被中止时的中间数据再恢复到cpu寄存器里面去 二、Linux2.6内核进程O(1)调度队列重要
操作系统是如何根据优先级来开展的调度呢 一个cpu一个运行队列 其中queue的类型为struct task_struct队列中的[0-99]为实时优先级我们不做考虑而[100-139]则是我们进程的优先级序列。
2.1 基本过程 在Linux2.6内核中每个CPU都拥有一个独立的运行队列run_queue。 运行队列用于管理和调度该CPU上的所有可运行进程。 task_struct结构体 在Linux内核中每个进程都有一个对应的task_struct结构体用于存储该进程的所有信息。 它会被链入运行队列中在运行队列中task_struct结构体通过指针数组来维护不同优先级的进程队列。 其下的run 对应上面active wait对应expired running对应活跃进程waiting对应过期进程
这是一个类似哈希链地址法的指针数组遍历这个指针数组从上到下从左到右就完成了对进程的优先级的调度 除此之外我们在running下设计了个waiting这么做的目的是 当我们遍历这个指针数组的时候可能会有新的task_struct插入进来或者一个进程时间片结束后进程还没被cpu处理完那么此时就会进入到waiting里面当running这个指针数组遍历完的时候利用位图bitmap判断指针数据这个队列是否为空然后只需要交换上面图片中的run和wait两者指向指针的地址就能继续调度未处理完数据或者新的task_struct了