考题预测及解析

首先声明一点:

  • 从长远角度看,前面博客中讲的研究思路更重要
  • 从考试角度看,这篇博客就足够了,因为考点几乎是固定的
  • 另外,这篇博客写于期中考试前,后面再确定期末考试的考点是否与此一致

重点声明

  1. 多道程序设计技术,多道程序的优缺点分析;
  2. 进程状态转移,状态转移的原因(三状态模型);
  3. 进程同步:PV操作(重点),这里多做几个题目吧;
  4. 进程通信:论述消息传递和共享内存的区别;
  5. 线程:论述多进程、多线程的优劣;
  6. CPU调度算法(大概五分左右),算(带权)周转时间(多种算法);
  7. 死锁部分(重点):银行家算法、安全状态的判定;
  8. 程序的装入、链接,仔细对比各种方式的区别;
  9. 内存管理:空闲内存分配方法,给一个内存映像,写出四种分配方法的结果;
  10. 内存管理:分页是一定考的;
  11. 虚拟存储器的思想,以及页面置换算法;
  12. IO:不考2333;
  13. 磁盘调度算法;
  14. 文件系统,计算题;

这些题目和之前博客讲的很多内容都大不相同,这里考的十分具体,大多数都是算法题,当然会有一些理解性的题目。

例题讲解

1.多道程序设计技术

基本思想:将多个程序同时放入内存,使他们共享系统中的资源。
特点:

  • 内存中存放了多个程序,而不是一个;
  • 宏观上并行,给我们的假象是多个程序同时在执行,其实某一时刻只有一个程序在执行;
  • 微观上串行:某一时刻只有一个程序在执行,即多个程序轮流占用CPU,交替执行;

多道程序设计带来的优点:

  • 首先解释三个利用率的提高:CPU, IO, Memory,然后是吞吐量;
  • 将等待IO的时间拿出来执行其他程序,提高了CPU利用率;
  • 可能将多个程序的IO操作集中起来,也提高了IO设备的利用率;
  • 内存中装入多道程序轮流执行,提高了内存的利用率;
  • 将等待IO的时间利用后,提高了系统的吞吐量,降低了程序运行所需要的费用;

多道程序设计带来的缺点:

  • 增加了系统的不确定性,很难确定某一个程序的终止时间;

2.进程同步

先提一个很有意思的问题:解释程序和进程的区别

  • 程序保存在磁盘中,是静态的,而进程在内存中,是动态的概念
  • 程序保存在磁盘中的形式是文件,如exe文件,而进程在内存中的形式是PCB+代码段+数据段+堆区+栈区
  • loader将程序从磁盘中加载到内存中,并分配PCB以及代码段、数据段、堆、栈后进程才可执行,进程有其生命周期,且进程与程序不是一一对应的。
  • 进程是系统进行资源分配的基本单位,而程序仅仅是静态的指令代码。

此问题能区分科班出身程序员和培训机构出来的程序员,当然这是建立在对操作系统的理解之上的,如果理解了进程的概念自然能明白这个问题。

关于进程的状态转移:
就绪态–>运行态:

  • CPU有空闲、进程处于就绪状态,此时调度算法将就绪队列中的一个进程调度到CPU上运行

运行态–>就绪态:

  • 时间片用完,被迫暂停执行
  • 也可能因为优先级低被抢占:进程A执行时,某优先级更高的B为就绪态,则进程A会被抢占,强行进入就绪态,优先执行进程B。
  • 此时收回CPU资源,再次执行调度程序。

运行态–>阻塞态:

  • 该进程请求IO
  • 等待某个事件或者请求访问某个临界资源,而该临界资源被其他程序占用
  • 此时收回CPU资源,再次执行调度程序

阻塞态–>就绪态:

  • 阻塞的原因解除,如:IO结束,某被占用的临界资源被释放
  • 将此进程插入到就绪进程队列中,等待再次获得CPU。

练习题:
在一个单处理机的系统中,OS的进程有运行、就绪、阻塞三个基本状态。假如某时刻该系统中有10个进程并发执行,在略去调度程序所占用时间情况下试问:
(1)这时刻系统中处于运行态的进程数最多有几个?最少有几个?
(2)这时刻系统中处于就绪态的进程数最多有几个?最少有几个?
(3)这时刻系统中处于阻塞态的进程数最多有几个?最少有几个?

参考答案:
(1)运行态最多有1个,最少有0个。
(2)就绪态最多有9个,最少有0个。
(3)阻塞态最多有10个,最少有0个。

信号量的PV操作:
信号量的定义:

struct semaphore{int value;struct PCB *queue;
}
void wait(semaphore s)
{s.value-=1;if(s.value<0)block(s.queue);//当前进程进入阻塞态,并加入阻塞队列
}
void signal(semaphore s)
{s.value=s.value+1;if(s.value>=0)wakeup(s.queue);//从阻塞队列中唤醒一个进程
}

心烦,学期末大家都在图书馆,搞的图书馆wifi压根不能用,而且还没流量了,想骂人^ - ^,图片也他喵的传不上来,最近这Google Chrome也犯浑,卡的一批…

吃水果问题:
桌上有一空盘,只允许存放一个水果。爸爸专向盘中放橙子,妈妈专向盘中放苹果,女儿专等吃橙子,儿子专等吃苹果。规定当盘空时一次只能放一个水果供吃者自用,请用PV操作实现爸爸、妈妈、女儿、儿子四个并发进程的同步。

semaphore s1=1;//s1表示盘的状态:1为空;0为满。
semaphore s2=s3=0;//s2和s3分别表示橙子和苹果的个数。
father()
{while(1);{P(s1);放入橙子;V(s2);}
}
mother()
{while(1);{P(s1);放入苹果;V(s3);}
}
daughter()
{while(1);{P(s2);从盘中取出橙子;V(s1)}}
son()
{while(1);{P(s3);从盘中取出苹果;V(s1)}
}

笼子问题:
有一只笼子,每次只能放一只动物,猎手向笼子中放猴子,农民向笼子中放猪,动物园等待买笼中的猴子,饭店等待买笼中的猪,试用PV操作写出他们能同步执行的程序。

semaphore s1=1;//初始状态下,笼子为空。
semaphore s2=s3=0;//初始状态下猴子和猪的个数。
hunter()
{while(1);{P(s1);放猴子;V(s2);}
}
famer()
{while(1);{P(s1);放猪;V(s3);}
}
zoo()
{while(1);{P(s2);
取猴子;V(s1)}}
Restaurant()
{while(1);{P(s3);
取猪;V(s1)}
}

关于PV操作:将P操作理解成申请,将V操作理解成通知,那么上述问题非常简单;

3.进程调度相关

周转时间定义:从作业被提交给系统开始,到作业完成为止的这段时间间隔
周转时间=在外存上等待被调入的时间+在就绪队列上等待调度的时间+在CPU上执行的时间+进程等待IO操作完成的时间。

带权周转时间:周转时间/实际服务时间

调度算法有:先来先服务、短作业优先、时间片轮转调度、

看下先来先服务与短作业优先的计算例题:

思路很简单,计算也很简单,这里的短作业优先是非抢占式的。

还有最短剩余时间优先调度,需要每一时刻都计算各个进程的剩余时间

优先级调度算法:给每个进程赋予一个优先级,如果单纯考这个算法的话,会很简单,也就让根据优先级排个序(我们课上约定最小整数对应最大优先级)

对上述算法做改进,衍生出:高响应比优先级调度

  • 引入动态优先权=(等待时间+要求服务时间)/(要求服务时间)
  • 当然也有抢占式和非抢占式版本,非抢占式版本做题比较简单,抢占式的话,大概率不会考,因为计算变得十分复杂。

多级队列调度算法:

  • 笔者手上没有具体题目,如果要考的话,出题也不怎么好处
  • 其基本思想是,将就绪队列划分成多个队列,如前台队列、后台队列
  • 每一个队列都有独立的调度算法,如前台使用轮转调度,后台使用先到先服务。

多级反馈队列调度算法:

  • 也不怎么会考
  • 一个进程在多个队列之间移动,使用CPU越多,优先级越低
  • 比如划分成Q0, Q1, Q2
  • 某个进程在Q0执行一段时间后转移到Q1,再执行一段时间转移到Q2
  • 基本思想是这样的

4.进程通信

这里来一个开放性题目,老师说考的概率很大;

论述对比两种进程通信方式:消息传递和共享内存(实现难度、使用难度、适用范围)

  • 共享内存实现比较简单,基本思想是在内核开辟一部分空间,让多个进程之间共享该空间。而消息传递的实现比较复杂,需要管理维护消息队列;
  • 共享内存的最大缺点:需要程序员自己管理同步和互斥问题,当共享变量变得多起来以后,极易容易出现死锁问题;
  • 消息传递:不需要程序员自己管理同步和互斥问题,正因如此,比较适合解决复杂问题;
  • 由于消息传递实现机制比较复杂,其不适合频繁使用,如需要进程间传递大量数据,应使用共享内存;

5.线程相关

多进程VS多线程

  • 进程由PCB进行管理,线程由TCB进行管理;
  • PCB所占空间大于TCB,所以创建进程和进程切换所需要的开销大于线程,这也是引入多线程的原因,而且线程的内存占用也少于进程;
  • 进程是计算机分配资源的基本单位,线程是调度的基本单位,即OS会给进程分配资源,线程使用进程的资源,线程接受调度,同时一个进程内可有多个线程;
  • 线程之间会相互影响,一个线程崩溃可能会使其他线程也崩溃,但是进程之间是隔离的,不会受此影响;
  • 进程需要考虑通信机制,数据共享复杂,而线程共享进程的一些数据,使得数据共享变得十分容易;
  • COW技术可使进程创建开销变小;
  • 多进程切换时会频繁刷新快表,而多线程则可更好利用快表;

6.死锁相关

银行家算法输入:

  • 可利用资源向量Available,Available[j]=k表示Rj有k个资源可用
  • 最大需求矩阵Max Max(i,j)=k表示进程i需要Rj的最大数目是k
  • 分配矩阵Allocation Allocation(i,j)=k表示进程i当前已经分得Rj类资源的数目为k
  • 需求矩阵Need

算法描述:

  • Work表示系统当前资源数目 初值 Work=Avaliable
  • Finish:进程能否顺序完成 初值Finish[i]=true
  • 寻找能满足下述条件的进程i:Finish[i]=true, Need[i,j]<Work[j]
  • 如找到则:Finish[i]=true, Work[j]+=Allocation[i,j]
  • 一直找下去,如果所有进程均已结束则安全,否则不安全。

也就是说银行家算法其实是用来判断当前状态是否是安全状态的;
建议找个题目做做!

7.程序装入链接

他们的具体含义就不说了,直接看程序装入链接

可能考点:分析静态链接和动态链接的优劣(生成文件大小、模块升级、模块兼容性、运行效率)

  • 静态链接生成的可执行文件较大,动态链接产生的可执行文件较小
  • 动态链接容易对模块进行升级,不需要重新编译即可完成升级只需要替换文件即可。而静态链接需要重新编译。
  • 动态链接虽然容易升级,但是可能会造成版本不兼容,如果采用静态链接方式的话,能借助编译器减缓版本不兼容问题。
  • 静态链接启动时间长,动态链接启动时间短。
  • 静态链接一次装入即可,运行时动态链接需要在运行时装入,可能影响运行效率。

8.内存管理相关

分页必考,下题容易做错:
已知某分页系统,主存容量为64K,页面大小为1K,对一个4页大的作业,其0、1、2、3页分别被分配到主存的2、4、6、7块中。

  • 1.将十进制的逻辑地址1023、2500、3500、4500转换成物理地址

    • 首先计算1023对应的物理地址

      • 1023对应的页内偏移为1023%1024=1023
      • 物理页框2对应的初始地址为:2048
      • 2048+1023=3071
      • 注意1KB=1024B,这是错点;
    • 计算2500对应的物理地址
      • 2500对应的页内偏移为2500%1024=452
      • 2500/1024=2表示其在2号页里
      • 对应物理页框6
      • 物理页框6的起始地址:6*1024=6144
      • 6144+452=6596
    • 其他的就不算了
    • 4500/1024=4越界

分段不知道考不考,目前的OS实现都绕开了分段,个人感觉考的可能性不大;

还有一个考点,空闲内存分配算法,具体看内存管理:

  • 首次适应
  • 循环首次适应
  • 最佳适应
  • 最坏适应

9.虚拟存储管理

局部性原理、请求页式存储管理、页面置换算法

为什么称为虚拟存储器?

  • 通过仅将部分程序调入内存运行的方式,使一个很大的程序,可以在较小的内存空间上运行。
  • 如果每个程序都装入一部分运行的话,还可以使内存同时装入更多的进程并发执行,提高系统吞吐量
  • 进程换进换出是操作系统完成的,用户并不知道,所以是从逻辑上对内存容量进行了扩充。而这个感觉是虚拟的,所以称为虚拟存储器。

页面置换算法:

  • 最佳置换算法:选择在最长时间内不被访问的页面,仅仅在理论层面研究,因为其选择在未来时间内最长时间不被访问的页面,但是OS没办法预测未来访问顺序鸭。
  • 先进先出置换算法:这个还是最简单的思想
  • 最近最久未使用置换算法(LRU):计算t值最大的页予以淘汰
  • Clock置换算法:设置一个访问位,如被访问则置1,当发生缺页中断时,检查头指针指向的页面,若R=0则换出,否则设置R=0,检查下一页。

10.磁臂调度算法

访问磁道顺序:55,58,39,18,90,160,150,38
当前磁头处于100号磁道上

先来先服务:

  • 寻道距离:45+3+19+21+72+70+10+112+20=372

最短寻道时间优先:

  • 寻道顺序:90,58,55,39,38,18,150,160
  • 寻道距离:10+32+3+16+1+20+132+10=224

电梯调度算法—SCAN

  • 沿着某个方向移动,直到该方向没有请求,逆转方向
  • 假设先沿着磁道增加的方向移动,访问顺序:150,160,90,58,55,39,38,18
  • 移动距离:50+10+70+32+3+16+1+20=202

循环扫描算法—CSCAN

  • 只沿一个方向移动,没有逆转的操作
  • 访问顺序:150,160,18,38,39,55,58,90

总结:

  • 先来先服务:永远是最公平的,但是低效
  • 最短寻道时间:高效、但是不公平,容易产生饥饿
  • 电梯调度算法:折中的方案
  • 循环扫描算法:也是折中的方案,能够降低最坏情况下的时延

11.文件系统

练习1:
一个文件有64M,磁盘每个盘块的大小为1KB,每个盘块号占2B,则这个文件的索引块有几个?需要几级索引?

  • 先算该文件需要多少个盘块:64M/1K=64K个盘块
  • 一个盘块号占2B,64K个盘块需要占用:64Kx2B=128KB
  • 128KB需要的盘块为:128个
  • 一级索引不好管理
  • 引入二级索引,一个一级盘块可寻址:1KB/2Bx1KB=512KB
  • 一个二级索引块可寻址:1KB/2Bx512KB=256MB数据
  • 所以需要引入二级索引

练习2:
文件系统采用混合的方式管理存储文件的物理块,设块的大小为512B,每个块号占3B,如果不考虑逻辑块号在物理块中所占的位置,求一级索引、二级索引和三级索引可寻址的文件最大长度。

  • 一个块可装512B/3B=170个索引
  • 一个一级索引块可寻址:512B/3Bx512B=85KB
  • 一个二级索引块可寻址:512B/3Bx85K=14MB
  • 一个三级索引块可寻址:512B/3Bx14MB=2.3GB

练习3:
有一磁盘共有10个盘面,每个盘面上有100个磁道,每个磁道有16个扇区,每个扇区512字节。假定文件分配以扇区为单位,若使用位示图来管理磁盘空间,问:

  • 磁盘容量的大小是:10x100x16x512B=7.8MB
  • 位图所占用的空间是:10x100x16/8=2000B,2000B/512B=3.9, 所以至少需要4个扇区来保存位图
  • 若空白文件目录的每个表目占5B,什么时候空白文件目录占用空间大于位图:没弄懂啥意思。

独乐乐不如众乐乐!开心就点个赞叭!
本系列博客目录

操作系统-复习-考题预测及解析-期中考试相关推荐

  1. 操作系统-复习-考题预测及解析-期末考试(南航)

    文章目录 考题预测及解析 考点 概述部分 进程部分 内存管理部分 磁盘调度 文件系统 IO相关部分 系统调用部分 考题预测及解析 首先声明一点: 从长远角度看,前面博客中讲的研究思路更重要! 从考试角 ...

  2. 操作系统复习(第四版)--命中期末考试所有大题

    第一章 操作系统绪论 也可看视频看几个重点大题:https://www.bilibili.com/video/BV18X4y1u7aU 单道.多道非抢占式和多道抢占式 有三个程序ABC,它们使用同一个 ...

  3. 七年级计算机考试知识点,七年级语文期中考试复习知识点整理

    合理的总结,合理的归纳,对于考试成绩会有很大的帮助,下文为大家推荐了七年级语文期中考试复习知识点,祝大家期中考试顺利. .文章体裁 此文是一篇:诗歌.小说.散文(抒情散文.叙事散文).剧本.说明文.议 ...

  4. 天津理工大学操作系统期中考试复习 2020

    期中考试总结 1. 操作系统主要功能及主要特征 主要功能:处理机管理.存储器管理.设备管理.文件管理.作业管理 主要特征:并发.共享.虚拟.异步 2. 并发与并行概念及区别 并发:两个或多个事件在同一 ...

  5. java职称考试试题及答案_2017年9月计算机考试Java部分考题预测

    2017年9月计算机考试Java部分考题预测 阅读一切好书如同和过去最杰出的人谈话.以下是小编为大家搜索整理的`2017年9月计算机考试Java部分考题预测,希望能给大家带来帮助!更多精彩内容请及时关 ...

  6. 七年级计算机会考重点知识点总结,七年级语文期中考试复习知识点总结

    查字典语文网为大家整理了七年级语文期中考试复习知识点总结,供大家参考和学习,希望对大家的语文学习和语文成绩的提高有所帮助. 一.表达方式:记叙.描写.抒情.说明.议论 二.表现手法:象征.对比.烘托. ...

  7. 考虑题4所示的日志记录_福建省厦门双十中学2016届高三上学期中考试地理【解析】...

    24.此时甲.乙.丙三地的大气垂直状况相比较 A.甲地比乙地稳定B.乙地对流最旺盛 C.乙地比丙地稳定D.丙地最稳定 25.正午前后 A.甲地气温上升最快B.乙地可能出现强对流天气 C.丙地刮起东北风 ...

  8. 中国大学MOOC-陈越、何钦铭-数据结构-2019夏期中考试+解析

    中国大学MOOC-陈越.何钦铭-数据结构-2019夏期中考试+解析 判断题 1-1 用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关. (3分)TRUE [解析]:邻接矩阵是用一 ...

  9. 《软件需求分析(第二版)》期中考试试题总结/复习资料

    文章目录 前言 一.单选题 二.判断题 三.简答题 总结 前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素.需求分析是软件定义阶段中的最后 ...

最新文章

  1. 《BI项目笔记》创建标准维度、维度自定义层次结构
  2. 华为云计算之快照技术
  3. php性能测试下载,PHP性能测试工具xhprof安装与使用方法详解
  4. OnLineML:时序数据挖掘
  5. flutter字体不跟随系统_Flutter自定义字体无法加载
  6. PL/SQL 训练12--动态sql和绑定变量
  7. java hashtable keys_Java Hashtable keys()方法与示例
  8. python爬虫接口_python爬虫之百度API调用方法
  9. Automapper 3.2.1以下方法或属性之间的调用不明确
  10. DB2with的定义与用法
  11. SharePoint 2013 添加Ribbon菜单
  12. 领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)
  13. WOW装备大全(07.11.30)
  14. 萌新的51之旅——串口通信(2)
  15. 固态硬盘的速度和内存的速度差距
  16. JS的垃圾回收机制是什么
  17. 宝宝出生前需要准备的用品
  18. 苹果手机小圆圈怎么设置_敬业签苹果手机版软件小账本怎么设置密码?
  19. AutoGAN-Distiller: Searching to Compress Generative Adversarial Networks, ICML2020
  20. TOEFL wordlist 8

热门文章

  1. python 最新版本(V3.8.8_32bit)安装教程
  2. Oracle闪回技术详解
  3. 电路matlab搭建,MATLAB电路仿真搭建教程
  4. 苹果超薄触摸显示技术专利曝光:重新定义轻薄
  5. chrome设置主页打开为百度,免去每次都要输入网址
  6. UI设计中聊天气泡框的设计技巧
  7. 超简单的vim配置高亮
  8. 百位产业一线大咖齐聚上海都聊了啥?POW'ER 2020峰会尖峰48小时全程回顾
  9. android 该文件包与具有同一名称的现有文件包存在冲突
  10. 使用微PE工具箱安装Win10系统步骤