考研复试——操作系统

news2024/9/20 7:47:06

文章目录

    • 操作系统
      • 1. 操作系统的特征:
      • 2. 进程与线程的关系以及区别
      • 3. 简述进程和程序的区别
      • 4. 进程的常见状态?以及各种状态之间的转换条件?
      • 5. 进程的调度算法有哪些?
      • 6. 什么是死锁?产生条件?如何避免死锁?
      • 7. 进程间通信有哪些方式?它们的区别?
      • 8. 同步与异步是什么?有什么区别?
      • 9. 并发与并行的区别?
      • 10. 中断与异常的区别?
      • 11. 中断的处理过程是怎样的?
      • 12. 将用户源程序变为可在内存中执行的程序的步骤?
      • 13. 程序有哪几种装入方式?又有哪几种链接方式?
      • 14. 虚拟存储器的主要特征是什么?
      • 15. 缺页中断的处理过程与一般中断相似。
      • 16. 什么是 DMA 方式?它与中断方式的主要区别是什么?
      • 17. 试比较分页与分段有何区别?
      • 18. 在交互式系统中,非剥夺是不是一个好的策略?为什么?
      • 19. 解释一下管程

操作系统

1. 操作系统的特征:

并发、共享、虚拟、异步。

区别进程的特征:动态性、并发性、独立性、异步性。

2. 进程与线程的关系以及区别

  • 定义

    • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
    • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
  • 关系:一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

  • 区别

    1、进程(Process)是系统进行资源分配和调度的基本单位,线程(Thread)是CPU调度和分派的基本单位;

    2、线程依赖于进程而存在,一个进程至少有一个线程;

    3、进程有自己的独立地址空间,线程共享所属进程的地址空间;

    4、进程是拥有系统资源的一个独立单位,而线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),和其他线程共享本进程的相关资源如内存、I/O、cpu等;

    5、在进程切换时,涉及到整个当前进程CPU环境的保存、环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销远大于线程切换的开销;

    6、线程之间的通信更方便,同一进程下的线程共享全局变量等数据,而进程之间的通信需要以进程间通信(IPC)的方式进行;

    7、多线程程序只要有一个线程崩溃,整个程序就崩溃了,但多进程程序中一个进程崩溃并不会对其它进程造成影响,因为进程有自己的独立地址空间,因此多进程更加健壮

在这里插入图片描述

  • 总结:简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  • 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

3. 简述进程和程序的区别

  • 进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念。进程的运行实体是程序,离开程序的进程没有存在的意义。从静态的角度看,进程是由程序、数据和进程控制块(PCB)三部分组成的。而程序是一组有序的指令集,是一种静态的概念。

  • 进程是程序的一次执行过程,它是动态地创建和消亡的,具有一定的生命周期,是暂时存在的;而程序则是一组代码的集合,是永久存在的,可长期保存。

  • 一个进程可以执行一个或几个程序,一个程序也可构成多个进程。进程可以创建进程,而程序不可能形成新的程序。

  • 进程与程序的组成不同。进程的组成包括程序、数据、PCB。

4. 进程的常见状态?以及各种状态之间的转换条件?

在这里插入图片描述

  • 创建态:进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:

    • 首先申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息。
    • 然后为该进程分配运行时所必须的资源。
    • 最后把进程转入就绪态并插入就绪队列
    • 但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
  • 就绪态:进程获得了处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统处于中处于就绪态的进程可能有多个,通常将它们排成一个队列,称为就绪队列

  • 运行态:进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处于运行态。

  • 阻塞态:进程正在等待某一事件而暂停运行,如果等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。系统通常将处于阻塞态的进程也排成一个队列,设置根据阻塞原因的不同,设置多个阻塞队列。

  • 就绪态->运行态:处于就绪态的进程被调度后,获得处理机资源(分配处理机时间片)。

  • 运行态->就绪态:处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行。

  • 运行态->阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行态转换为阻塞态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核的过程的形式。

  • 阻塞态->就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应的状态由阻塞态转化为就绪态。

5. 进程的调度算法有哪些?

1、先来先服务(FCFS):此算法的原则是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序选择作业(或进程)

2、短作业优先(SJF:Shortest Process First):这种算法主要用于作业调度,它从作业后备序列中挑选所需运行时间最短的作业进入主存运行。

3、时间片轮转调度算法:当某个进程执行的时间片用完时,调度程序便终止该进程的执行,并将它送到就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证队列中的所有进程,在已给定的时间内,均能获得一时间片处理机执行时间。

4、高响应比优先:按照高响应比(已等待时间+要求运行时间)/要求运行时间 优先的原则,在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP。选择最大的作业投入运行。

5、优先权调度算法:按照进程的优先权大小来调度。使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。

6、多级队列调度算法:多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个队列,所有的作业(进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。

6. 什么是死锁?产生条件?如何避免死锁?

在这里插入图片描述

  • 死锁的概念:在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是2个或多个进程被无限期地阻塞、相互等待的一种状态。

  • 死锁产生的原因:系统资源不足,进程推进顺序非法。

  • 死锁产生的必要条件

    • 互斥条件
    • 不剥夺条件
    • 请求并保持条件
    • 循环等待条件
  • 死锁的解除和预防:理解了死锁的原因,以及产生死锁的四个必要条件,就可以最大可能地避免和预防和解锁死锁。所以在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。对资源的分配要给予合理规划。

  • 处理死锁的基本方法:

    预防死锁:设置某些限制,破坏产生死锁的四个必要条件中的一个或几个

    避免死锁(银行家算法):该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用 某种方法去防止系统进入不安全状态,从而避免发生死锁。

    死锁的检测及解除:无须采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时地检测出死锁的发生,然后采取某些措施解除死锁。

7. 进程间通信有哪些方式?它们的区别?

进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方式主要有以下三类:

  1. 共享存储

在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的写读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式的共享则是基于存储区的共享。

  1. 消息传递

在消息传递系统中,进程间的数据交换以格式化的信息(Message)为单位。进程通过系统提供的发送消息和接受消息两个原语进行数据交换。又分直接通信方式、间接通信方式。

  1. 管道通信

管道通信是一种半双工通信,某一时刻只能单向传输

  • 几种方式的比较:
    • 管道:速度慢、容量有限
    • 消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
    • 信号量:不能传递复杂信息,只能用来同步。
    • 共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全。

8. 同步与异步是什么?有什么区别?

  • 同步

    • 同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
    • 特点:同步是阻塞模式;同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行;
  • 异步

  • 异步的定义:是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

  • 特点:异步是非阻塞模式,无需等待;异步是彼此独立,在等待某事件的过程中,继续做自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式。

  • 同步与异步的优缺点:同步可以避免出现死锁,读脏数据的发生。一般共享某一资源的时候,如果每个人都有修改权限,同时修改一个文件,有可能使一个读取另一个人已经删除了内容,就会出错,同步就不会出错。但,同步需要等待资源访问结束,浪费时间,效率低。异步可以提高效率,但,安全性较低。

  • 同步机制的4个准则

1、空闲让进:当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区

2、忙则等待:当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待

3、有限等待:对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区

4、让权等待:当进程不能进入自己的临界区,应释放处理机

9. 并发与并行的区别?

  • 并发:是指两个或多个事件在同一时间间隔内发生。
  • 并行:是指系统具有同时进行运算或操作的特征,在同一时刻内能完成两种或两种以上的工作。

10. 中断与异常的区别?

  • 中断:也成外中断,是指来自CPU执行指令外部的时间,通常用于信息输入/输出,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。
  • 异常:也成内中断,是指来自CPU执行指令内部的事件,如程序的非法操作码地址越界运算溢出虚存系统的缺页陷入指令引起的事件。异常不能被屏蔽,一旦出现,就应立即处理。

在这里插入图片描述

11. 中断的处理过程是怎样的?

在这里插入图片描述

12. 将用户源程序变为可在内存中执行的程序的步骤?

  • 编译。由编译程序将用户源代码编译成若干目标模块。
  • 链接。由链接程序将编译后形成的一组目标模块及它们所需要的库函数连接在一起,形成一个完整的装入模块。
  • 装入。由装入程序将装入模块装入内存中运行。

在这里插入图片描述

13. 程序有哪几种装入方式?又有哪几种链接方式?

  • 链接方式:静态链接装入时动态链接运行时动态链接
  • 装入方式:绝对装入静态重定位动态重定位

14. 虚拟存储器的主要特征是什么?

  • 多次性:作业无须一次调入,允许分多次调入内存;

  • 对换性:作业在运行过程中无须常驻内存,可以根据需要进行换入换出;

  • 虚拟性:从逻辑上扩充内存容量。

15. 缺页中断的处理过程与一般中断相似。

主要区别:

1、在指令执行期间产生和处理中断信号。

2、一条指令在执行期间可能产生多次缺页中断

16. 什么是 DMA 方式?它与中断方式的主要区别是什么?

DMA方式是指内存与外设只需要在DMA控制器的控制下进行数据传输,而不需要进行CPU的干预。

与中断方式的主要区别是:

1、中断方式在每个数据需要传输时都需要中断CPU,而DMA方式是在所要求传送的一批数据全部传送完毕时才中断CPU;

2、中断方式中数据传输是在中断处理时由CPU控制完成的,而DMA方式中数据传输是在DMA控制器控制下完成的。

17. 试比较分页与分段有何区别?

1、是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页的目的是满足系统管理的需要。是信息的逻辑单位,分段的目的是为了更好地实现地址共享,满足用户地需要。

2、地大小固定,将逻辑地址划分为页号和页内地址是由机器硬件实现地。而段的长度确不固定,决定于用户所编写地程序。

3、分页的地址空间是一维的,分段的地址空间是二维的。

18. 在交互式系统中,非剥夺是不是一个好的策略?为什么?

在分时系统中不剥夺并不是一个好的策略。因为在分时系统中,除了交互性以外,及时性是很重要的性能因素。当一个作业被阻塞后,CPU就完全空闲了,别的用户的及时性就无法保证了,而完全可以把这些时间分配给别的作业运行。以提高整体的吞吐量。

19. 解释一下管程

管程是由一组局部变量、对局部变量进行操作的一组过程和对局部变量进行初始化的语句序列组成。

引入的原因是因为P/V操作太过分散,对它的维护很麻烦且容易造成死锁。

管程的特点是:

1、管程的过程只能访问管程的局部变量,管程的局部变量只能由其过程来访问;

2、任何时刻只能有一个进程进入管程执行

3、进程只能通过管程提供的过程入口进入管程。

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

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

相关文章

【强化学习】强化学习数学基础:随机近似理论与随机梯度下降

强化学习数学基础:随机近似理论与随机梯度下降Stochastic Approximation and Stochastic Gradient Descent举个例子Robbins-Monro algorithm算法描述举个例子收敛性分析将RM算法用于mean estimationStochastic gradient descent算法描述示例和应用收敛性分析收敛模式…

Rainbond V5.12 版本发布,支持平台级插件和能力扩展

在这个版本中,我们主要支持了平台级的插件和能力扩展。希望能通过外部插件扩展平台能力,实现微内核的效果;同时以后将会继续精简安装,能让用户按需扩展平台功能。在 Kubernetes 兼容性这方面,我们也通过平台级的能力将…

详解JAVA类加载

目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类…

2023/3/6 VUE - 组件传值【通信】方式

1 父亲传子代传值【子代使用父代的数据】 1.1 props传值 父亲给儿子传值: 爷爷给孙子传值: 这个props传值的方式,只能一代一代的往下传,不能跨代传值。 有一个问题:子组件不能修改父组件的值: 1.2 …

MyBatis学习笔记(十) —— 动态SQL

10、动态SQL MyBatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串的痛点问题。 动态SQL: 1、if 标签:通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到sql中…

RTOS中相对延时和绝对延时的区别

相信许多朋友都有过这么一个需求:固定一个时间(周期)去处理某一件事情。 比如:固定间隔10ms去采集传感器的数据,然后通过一种算法计算出一个结果,最后通过指令发送出去。 你会通过什么方式解决呢&#xf…

Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案

前言在日常的项目中,缓存的使用场景是比较多的。缓存是分布式系统中的重要组件,主要解决在高并发、大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问。本文以Redis作为缓存时,针对常见的缓存击穿、缓存穿透…

Java中 new Integer 与 Integer.valueOf 的区别

引入:new Integer(18) 与 Integer.valueOf(18) 有区别吗?有的话,有什么区别? 我们都知道,使用 new 关键字的时候,每次都会新创建一个对象。但是,Integer.valueOf() 会新创建一个对象吗&#xf…

Linux环境下实现并详细分析c/cpp线程池(附源码)

一、线程池原理 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 线程池是一种多线程处理形式,处理过程中将任务添加到…

Unity Animator.Play(stateName, layer, normalizedTime) 播放动画函数用法

原理 接口: public void Play(string stateName, int layer -1, float normalizedTime float.NegativeInfinity);参数含义stateName动画状态机的某个状态名字layer第几层的动画状态机,-1 表示播放第一个状态或者第一个哈希到的状态normalizedTime从s…

spring security 实现自定义认证和登录(4):使用token进行验证

前面我们实现了给客户端下发token,虽然客户端拿到了token,但我们还没处理客户端下一次携带token请求时如何验证,我们想要实现拿得到token之后,只需要验证token,不需要用户再携带用户名和密码了。 1. 禁用 UsernamePass…

崭新的centos虚拟机不能上网

原因 先说点简单的: 没启用虚拟机容器的网络选项虚拟机的网卡没启用手动设置了网关、掩码、dns等没设置对DHCP没开 做法 没启用虚拟机容器的网络选项 在virtualbox里面,开启虚拟机后右下角有个网络选项这里亮着就说明开了,没亮就右键打开…

BufferQueue研究

我们在工作的过程中,肯定听过分析卡顿或者冻屏问题的时候,定位到APP卡在dequeueBuffer方法里面,或者也听身边的同事老说3Buffer等信息。所以3Buffer是什么鬼?什么是BufferQueue?搞Android,你一定知道Graphic Buffer和…

理解js的精度问题

参考博客:js精度丢失问题-看这篇文章就够了(通俗易懂)、探寻 JavaScript 精度问题以及解决方案、JavaScript 浮点数陷阱及解法 1 为什么 JavaScript 中所有数字包括整数和小数都只有一种类型 即 Number类型,它的实现遵循 IEEE 754 标准。 符号位S&#…

MySQL运维篇之Mycat分片规则

3.5.3、Mycat分片规则 3.5.3.1、范围分片 根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。 示例: 可以通过修改autopartition-long.txt自定义分片范围。 注意: 范围分片针对于数字类型的字段,…

Kubernetes Pod 水平自动伸缩(HPA)

Pod 自动扩缩容 之前提到过通过手工执行kubectl scale命令和在Dashboard上操作可以实现Pod的扩缩容,但是这样毕竟需要每次去手工操作一次,而且指不定什么时候业务请求量就很大了,所以如果不能做到自动化的去扩缩容的话,这也是一个…

IO文件操作

认识文件 狭义的文件 存储在硬盘上的数据,以“文件"为单位,进行组织 常见的就是普通的文件 (文本文件,图片, office系列,视频,音频可执行程序…)文件夹也叫做"目录" 也是一种特殊的文件。 广义的文件 操作系统,是要负责管理软硬件资源,操作系统(…

更高效的跨端开发选择:基于小程序容器的Flutter应用开发

为什么说Flutter是一个强大的跨端框架? Flutter是一个基于Dart编程语言的移动应用程序开发框架,由Google开发。它的强大之处在于它可以快速构建高性能、美观、灵活的跨平台应用程序,适用于Android、iOS、Web、Windows、macOS和Linux等多个平…

Git图解-常用命令操作

目录 一、前言 二、初始化仓库 三、添加文件 四、Git 流程全景图 五、Git工作流程 六、工作区和暂存区 七、查看文件状态 八、查看提交日志 九、查看差异 十、版本回退 十一、管理修改 十二、修改撤销 十三、删除文件 十四、分支管理 十五、项目分支操作 十六、…

Centos7使用OVS桥的方式创建KVM虚拟机

一、OVS使用 1、OVS编译安装 下载ovs2.17版本源码 http://www.openvswitch.org//download/ ./boot.sh ./configure make && make install2、启动OVS服务 (1)创建文件/etc/systemd/system/openvswitch.service [rootlocalhost qemu]# syste…