🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀操作系统💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
前言
简答题
一、进程由计算和IO操作组成,据此,进程可分为哪几类,不同进程占比的不同对长期调度和短期调度有什么影响
二、操作系统为什么要设计I/O SubSystem,Buffer的作用是什么
三、 在基本的分页(paging)中,页表中的每项记录只用保存什么;对于请求分页(demanding paging),需要增加哪些记录,为什么
四、文件使用前为什么要执行open()操作,结束后为什么要执行close()操作;操作系统是怎么实现不同进程对同一文件的访问的
五、磁盘定位时间(positing time)由什么组成,说明SSTF不一定比LOOK算法好
六、overhead的意思
论述题
一、在进程的内存分配和文件存储中,会产生碎片,碎片分为哪几种,在内存分配和文件存储中会产生什么碎片
二、对于以下几个方面,操作系统有什么保护措施:
三、评估进程调度算法性能的标准为什么是等待时间?对于非抢占式调度,抢占式调度对于减少平均等待时间是否有帮助。以SJF为例举例说明,要求:至少有四个进程,每个进程的arrival time和burst time不同
四、写出非忙等待的wait()和signal()操作的伪代码实现
五、编辑
总结
前言
本系列题目均选自山东大学往年考题,供大家复习参考。一定要在复习完基础知识后(最好把书本都看一遍,这样子知识体系才是完善的),再来参考这个练习题。
两个不可取:一、不可不复习知识点,光做题;二、不可只复习知识点,不复习
猫猫祝大家都能取得好成绩呀~~~
简答题
一、进程由计算和IO操作组成,据此,进程可分为哪几类,不同进程占比的不同对长期调度和短期调度有什么影响
问题解答:
进程可以分为计算密集型进程、I/O密集型进程和混合型进程
计算密集型进程:这类进程主要执行计算操作,很少进行输入/输出操作。它们需要大量CPU资源去计算
I/O密集型进程:这类进程有很多的I/O操作,如读写文件、网络通信等,它们可能不需要很多的计算需求,在CPU上占用的时间较少
混合型进程:同时具有计算和I/O操纵的进程,这类进程在执行期间会在CPU计算和I/O请求之间频繁切换
长期调度(作业调度):负责从外存的后备队列中选择进程到内存的就绪队列中。I/O密集型进程多时,系统会优先调度这些进程,因为它们快速释放内存资源,同时能够让I/O设备早点开始运行;计算密集型进程多时,系统会平衡两种类型的进程,以提高CPU和I/O设备的利用率
短期调度(CPU调度):负责从内存的就绪队列中选择进程到CPU中运行。在I/O密集型较多情况下,CPU的占有率会比较低,会频繁进行短期调度;在计算密集型过多时,CPU容易过载,需要用时间片轮转或者优先级策略调度
二、操作系统为什么要设计I/O SubSystem,Buffer的作用是什么
1、为什么要设计I/O子系统
- 抽象化:I/O子系统统一管理所有的I/O设备,利用抽象化解耦了应用程序和具体I/O设备之间的联系,让应用程序无需关心硬件细节
- 设备独立性:让同一个系统调用不同I/O设备的时候,这些I/O设备之间是彼此独立不影响的
- 缓冲和缓冲管理:利用缓存区缓解了CPU和I/O速度不匹配的问题
- 错误处理:集中管理I/O错误,提高系统稳定性
- 数据管理:确保数据在设备间的传输是高效的
2、缓冲区的作用是什么
- 解决速度不匹配问题:缓冲区可以解决CPU和I/O设备之间速度不匹配问题。I/O设备多个处理结果存在缓冲区中,让CPU统一来处理
- 减少I/O次数:将多个小的I/O请求合并成一个大的I/O请求,统一给CPU处理;或者将大的I/O请求分割成方便传输的不同块
- 提高系统容错率:buffer相对于一个临时存储器,当I/O数据出现丢失等情况,可以从buffer中恢复数据
三、 在基本的分页(paging)中,页表中的每项记录只用保存什么;对于请求分页(demanding paging),需要增加哪些记录,为什么
基本分页:对应非虚拟内存情况下,此时允许进程会把进程的所有内容都一起送到内存中,然后再进行访问
请求分页:为了虚拟内存技术的实现。此时一个进程被调度,只有这个进程需要这个页时,页面才会被调度进来
基本分页中只保留帧号。MMU从页表中的到每一页对应的帧号,然后完成从逻辑地址到物理地址的映射,由于页号和页表号都是从0开始一一对应的,所以页表中不需要记录帧号对应的页号。
请求分页中需要增加记录:
- 保护位:也就是有效/无效位,是实现请求调页必须要求的。因为在请求调页中新的进程被调度,内存和页表中的数据不会被重写,所以有一些页数据是该进程不能访问的,有些页数据的访问权限是改变的。所以需要保护位来实现访问权限/空值等设定和保护
- 访问位:一旦页表满了之后,仍然出现缺页这个时候就需要调换出一个页来。而选择调换哪个页就要看哪个页被访问的可能性最小,所以需要访问位去记录访问情况(多种调换方法,访问位记录方式也存在不同)
- 修改位:每次页被调出后,通过修改位来判断是否需要重新写回磁盘。如果该页被修改过就需要写回磁盘,否则不用写回磁盘
四、文件使用前为什么要执行open()操作,结束后为什么要执行close()操作;操作系统是怎么实现不同进程对同一文件的访问的
不同进程访问同一文件=不同进程访问同一文件的数据=不同进程共享数据
执行open操作:
- 检查访问权限。一个进程使用文件前执行open操作,操作系统会检查这个进程是否有访问权限访问这个文件,保护文件访问的安全
- 分配资源。open调用会让操作系统给进程分配必要的资源来实现对文件的操作
执行close操作:
- 释放资源。close操作让进程占用的文件管理资源得到释放,防止资源耗尽
- 确保数据完整性。close操作会让强制文件的数据重新写回磁盘,确保数据不会因为进程突然中断而丢失
操作系统通过使用虚拟内存技术实现共享数据。通过共享数据实现不同进程对同一个文件数据进行访问。具体来说,多个进程允许将同一个文件映射到各自的虚拟内存中,从而实现对数据的共享
五、磁盘定位时间(positing time)由什么组成,说明SSTF不一定比LOOK算法好
- 磁盘定位时间:寻道时间+旋转延迟+I/O时间
SSTF为什么不一定比LOOK算法好
- SSTF算法:最短寻道时间优先算法,选择下一个服务时会选择离当前磁头最近的请求去服务,减少磁头移动距离。但是存在以下两个问题:一、可能出现饿死现象。远离磁头当前位置的请求长时间得不到服务,因为磁头附近一直有新请求;二、SSTF算法寻找的是离当前磁头最近的,这是一种局部最优,不一定构成全局最优
- LOOK算法:是SCAN算法的一种改进,具体思路是在一个方向上处理请求,直到前面没有新的请求为止,然后换方向,继续处理请求。好处:一、避免了饿死现象;二、能够提高公平性(C-LOOK算法公平性更好)
六、overhead的意思
额外的资源消耗和开销
举例:
- 上下文切换。OS从一个进程切换到另一个进程需要保存上一个进程的现场例如数据、状态等,同时要加载下一个进程的各自状态信息。保存、加载这些信息对任务的处理本身没有意义,是额外的一种资源消耗
- 索引分配和链式分配。索引分配需要维护一个索引块,让索引块中有指针指向磁盘的各个部分从而实现进程对磁盘的访问,这个索引表就是一个额外资源开销。链式分配中每个数据块都要包含一个指针指向下一个数据块,这个指针就是一个额外的资源消耗和开销
论述题
一、在进程的内存分配和文件存储中,会产生碎片,碎片分为哪几种,在内存分配和文件存储中会产生什么碎片
文件存储是外存,外存中的分配是一块一块为单位进行的;进程是内存,内存中的分配是一个一个单元进行的
在内存分配和文件存储中都会产生内部碎片和外部碎片
内存分配的内部碎片:内存管理系统将内存分配给进程,分配的内存大小固定,而进程实际需要的内存大小小于分配的内存,未使用的部分就是内碎片。
内存分配的外部碎片:随着进程的加载和卸载,内存中会留下许多小的空闲块。这些空闲块太小无法满足新的进程需求,构成外部碎片。
文件存储中的内部碎片:如果文件系统以固定数量、大小的块来存储文件,而文件的大小小于块的内存综合大小,空闲块就是内部碎片
文件存储的外部碎片,随着文件的增添和删除,原空间终会留下空闲段,而这些空闲段无法被文件所使用,从而构成外部碎片
二、对于以下几个方面,操作系统有什么保护措施:
区分用户程序和系统程序的执行:
1、将CPU的状态分为内核模式和用户模式,同时将指令分为特权指令和非特权指令
2、内核模式下运行的程序都成为系统程序,它能访问所有的硬件资源和内存,能够执行特权指令
3、用户模式下运行的程序大多是用户程序,它不能直接访问硬件资源需要调用OS提供的系统接口,不能执行特权指令但是可以执行非特权指令
防止进程长时间占用CPU:
采用时间片轮转(RR)进程调度策略:给每个进程分配固定的时间片,当时间片耗尽后,调度器将CPU分配给另一个进程
内存的分段管理中,限制用户只能访问相应的地址以及读写权限:
两个方面:访问相应地址、读写权限
在内存分段管理中,将每个进程的按照用户视图角度分为多个段,同时给进程一个段表。进程按照直接的段表去访问分给它的段内地址,不能访问其他进程的内存。同时分段表定义了每个段的访问权限(读、写等),进程不能违背这些访问权限
防止死锁的产生:
两个方法:死锁预防、死锁避免
一、预防死锁:破坏死锁的必要条件
破坏互斥:非共享资源必须互斥,共享资源可以不互斥,无法从互斥下手
破坏占有等待:拥有不等待,要求进程在执行前获得所有资源。或者等待不应有在申请其他资源时释放掉已分配的资源。
破坏非抢占:如果一个进程占有资源并且无法立刻得到正在申请的资源,那它占有的资源可以被抢占。
破坏循环等待:对所有资源进行排序,要求进程从小到大申请资
二、死锁避免:放松条件,允许可能发生死锁,但是在死锁发生前就阻止它
有银行家算法、资源分配图算法等死锁避免算法,利用这些算法可以在死锁发生前就阻止死锁的发生,从而做到死锁避免
文件的访问权限:
文件的访问权限、文件的组织管理等操作都归文件系统统一管理。文件系统会给每个文件分配一个FCB,其中记录了该文件的所有者、创建信息、访问权限等
三、评估进程调度算法性能的标准为什么是等待时间?对于非抢占式调度,抢占式调度对于减少平均等待时间是否有帮助。以SJF为例举例说明,要求:至少有四个进程,每个进程的arrival time和burst time不同
等待时间:从进程到达到进程结束中,进程不在CPU中执行而是在等待其他进程执行的时间的总和
1、因为等待时间关系到系统运行的效率以及用户体验。对于一个进程调度来说,让用户感觉不到进程是在并发执行是最好的,所以平均等待时间越短的进程调度算法是越好的。
2、有帮助
举例:
到达时间:0,2,4,5
区间时间:7,4,1,4
SJF:等待时间4s
SRTF:3s
四、写出非忙等待的wait()和signal()操作的伪代码实现
wait(semaphore *S){
S->value--;
if(S->value<0){
add this process to S->list
block();
}
}
signal(semaphore *S){
S->value++;
if(S->value>=0){
remove a process P from S->list
wakeup(P);
}
}
五、
总结
如果觉得对你有帮助,辛苦友友点个赞哦~
知识来源:操作系统概念(黑宝书)、山东大学高晓程老师PPT及课上讲解、山东大学操作系统往年题、部分考研题。不要私下外传