操作系统精选题(三)(简答题、概念题)

news2025/1/17 0:15:54

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀操作系统

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

前言

简答题

一、对 CPU、内存、外设并发的操作系统有哪些措施?

二、 根据操作系统对资源和进程的管理,写出中断有哪些方面的作用

三、 描述系统调用的工作机制及其参数传递方法。

四、画出进程的状态图,并说明状态变化的原因

五、程序从外存调入内存,在调入、执行、结束过程中发生了什么,又是怎么解决的。

六、用户级线程和内核级线程是什么?相对的各自有什么优点

七、 多队列调度算法和多级反馈队列调度算法的基本思想,比较这两个算法的好坏

八、根据进程的到达和执行时间,画出相应算法的甘特图,并求出平均等待时间​编辑

 九、临界区设计的基本要求;信号量是怎么设计来满足这些要求的?  

 十、写出下面程序的输出结果,并解释这样输出的原因

十一、两个进程 T1 和 T2 并发执行,共享变量 x,初值为 1,T1 使 x+1,T2 使 x-1,过程如下。问两个 进程结束后 x 有多少种可能取值?有哪些方法使结果唯一?选取一种方法修改下面的程序,保证两进程结束后结果唯一

十二、简述阻塞、饥饿、死锁、死循环的区别

十三、CPU 是进程运行必需的资源,为什么进程不会因等待 CPU 而发生死锁?

十四、 简述银行家算法避免死锁的过程(包括变量定义、安全判别算法等)

十五、 简述死锁预防、死锁避免并比较区别。

总结


前言

本系列题目均选自山东大学往年考题,供大家复习参考。一定要在复习完基础知识后(最好把书本都看一遍,这样子知识体系才是完善的),再来参考这个练习题。

两个不可取:一、不可不复习知识点,光做题;二、不可只复习知识点,不复习

猫猫祝大家都能取得好成绩呀~~~

简答题

一、对 CPU、内存、外设并发的操作系统有哪些措施?

进程存在调度算法:FCFS、SJF、LRU、近似LRU等

内存存在管理策略:内存的调度就是两种:一、直接全部调度进来;二、请求调页技术。所以没有什么算法对应。但是内存如何组织管理有许多策略,例如:连续分配;分段;分页

 对CPU并发的措施:(让CPU并发执行多道程序的措施/机制) 

  • 进程调度:CPU通过进程调度算法等实现进程调度机制,从而让CPU能够并发处理多道程序,形成分时系统
  • 进程同步与通信:CPU能够同时并发允许多道程序还依赖于进程同步与通信的机制,通过同步与通信在保证进程运行安全性的前提下又实现了并发运行

对内存并发的措施:(让内存能够同时处理多个进程的内存信息)

  • 虚拟内存技术:通过虚拟内存、请求调页的技术使得内存能够同时给多个进程使用,从而提高内存的并发性
  • 内存管理策略:内存管理策略,包括分页、分段、连续存储等策略保证内存在并发时能够较好的对进程对应的内存进行管理

对外设并发的措施:(让外设I/O等能够并发运行)

  • I/O子系统与缓冲区管理:通过I/O子系统统一对各自外设I/O设备进行管理,实现这些外设能够同时运行,而不会发生冲突。同时存在缓冲区解决了I/O和 CPU运行速度不匹配问题以及安全性问题
  • 中断机制:每当I/O处理结束后,能够向CPU发送中断信号,通过操作系统的控制通知CPU来处理。从而实现外设能够并发运行不会冲突

二、 根据操作系统对资源和进程的管理,写出中断有哪些方面的作用

1、分析中断的作用,首先要知道中断有哪些

2、知道中断的类型后再从资源和进程的角度看每种中断的作用 

中断有两种类型,分别是trap和interrupt,其中trap 又分为主动陷入内核和error被动陷入内核。

主动陷入内核是程序员写的程序选择主动陷入内核,可能是为了查看系统运行的信息从而对软件进行调试等,或者是调用一些系统调用为完成某些功能

error被动陷入内核是软件在运行中由于一些错误主动被陷入内核。这个陷入内核的中断是对计算机的一种保护,防止资源被浪费或恶意进程抢占资源等

interrupt陷入内核是由于外界硬件原因陷入内核,这种中断实现了外设I/O等和CPU的交互,让操作系统能够统一调配CPU的资源

三、 描述系统调用的工作机制及其参数传递方法。

工作机制=工作流程+技术保证

系统调用的工作机制:

  1. 触发系统调用:由应用程序调用系统函数,系统函数是包装好的库函数,就会触发系统调用
  2. 切换到内核模式:系统调用函数通知内核,内核引发中断并从用户态切换到内核态
  3. 找到系统调用函数:内核根据系统调用库函数,通过索引表找到对应的实现函数
  4. 参数传递:通过寄存器、堆栈、组合等方式将应用程序提供的参数传递给系统调用
  5. 执行系统调用:操作系统根据参数执行完系统调用函数,并将结果返回给应用程序
  6. 恢复用户态:最后,操作系统将CPU由内核态转为用户态,执行下一条语句

参数传递方式:

  • 寄存器传递:可以通过各自寄存器来实现参数的传递
  • 堆栈传递:将参数通过程序压入堆栈,操作系统再从堆栈中取出
  • 内存块和表中:应用程序将参数存入内存的块和表中,操作系统通过块的地址来获得参数

传递的参数内存大小由小到大 

四、画出进程的状态图,并说明状态变化的原因

  

五、程序从外存调入内存,在调入、执行、结束过程中发生了什么,又是怎么解决的。

由于是从外存调入内存,所以在调入的过程中,可以不完全调入——存在挂起状态 

因此,比起上一题多了两种状态:就绪挂起阻塞挂起(运行时不可能挂起)

就绪挂起:有三个状态能指向它(新的、运行、阻塞挂起)

  

六、用户级线程和内核级线程是什么?相对的各自有什么优点

用户级线程:完全由用户创建并管理的线程。这种线程的创建、切换、同步、通信等操作都不需要系统调用来实现,仅仅需要用户级线程库。线程管理在用户空间进行,效率较高

内核级线程:完全由内核创建并管理的线程。应用程序不能创建也不能管理这类线程,仅仅能使用该线程的编程接口。对于内核来说是可见的,所以在一个线程被阻塞后,可以立即调用另一个线程继续执行,并发能力强

七、 多队列调度算法和多级反馈队列调度算法的基本思想,比较这两个算法的好坏

多级队列算法:存在多个队列。每个队列的优先级、调度算法不同,进程属于哪一队列是一开始固定的,后面不能更改。优点是低调度开销,缺点是不够灵活。

多级反馈队列算法:在多级队列算法基础上增加了反馈机制,能够通过反馈调整进程属于哪个队列。缺点是调度设计复杂开销大,优点是比较灵活,并且可以避免老化。

一、两者都会在一开始根据进程的属性、特点、类型等来确定该进程属于哪一级队列

二、低优先级队列时间片更长;高优先级队列时间片更短

多队列调度:多级队列调度算法将就绪队列分成多个独立队列,根据进程的属性,如内存大小、 进程优先级、进程类型,一个进程被永久地分配到一个队列。每个队列都有自己的调度算法。 此外,队列之间通常采用固定优先级抢占调度,每个队列与更低队列相比都有绝对的优先级。 或者在队列之间划分时间片。优点是低调度开销,缺点是不够灵活。

 多级反馈队列调度:允许进程在队列之间移动。根据不同 CPU 区间的特点以区分进程。如果进 程使用过多 CPU 时间会被转移到更低优先级队列。在较低优先级队列中等待时间过长的进程会 被转移到更高优先级队列。这种形式的老化可以阻止饥饿。最通用的 CPU 调度算法,可被配置 以适应系统设计,但是最复杂。

八、根据进程的到达和执行时间,画出相应算法的甘特图,并求出平均等待时间

(1)轮转法调度(时间片大小为 2)

(2)高响应比

  

 九、临界区设计的基本要求;信号量是怎么设计来满足这些要求的?  

临界区设计基本要求:

  • 互斥:只要有一个进程在临界区中,其他进程不能进入临界区
  • 进步:如果没有进程在临界区中,则要允许进程进入临界区
  • 有限等待:一个请求加入临界区的进程可以在有限时间内加入临界区

信号量:

  • 信号量设计中,设计互斥信号量初始值为1。当有进程进入临界区时(进入临界区条件是信号量>0),会将信号量减1,后面其他进程无法进入临界区。在该进程退出临界区后会让信号量加1。
  • 如果没有进程在临界区,那么信号量一定为1,此时请求的进程一定能够进入临界区
  • 一旦有进程退出临界区,就会释放临界区资源,此时一定有一个请求进程能够进入临界区,满足有限等待

 十、写出下面程序的输出结果,并解释这样输出的原因

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int a = 0;
int main() {
    pid_t pid = fork();
    if (pid == 0) {
        a = 2;
        printf("child leaving\n");
    } else {
    wait(NULL);
    printf("a=%d\n", a);
    }
    return 0;
}

输出结果:

child leaving

a=0 

程序 fork()了一次,产生一个子进程。父进程和子进程并行运行,直到父进程执行 wait(NULL), 即 wait(0)。wait(0)表示父进程会被阻塞,直到子进程的状态发生变化,即从运行态到终止态, 才会被唤醒。所以先输出子进程运行结果,后输出父进程运行结果。由于子进程执行 a=2 时发 生写时复制,父子进程有独立的数据段,父进程输出 0 不变

十一、两个进程 T1 和 T2 并发执行,共享变量 x,初值为 1,T1 使 x+1,T2 使 x-1,过程如下。问两个 进程结束后 x 有多少种可能取值?有哪些方法使结果唯一?选取一种方法修改下面的程序,保证两进程结束后结果唯一

结果为0,1,2

保证结果唯一就是要让对x这个临界区资源的访问是限制的,不会出现race condition(竞争条件)

方法有:1、信号量;2、test and set;3、compare and swap 

十二、简述阻塞、饥饿、死锁、死循环的区别

阻塞:阻塞是进程的一种状态,是进程在等待某一事件(I/O事件)而暂停运行。进程由运行状态变为阻塞状态,是进程自身的一种主动行为,处于阻塞状态的进程可能发生死锁或饥饿也可能顺利向前

饥饿:饥饿是指一个进程始终得不到资源。饥饿的进程可以是就绪态(始终得不到CPU的调度),也可以是阻塞态(始终得不到I/O设备的响应)。是进程的一种被动发生的行为

死锁:死锁是进程彼此想要对方手中的资源,同时又占有自己手中的资源而导致的进程无法推进。是一种错误分配资源导致的结果

死循环:可能是程序员故意设计的结构,也可能是不小心设计的

区别与联系:

1、饥饿、死锁、死循环都是进程无法顺利向前推进的现象(故意设计的死循环除外)。阻塞可能无法推进也可能可以推进

2、死锁和饥饿问题是由于操作系统分配资源不合理导致的,而死循环是由代码逻辑的错误导致的。阻塞则是某些事件导致的

3、死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题

十三、CPU 是进程运行必需的资源,为什么进程不会因等待 CPU 而发生死锁?

CPU资源是可以被抢占的,因为CPU和内存类似都可以恢复原先的数据、状态等。所以它不满足死锁的非抢占必要条件,因此不会发生死锁

十四、 简述银行家算法避免死锁的过程(包括变量定义、安全判别算法等)

银行家算法包括两个部分:银行家算法本身+安全判别算法 

算法程序=变量定义+初始化+算法流程

安全判别算法:(确定计算机系统是否处于安全状态)(作用于判断一个系统快照是否安全)

  1. 定义finish[n]、need[n]、available[m]分别表示进程是否完成、进程需要的资源数目、目前可用的各资源的资源量。其中n表示进程数,m表示资源类型数目
  2. 初始化:将finish都设置为false,并对need和available进行初始化处理
  3. 寻找是否存在need<=available的进程(即将可用资源分配给该进程,进程可以完成),如果存在则让该进程获得所有资源并运行结束,然后释放资源即allocation(该进程原占有资源)+available。并将其finish设置为true
  4. 判断finish是否都是true,如果是则算法结束找到安全序列,系统是安全状态;如果存在false,则循环第三步。直到finish存在false但是第三步中找不到满足条件的进程,则说明系统不是安全状态

银行家算法:

  1. 定义allocation[n][m],need[n][m],available[m],n为进程数,m为资源类型数
  2. 初始化这三个变量
  3. 如果有进程request资源,先检查这个request是否合理。如果request>need则出错,内核将杀死这个进程,如果request<=need则执行步骤4
  4. 判断request和available大小。如果request>available则无法分配、无视请求;如果request<=available则执行步骤5
  5. 按照需求request假分配,修改当前的need、available、allocation,并运行安全判别算法,如果修改后状态安全,则允许分配,否则不允许分配

十五、 简述死锁预防、死锁避免并比较区别。

死锁预防是一组方法,需要确定至少一个必要条件不成立。

死锁避免要求操作系统事先得到有关进程申请使用资源的额外信息。当进程申请资源时,若发现满足该资源的请求可能导致死锁发生,则拒绝该申请。

比较:两种方法都不允许死锁发生。动态的死锁避免会因为追踪当前资源分配成本增加运行成本,但是相对于静态的死锁预防方法它对资源的限制更少,允许更多的并发使用资源(例如CPU资源用时,I/O资源也在用),所以系统吞吐量大于死锁预防

总结

如果觉得对你有帮助,辛苦友友点个赞哦~

知识来源:操作系统概念(黑宝书)、山东大学高晓程老师PPT及课上讲解、山东大学操作系统往年题、部分考研题。不要私下外传

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

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

相关文章

基于局域网下的服务器连接、文件传输以及内网穿透教程 | 服务器连接ssh | 服务器文件传输scp | 内网穿透frp | 研究生入学必备 | 深度学习必备

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本篇博客分享的是基于局域网下的服务器连接&#x1f517;、文件传输以及内网穿透教程&#xff0c;内容非常完备✨&#xff0c;涵盖了在服务器上做深度学…

ueditor集成秀米编辑器

ueditor集成秀米编辑器 一、背景二、集成秀米编辑器流程2.1、新增秀米插件的按钮&#xff0c;显示在我们的富文本编辑器上2.2、点击该按钮&#xff0c;可以呼出一个iframe&#xff0c;这个iframe引用的是秀米自己的编辑器页面2.3、要是有图片&#xff0c;需要再修改配置哈2.4、…

密码学:对称加密算法、非对称加密算法、哈希算法

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

【Python】利用代理IP爬取当当网数据做数据分析

前言 在数字化浪潮的推动下&#xff0c;电商平台已经彻底改变了我们的购物方式。从简单的在线交易到复杂的用户交互&#xff0c;电商平台积累了海量的用户数据。这些数据&#xff0c;如同隐藏在深海中的宝藏&#xff0c;等待着被发掘和利用。通过分析用户的浏览、搜索、购买等行…

Redis学习——Redisson 分布式锁集成及其简单使用

文章目录 引言1. Redisson概述1.1 Redisson的基本概念1.2 Redisson的主要功能1.3 Redisson的优点 2. 开发环境3. Redisson的安装与配置3.1 添加依赖3.2 配置Redisson 4. 使用Redisson4.1 可重入锁4.1.1 可重入锁的概念4.1.2 可重入锁的实现原理4.1.3 简单使用锁的获取和释放 4.…

数据恢复篇:如何在电脑上恢复已删除和丢失的音乐文件

尽管流媒体网络非常流行&#xff0c;但许多人仍然选择将音乐下载并保存在 PC 本地。这会使文件面临丢失或意外删除的风险。 幸运的是&#xff0c;您可以使用数据恢复软件恢复已删除的音乐和其他文件类型。这篇文章讨论了这些解决方案以及如何使用奇客数据恢复检索丢失的音乐文…

Java面试题--JVM大厂篇之深入了解G1 GC:高并发、响应时间敏感应用的最佳选择

引言&#xff1a; 在现代Java应用的性能优化中&#xff0c;垃圾回收器&#xff08;GC&#xff09;的选择至关重要。对于高并发、响应时间敏感的应用而言&#xff0c;G1 GC&#xff08;Garbage-First Garbage Collector&#xff09;无疑是一个强大的工具。本文将深入探讨G1 GC适…

抗腐蚀耐腐蚀不锈钢304/316L航空插头插座

不锈钢航空插头是一种专为航空航天、军事、工业等领域设计的连接器&#xff0c;具有高强度、耐腐蚀、耐高温等特点。它们通常用于在高振动、高湿度、高温度等恶劣环境下保持稳定的电气连接。不锈钢航空插头的设计充分考虑了这些极端条件&#xff0c;以确保信号和电源传输的可靠…

机器学习环境搭建

前言 个人笔记&#xff0c;记录框架和小问题&#xff0c;没有太详细记载。。 1、Anaconda安装 下载地址&#xff1a; Free Download | Anaconda &#xff08;慢&#xff09; ​ 国内镜像&#xff1a;https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…

(PC+WAP)高端大气的装修装潢公司网站模板

(PCWAP)高端大气的装修装潢公司网站模板PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修公司网站、装潢公司网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;(PCWAP)&#xff0c;同一个后台&#xff0c;数据即…

【数据结构(邓俊辉)学习笔记】二叉搜索树04——AVL树

文章目录 1.重平衡1.1 AVL BBST1.2 平衡因子1.3 适度平衡1.4 接口1.5 失衡 复衡 2. 插入2.1 单旋2.2 双旋2.3 实现 3. 删除3.1 单旋3.2 双旋3.3 实现 4. &#xff08;3 4&#xff09;-重构4.1 "34"重构4.2 "34"实现4.3 rotateAt4.4 综合评价 1.重平衡 1…

SSZipArchive 解压后 中文文件名乱码问题

不知道什么情况&#xff0c;做为一个三方广泛使用的框架库&#xff0c;会出现这种比较低级的问题&#xff01; 还有中文的文件名解压后显示乱码&#xff01; 经过深入研究排查&#xff0c;发现目录或文件名编码错误&#xff01;但是POD库&#xff0c;不可能直接在里面改&#…

在线疫苗预约小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;工作人员管理&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;疫苗管理&#xff0c;论坛管理&#xff0c;公告管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;疫苗&…

SpringBoot + mkcert ,解决本地及局域网(内网)HTTPS访问

本文主要解决访问SpringBoot开发的Web程序,本地及内网系统,需要HTTPS证书的问题。 我测试的版本是,其他版本不确定是否也正常,测试过没问题的小伙伴,可以在评论区将测试过的版本号留下,方便他人参考: <spring-boot.version>2.3.12.RELEASE</spring-boot.vers…

redis-cluster(集群模式搭建)

redis中间件版本: redis-5.0.5环境介绍 这里使用服务器数量3&#xff0c;分别为172.0.0.1&#xff0c;172.0.0.2&#xff0c;172.0.0.3&#xff0c;每台机器redis节点数量2个&#xff0c;共6个redis节点构成redis-cluster模式。编译安装包 在172.0.0.1的机器上进入安装目录 cd …

【6.26更新】Win10 22H2 19045.4598镜像:免费下载!

当前微软已经发布了六月最新的KB5039299更新补丁&#xff0c;用户完成升级后&#xff0c;系统版本号将更新至19045.4598。此次更新解决了任务栏上应用跳转列表失败、可能导致系统无法从休眠状态恢复等多个问题&#xff0c;推荐大家升级。如果您不知道去哪里才能下载到该版本&am…

【JavaEE】JVM

文章目录 一、JVM 简介二、JVM 运行流程三、JVM 运行时数据区1、堆&#xff08;线程共享&#xff09;2、Java虚拟机栈&#xff08;线程私有&#xff09;3、本地方法栈&#xff08;线程私有&#xff09;4、程序计数器&#xff08;线程私有&#xff09;5、方法区&#xff08;线程…

002-关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra&#xff1f; 因为和MatLab的科学计算相比&#xff0c;GeoGebra重点突出教学展示&#xff0c;对于教师、学生人群来讲再合适不过了&#xff0c;尤其是可以融入到PPT里边呈现交互式动画&#xff0c;想想听众的表情&#xff01;这不就弥补了看到PPT播放数学公…

WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

文章目录 XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS XSS跨站-输入输出-原理&分类&闭合 漏洞原理&#xff1a;接受输入数据&#xff0c;输出显示数据后解析执行 基础类型&#xff1a;反射(非持续…

2010-2022年 政府透明度指数报告整理

政府透明度指数报告是衡量政府透明度的重要工具&#xff0c;它由独立的评估机构或研究机构发布&#xff0c;用以反映政府在不同方面的表现。以下是对政府透明度指数报告的详细介绍&#xff1a; 数据简介 定义&#xff1a;政府透明度指数报告衡量的是政府在信息公开、政策制定…