操作系统精选题(二)(综合模拟题一)

news2024/10/7 16:20:04

🌈 个人主页:十二月的猫-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的意思

额外的资源消耗和开销

举例:

  1. 上下文切换。OS从一个进程切换到另一个进程需要保存上一个进程的现场例如数据、状态等,同时要加载下一个进程的各自状态信息。保存、加载这些信息对任务的处理本身没有意义,是额外的一种资源消耗
  2. 索引分配和链式分配。索引分配需要维护一个索引块,让索引块中有指针指向磁盘的各个部分从而实现进程对磁盘的访问,这个索引表就是一个额外资源开销。链式分配中每个数据块都要包含一个指针指向下一个数据块,这个指针就是一个额外的资源消耗和开销

论述题

一、在进程的内存分配和文件存储中,会产生碎片,碎片分为哪几种,在内存分配和文件存储中会产生什么碎片

文件存储是外存,外存中的分配是一块一块为单位进行的;进程是内存,内存中的分配是一个一个单元进行的

在内存分配和文件存储中都会产生内部碎片外部碎片

内存分配的内部碎片:内存管理系统将内存分配给进程,分配的内存大小固定,而进程实际需要的内存大小小于分配的内存,未使用的部分就是内碎片。

内存分配的外部碎片:随着进程的加载和卸载,内存中会留下许多小的空闲块。这些空闲块太小无法满足新的进程需求,构成外部碎片。

文件存储中的内部碎片:如果文件系统以固定数量、大小的块来存储文件,而文件的大小小于块的内存综合大小,空闲块就是内部碎片

文件存储的外部碎片,随着文件的增添和删除,原空间终会留下空闲段,而这些空闲段无法被文件所使用,从而构成外部碎片

二、对于以下几个方面,操作系统有什么保护措施:

区分用户程序和系统程序的执行:

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及课上讲解、山东大学操作系统往年题、部分考研题。不要私下外传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link&#xff1a;link code&#xff1a;code ARC是一个改进的backbone&#xff0c;相比于ResNet&#xff0c;最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数&#xff0c;其中旋转角度由路由函数以数据相关的方式预测。此外&#xff0c;还采…

【Unity】Timeline的倒播和修改速度(无需协程)

unity timeline倒播 一、核心&#xff1a; 通过playableDirector.playableGraph.GetRootPlayable(i).SetSpeed(speed)接口&#xff0c;设置PlayableDirector的速度。 二、playableGraph报空 若playableDirector不勾选Play On Awake&#xff0c;则默认没有PlayableGraph&…

Redis基础教程(三):redis命令

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

oj E : 投资项目的方案

Description 有n种基础的投资项目&#xff0c;每一种的单位收益率为profitn&#xff0c;存在m种投资组合&#xff0c;限制每一种的投资总额不能超过invest_summ 每种投资组合中项目所需的单位投入是不同的&#xff0c;为costmn 求&#xff1a;使得收益率之和最高的每种项目投…

Meven

目录 1.简介2.Maven项目目录结构2.1 约定目录结构的意义2.2 约定大于配置 3. POM.XML介绍3.2 依赖引用3.3 属性管理 4 Maven生命周期4.1 经常遇到的生命周期4.1 全部生命周期 5.依赖范围&#xff08;Scope&#xff09;6. 依赖传递6.1 依赖冲突6.2 解决依赖冲突6.2.1 最近依赖者…

1、线性回归模型

1、主要解决问题类型 1.1 预测分析(Prediction) 线性回归可以用来预测一个变量(通常称为因变量或响应变量)的值,基于一个或多个输入变量(自变量或预测变量)。例如,根据房屋的面积、位置等因素预测房价。 1.2 异常检测(Outlier Detection) 线性回归可以帮助识别数…

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定…

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 &#xff08;1&#xff09;common.h &#xff08;2&#xff09;disp_manager.h 2.Framebuffer编程 &#x…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子

grpc学习golang版( 一、基本概念与安装 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、基本介绍1.1 什么是rpc1.2 什么是grpc1.3 grpc的作用1.4 grp…

Django之邮箱注册

目录 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 二、封装工具类 三、发送邮件接口开发 四、用户调用发送邮件接口 4.1、Fetch API 4.1.1、GET请求 4.1.2、POST请求 五、完成注册功能 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 创建项目 django-a…

4 快速傅里叶变换(fast Fourier transform,FFT)

目录 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 抽样算法 DFT与FFT运算次数公式 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 1…

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

C# Benchmark

创建控制台项目&#xff08;或修改现有项目的Main方法代码&#xff09;&#xff0c;Nget导入Benchmark0.13.12&#xff0c;创建测试类&#xff1a; public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…

互联网算法备案 | 填报指南

一、填报入口 登陆互联网信息服务算法备案系统&#xff08;以下简称备案系统&#xff09;进行填报&#xff0c;网址为https://beian.cac.gov.cn。系统首页如图1所示。 图1备案系统首页&#xff08;示意图&#xff09; 二、填报流程 填报人员需首先注册并登陆备案系统&#x…

Hugging Face发布重量级版本:Transformer 4.4.2

Hugging Face 宣布发布Transformer 4.4.2&#xff0c;该版本为流行的机器学习库带来了许多新功能和增强功能。此版本引入了几个高级模型&#xff0c;支持新工具和检索增强生成 &#xff08;RAG&#xff09;&#xff0c;提供 GGUF 微调&#xff0c;并整合了量化的 KV 缓存&#…

机械设计简单介绍

机械设计简单介绍 1 介绍1.1 概述1.2 机械机构设计基本步骤1.3 关键1.3.1 静力学1.3.2 动力学1.3.3 运动学1.3.4 刚度学 1.4 示例【机械臂】 2 资料2.1 知识体系2.2 博客类汇总2.3 免费CAD模型获取2.4 3D打印2.5 SolidWorks 3 具备能力3.1 熟练翻阅 机械设计手册3.2 知道 N 家常…

BeautifulSoup 类通过查找方法选取节点

BeautifulSoup 类提供了一些基于 HTML 或 XML 节点树选取节点的方法&#xff0c;其中比较主流 的两个方法是 find() 方法和 find_all() 方法。 find() 方法用于查找符合条件的第一个节点&#xff1b; find_all() 方法用于查找所有符合条件的节点&#xff0c;并以列表的…

代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 思路&#xff1a;最简单的递归就不说了。使用动态规划的话&#xff0c;状态转移方程 dp[i] dp[i - 1] dp[i - 2] 题解&#xff1a; public int fib(int n) {…