面试知识点整理-OS部分

处理机调度的层次

一个作业从提交到执行结束,往往需要经过三层调度,即高级调度、中级调度、低级调度。
高级调度:又叫长程/长期/作业/宏观调度。他是从外存后备队列中选择作业进入内存就绪队列,一般高级调度执行的频率较低,时间尺度为分钟、小时、天。
中级调度:又叫交换调度。在内存和外存对换区之间按照给定的策略选择进程对换,主要解决的是内存紧张的问题,提高内存的利用率和系统吞吐量。
低级调度:又叫短程/短期/CPU/进程/微观调度。低级调度主要干的是从就绪队列中选择一个进程来执行并通过分派程序给其分配处理机,也是OS中最基本的调度,执行的频率很高,时间尺度一般为毫秒。

一张图说明:
这里写图片描述

单处理器系统的进程调度

调度准则

不同的CPU调度算法具有不同属性,为了选择算法以适应特定情况,必须分析各个算法的特点。为了比较CPU调度算法,分析员提出了许多准则:

  • CPU使用率:目的是让CPU一直在干活,但是别累着,一般对于真实系统,使用率在40%-90%之间最好。
  • 吞吐量:它指一个时间单元内所完成进程的数量,对于时间长的进程,吞吐量可能为每个小时一个进程,对于短进程,吞吐量可能为每秒10个进程。
  • 周转时间:从进程提交到进程结束工作所花费的时间叫做周转时间,周转时间为所有时间段之和,包括等待进入内存花费的时间、在就绪队列中等待花费的时间、在CPU和I/O上执行花费的时间。
  • 等待时间:CPU调度算法并不影响进程在CPU上运行的时间,也不影响在I/O上花费的时间,它只影响进程在就绪队列中等待花费的时间,等待时间为在就绪队列中等待花费的时间之和。
  • 响应时间:对于交互系统,“周转时间”不是最佳准则,进程能相当早就产生输出,并继续计算新结果同时输出以前的结果给用户,因此,另一事件是从提交请求到产生第一响应的时间,这种时间称为响应时间,是开始响应需要的时间。

调度算法

  • 先到先服务调度算法(FCFS,first-come,first-served):先请求CPU
    的进程先分配到CPU。FCFS策略可以用FIFO队列实现。当一个进程进入到就绪队列中,其PCB链接到队列的尾部,当CPU空闲时,CPU分配给位于队列头的进程,接着将该运行进程从队列中删除。FCFS调度算法是非抢占的,一旦CPU被分配给了一个进程,其他进程必须等到该进程运行完毕后才能去请求CPU。允许一个进程保持CPU时间过长是一个严重的问题,会使各个进程的平均等待时间变得很长,并且会使CPU和设备的使用率变得更低。
  • 最短作业优先调度(SJF,shortest-job-first):当CPU空闲时,他会赋给具有最短CPU区间的进程,如果两个进程有相同的长度,那么可以使用FCFS调度来处理。SJF调度算法可以被证明是最佳的调度算法,因为他的平均等待时间最小。SJF算法的主要难度是获取下一个进程CPU区间段的长度,对于批处理系统的长程调度,可以将用户提交作业时所指定的进程时间极限作为长度。SJF调度经常作用于长程调度,在短程调度中是很难实现的,因为没有办法知道下一个CPU区间的长度。一种方法是近似SJF调度,虽然不知道下一个CPU区间的长度,但是可以根据之前的来预测他,即计算下一个CPU区间的近似值。SJF调度可能是抢占的或非抢占的,当一个新进程到达就绪队列时而以前的进程正在执行时,就需要选择。与当前进程相比,新进程可能有一个更短的CPU区间,抢占SJF算法可抢占当前运行的进程,而非抢占SJF则会允许当前运行的进程先完成其CPU区间,因此SJF又被称为最短剩余时间优先调度
  • 优先级调度(priority scheduling algorithm):每一个进程都有一个优先级与其关联,具有最高优先级的进程会优先被分配CPU。优先级相同的采用FCFS顺序调度,SJF算法属于简单优先级算法,其优先级为下一个CPU区间的倒数,CPU区间越大,优先级越低。采用优先级调度有极大地可能出现无穷阻塞,也叫饥饿,很容易造成一个低优先级的进程始终得不到CPU,解决的办法之一为老化技术,即逐渐增加在系统中等待很长时间的进程的优先级。
  • 轮转法调度(RR,round-robin):转门为分时系统设计,类似于FCFS,但是增加了抢占以切换进程。定义一个较小的时间单元,称为时间片,一般为10-100ms。将就绪队列作为循环队列,CPU调度程序循环就绪队列,为每个进程分配不超过一个时间片的CPU。RR算法的性能很大程度上依赖于时间片的大小,时间片太长就变成了FCFS,时间片很小的话,就可以看成n个进程对于用户都有他自己的处理器,速度为真正处理器速度的1/n。
  • 多级队列调度(multilevel queue scheduling algorithm):将就绪队列分成多个独立队列,根据进程的属性,如内存大小、进程优先级、进程类型,一个进程被永远分配到一个队列,每个队列有自己的调度算法。另外,队列之间必须有调度,通常采用固定优先级抢占调度。

死锁

OS学习笔记一

内存管理

基本概念

  • 逻辑地址和物理地址:CPU所生成的地址通常称为逻辑地址,而内存单元所看到的地址,即加载到内存地址寄存器中的地址,通常称为物理地址。
  • 动态加载:采用动态加载时,一个子程序只有在调用时才被加载,有点是不用的子程序决不会被加载。

内存分配

  • 固定分区分配:最简单。将内存分成多个固定大小的分区,每个分区只能容纳一个进程,现在已经不再使用。
  • 可变分区方案:操作系统里维护一张表,记录哪些内存可用哪些内存不可用,一开始所有内存都可用于用户进程,因此可以作为一大块可用内存,称为。当进程需要内存时,就为该进程找到足够大的孔,从该孔为其分配内存。
  • 动态分区分配

动态分区分配算法

  • 首次适应(first-fit):分配第一个足够大的孔,查找从头开始,也可以从上次首次适应的结束时开始,一旦找到足够大的空闲孔,就可以停止。缺点是容易留下多个内存碎片。
  • 最佳适应(best-fit):分配最小的足够大的孔,必须查找整个列表,除非列表按照大小排序。缺点是容易留下多个内存碎片。
  • 最差适应(worst-fit):分配最大的孔。优点是不至于使空闲区间太小,产生碎片的可能性小,缺点是缺乏大的空间分区。
    模拟结果显示:首次适应和最佳适应方法在执行时间上和利用空间方面都好于最差适应,首次适应和最佳适应在利用空间方面难分伯仲,但是首次适应的速度会快些。

碎片问题

首次适应和最佳适应都有外部碎片的问题。随着进程装入和移出内存,空闲内存被分成多个小片段,当所有可用内存之和可以满足请求但是不连续时,这就出现了外部碎片问题。一种解决办法是紧缩,移动内存内容,使所有空闲空间合并成一整块。另一种解决办法是允许物理地址是非连续的,这种方案有两种互补的实现技术,即分页和分段。

参考资料:
1、处理机调度的层次和调度算法的目标
2、《操作系统概念》(第七版)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值