是进程得到CPU资源先后的顺序。
因为目标资源稀缺,所以进程得到CPU要排队。
优先级不是权限,能得到,但是顺序不一样
优先级也是PCB里的一个数字,一般值越低,优先级越高。
当代计算机都是基于时间片的时分操作系统。
必须考虑公平性。
展现优先级信息
那么系统怎么指定我访问文件时,是拥有者,所属组,还是other呢?
拿进程和文件的uid比较就可以确定拥有者,所有者,所属组。
pri是进程优先级 ni是nice值
进程真实优先级是pri+ni
改优先级
top之后+r
输入pid之后可以输入nice值
注意:每次修改都是基于默认值+修改后的nice值。
nice和renice也可以调整nice值。
优先级的极值问题
nice[-20,19]默认优先级80 所以Linux优先级范围是[60,99],因为要考虑公平性,所以调整范围太大。
竞争性: 系统进程数⽬众多,⽽CPU资源只有少量,甚⾄1个,所以进程之间是具有竞争属性的。为 了⾼效完成任务,更合理竞争相关资源,便具有了优先级 • 独⽴性: 多进程运⾏,需要独享各种资源,多进程运⾏期间互不⼲扰 • 并⾏: 多个进程在多个CPU下分别,同时进⾏运⾏,这称之为并⾏ • 并发: 多个进程在⼀个CPU下采⽤进程切换的⽅式,在⼀段时间之内,让多个进程都得以推进,称之为并发
单cpu单核只能一个一个cpu,一个进程 多核可以多个进程, 操作系统服务器有的有多个cpu,两个cpu同时运行就叫并行
我们的电脑起始只执行一个进程,但是cpu切换太快了,可以多个进程来回切换。
了解了并发,那么我们如何进行并发呢,这里cpu如何快速切换?
一个进程占有cpu,不会跑完所有代码,只要占用cpu,操作系统会分配一个时间片的东西。比如一个进程跑一毫秒,如果没跑完就到队列里重新排队。
这样一个进程不会一直占用cpu,所以死循环进程不会一直占用系统。
这里寄存器是保存正在运行进程的临时数据 这一寄存器就是cpu内部的临时空间 寄存器不等于寄存器内部的数据 寄存器是空间不是内容,空间只有一份,内容可以变,有多份。
这里的方框就是寄存器,存的都是临时数据。 由于时间片的原因,当进程A切走的时候我们要把寄存器的数据拷贝出来。 然后进程到队列的结尾。依次类推。 进程A切回来的时候还要把数据恢复回来,这样在下一个时间片内,进程A就可以从上次位置继续执行了。
那这些数据保存到哪里呢?
可以理解为把这些临时数据保存到task_struck里。
这里有TSS:任务状态段,保存数据
系统内存在 struct task_struct * current 指针,实时指向现在运行的进程。
每个cpu都有一个运行队列,runqueque,多个cpu就有多个。
操作系统是分为分时操作系统,基于时间片公平调度 实时操作系统,来了一个进程要立马调度完,这里工业重要领域最多
我们在电脑里基本上分时操作系统最多。
我们在数组里规定优先级的时候前100个是别的操作系统的优先级 后40个是分时操作系统,这里的40个下标正好映射实时操作系统的优先级
这里queque本质是hash表,算法用hash算法
bitmap是无符号整数
这里5个整数类型,5*32=160,能覆盖所有40位置的优先级0没有内容,1有内容
1要挑队列,2要挑进程,
这里*active指向活跃的进程
active队列里执行完后链入expired队列里, active执行完后,swap(&active,&expired)再执行active 队列,这里有两个runqueque
新进程来了放入expired队列里,就相当于就绪 实时操作系统的内核抢占,立刻放入active队列里。 双cpu时有负载,一个挂50个进程,另一个如果少,查最低的负载cpu,新进程来了放入负载低的cpu内