计算机操作系统知识点
前言
记录一些基础和重要的知识点。
进程与线程
- 进程:系统进行资源分配与调度的一个独立单位,是系统中的并发执行的单位
- 线程:是进程的一个实体,也是CPU调度和分派的基本单位,比进程更小、更独立运行。有时被称作轻权进程或轻量级进程
区别
- 进程是资源分配最小单位,线程是CPU调度最小单位
- 不同进程地址空间相互独立,同一进程内的线程共享同一地址空间;一个进程的线程在另一个进程内是不可见的
- 进程间不会互相影响,而一个线程挂了可能导致整个进程挂
- 创建进程或撤销进程,系统都要为之分配或回收资源,操作系统开销远大于创建或撤销现成的开销
并发 VS 并行
并发:强调一个CPU一定时间可以处理多个事情
并行:强调多个CPU同一时刻处理不同事情,真正意义上的同时处理
同步 VS 异步 VS 阻塞 VS 非阻塞
同步:调用者一直等待返回结果,方法执行完成,才能执行后续方法
异步:方法开始后就会返回,调用者无需等待其中方法执行完毕,就可以执行后续方法
主要是针对IO操作
阻塞:线程持续等待资源中数据准备完成,直到返回响应结果
非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果
主要是针对线程,可以发生在IO期间也可能发生在IO之前
调度
先来先服务 FIFS
先请求的进程先得到服务,即根据ready队列的顺序,排在前面的进程先得到服务
- **优点:**实现简单、易理解;公平
- **缺点:**平均等待时间往往很长
最短作业优先 SJF
优先服务时间最短的作业。
实际上难以实现,因为无法知道下次CPU执行的长度。但可以用公式\uptau_{n+1}=\alpha t_n+(1-\alpha)\uptau_n来对下一次CPU执行时长进行预测,其中表示最近一次的信息,\uptau_n存储了过去的信息。
- **优点:**平均等待时间短
- **缺点:**公平性不足,容易导致饿死现象的产生
优先级调度
给每个进程分配优先级,高优先级的进程首先获得CPU时间。
- 优点:
- **缺点:**容易导致饿死的现象,即优先度较低的进程永远也无法得到执行。
轮转调度 RR调度(使用最广)
抢占式调度。轮流按就绪队列顺序为每一个进程分配时间片,当一个正在执行的进程的时间片用完了,将其放回就绪队列中,换上另一个进程分配时间片。
- **优点:**保证了公平,没一个进程在一个时间段上都能得到执行
- **缺点:**平均等待时间较长
时间片大小的选取决定了RR性能高低。如果时间片大,则类似于FIFS,如果小,则花费大量时间用于上下文切换,效率很低。
一般而言,80%的进程的CPU执行时间小于时间片。
多级队列调度
将进程分成不同的队列,每一个队列内有各自的算法,每一个队列间有不同的优先级。
一般将进程氛围前台进程(优先级高)和后台进程两个队列。
队列间的调度算法两种:
- 固定优先级抢占式调度:当前台进程队列为空时,才调度后台进程
- 队列间划分时间片:每个队列有一定比例的CPU时间
多级队列反馈调度
在多级队列调度的基础上,允许进程在队列间进行迁移。
如果进程使用较多CPU时间,则迁移到更低的优先级队列,即不会让某一个进程一直长时间地执行
如果进程在较低优先级队列中等待时间较长,那么会把它放到更高优先级队列中,防止饿死现象
死锁
概念
死锁是指多个进程在运行过程中因 资源争夺 而造成的一种僵局。
死锁的产生原因
存在一些不可剥夺资源,而当两个或两个以上进程占有自身资源,并请求对方资源时,都无法继续推进。
竞争资源
- 可剥夺资源:CPU和主存
- 不可剥夺资源:不能强行收回的分配资源,如磁带机、打印机
进程推进顺序不当
死锁产生的必要条件
- 互斥条件:进程要求对所分配的资源进行排他性控制,某一段时间资源仅为自己所占有
- 请求和保持条件:当进程因请求资源而阻塞时,对已经获得资源保持不放
- 不剥夺条件:进程已获得的资源在未使用完前,不能剥夺,只能自己使用完由自己释放
- 环路等待条件:必然存在一个进程-资源的环形链
解决死锁
-
预防
- 破坏请求条件:请求一次性分配资源
- 破坏请保持条件:一个分配不到,就干脆不分配其他的
- 破坏不剥夺条件:如果得不到其他资源,则剥夺其资源
- 破坏环路等待条件:赋予编号排队请求资源
-
避免
- 银行家算法
-
检测
-
解除
-
资源剥夺
挂起某些进入死锁状态的进程,将它的其他资源剥夺,分配给其他进程
-
撤销进程
强制撤销部分、甚至全部死锁进程并剥夺其资源
-
进程回退
让一个或多个进程回退到足以避免死锁的地步,此时是自愿释放资源,并非被剥夺资源
-
页面置换算法
- FIFO先进先出置换算法:淘汰最先进入的页
- OPT最佳置换算法:选择未来最远将使用的页淘汰
- LRU最近最久未使用算法
- Clock时钟置换算法(NRU最近未用算法):为每个页设置一位访问位,将所有页面都通过链接指针链成一个循环队列
- 最不常用算法:淘汰访问次数最少的页
中断 VS 异常
中断:CPU执行指令以外的事件引起,如I/O完成中断,表示设备I/O处理已经完成,处理其能够发送下一个I/O请求,还有时钟中断、控制台中断、次盘中断、打印机中断
异常:CPU执行指令内部出现的,如非法操作码、地址越界、算数溢出
内核态 VS 用户态
内核态:类似于Linux中sudo更高权限。处于内核态的CPU可以访问任意数据,包括外围设备,比如网卡,硬盘等,也可以从一个程序切换到另一个程序,并且占用CPU不会出现抢占情况,一般是处于特权级0的状态。
用户态:只能受限制访问内存,且不能访问外围设备,也不允许独占,也就是说,CPU会被其他程序获取。