题目来源:”西工大计算机“公众号,答案为手工核对整理
第一章 操作系统概论
1. 什么是操作系统(简称OS)?
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
2. 操作系统的主要功能?
进程管理(处理机管理)、存储管理、设备管理、文件管理、用户接口。
3. 常见的操作系统有哪些?
Windows操作系统、类UNIX操作系统(如Mac OS)、基于linux的操作系统(如各大linux发行版、安卓等)
4. 操作系统有哪些分类?
批处理操作系统、分时操作系统、实时操作系统、网络操作系统、个人计算机操作系统。
5. 操作系统的作用有哪些?
(直接看定义)控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境。
6. 什么是用户态和核心态?用户态和核心态是如何切换的?
用户态(目态)和核心态(管态)是操作系统运行时的两种权限状态,当用户空间的程序向操作系统请求需要更高权限运行的服务时,发生系统调用,此时它通过中断向核心态发出明确的请求。系统调用实现了用户态进程与硬件设备之间的大部分接口。
7. 什么是内核?
内核是操作系统最基本的部分。它包含了操作系统最基础的功能(如进程管理、存储管理等)。操作系统按内核分类划分为微内核(更具灵活性)和宏内核(功能更多)操作系统。
8. 什么是进程?进程和线程有什么区别?
进程是进程实体的运行过程,是资源分配、调度运行的基本单位。
一个进程可以包含多个线程,线程是进程中执行运算的最小单位,执行处理机调度的基本单位。
进程与线程的区别:
- 进程是CPU资源分配的最小单位,线程是CPU调度的最小单位
- 进程之间的切换开销比较大,但是线程之间的切换开销比较小。
- CPU会把资源分配给进程,但是线程几乎不拥有任何的系统资源。因为线程之间是共享同一个进程的,所以线程之间的通信几乎不需要系统的干扰。
- 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径,一个线程崩溃,整个进程也会崩溃。所以进程的安全性会高于线程。
9. 多线程有什么好处?
可以更细粒度地进行处理机管理,可以把进程中耗时长的任务交给新线程处理,从而避免进程发生阻塞。
10. 什么是中断?什么是系统调用?
中断:当某一事件发生时(如I/O设备发出信号,或正在运行的程序发生内中断),向CPU发送中断指令,CPU应停下当前的事情,去处理该事件。
系统调用:运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。它通过中断向内核态发出一个明确的请求。系统调用实现了用户态进程和硬件设备之间的大部分接口。
第二章 进程管理
1. 一个程序从开始运行到结束有哪几个过程?
- 预处理:.i文件。在预编译的过程中,主要处理源代码中的预处理指令,引入头文件,去除注释,处理所有的条件编译指令,宏的替换,添加行号,保留所有的编译器指令。当进行预编译以后的文件中将不再存在宏,所有的宏都已经被替代。
- 编译:.s文件。在预处理结束后,进行的是编译。编译过程所进行的是对预处理后的文件进行语法分析,词法分析,语义分析,符号汇总,然后生成汇编代码。
- 汇编:.o文件。汇编过程将汇编代码转成二进制文件,二进制文件就可以让机器来读取。每一条汇编语句都会产生一句机器语言。这个阶段会形成符号表,并给这些符号分配虚拟地址。
- 链接:链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。
2. 什么是并行?什么是并发?
并行是指多个进程或线程在客观时间上同时执行,并发是指多个程序在一段时间内同时执行。
并行是真同时,并发是宏观上的同时。
3. 进程与程序的区别?
程序是静态的,进程是动态的,程序是存储在某种介质上的二进制代码,进程对应了程序的执行过程,系统不需要为一个不执行的程序创建进程,一旦进程被创建,就处于不断变化的动态过程中,对应了一个不断变化的上下文环境。 程序是永久的,进程是暂时存在的。
4. 多线程有哪些好处?
- 多线程技术可以使程序的响应速度更快。
- 可以把占据长时间的程序中的任务放到后台去处理,同时执行其他操作,提高效率。
5. 什么是临界区?
每个进程中访问临界资源的那段程序称为临界区,临界资源是指多个进程间会发生争用的资源。
6. 进程的五状态模型?
7. 进程调度算法有哪些?
先来先服务(FCFS)调度算法 :
在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。
短作业优先(SJF)调度算法:
短作业优先(SJF)调度算法从后备队列中选择一个或若干估计运行时间最短的作业,将它们调入内存运行;短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。
优先级调度算法:
优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
高响应比优先调度算法:
高响应比优先调度算法主要用于作业调度,是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。
时间片轮转调度算法:
系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行,即先来先服务的原则,但仅能运行一个时间片。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
多级反馈队列调度算法:
- 设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
- 赋予各个队列中进程执行时间片的大小各不相同。在优先级越高的队列中,每个进程的运行时间片越小。
- 一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;若它在一个时间片结束时尚未完成,调度程序便将该进程转入第⒉级队列的末尾,再同样按FCFS 原则等待调度执行;若它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第n级队列后,在第n级队列中便采用时间片轮转的方式运行。
- 4)仅当第1级队列为空时,调度程序才调度第⒉级队列中的进程运行;仅当第1~(i-1)级队列均为空时,才会调度第i级队列中的进程运行。若处理机正在执行第i级队列中的某进程,这时又有新进程进入优先级较高的队列[第1~(i-1)中的任何一个队列],则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回第i级队列的末尾,把处理机分配给新到的更高优先级的进程。
8. 非抢占式调度和抢占式调度的区别?
抢占式调度:当一个被阻塞的高优先级进程重新恢复就绪状态时,操作系统可以直接剥夺当前进程的处理机,转交给新进程。
非抢占式调度:当一个进程进入运行状态时,就不能被剥夺处理机,直到它用完自己的分配时间。
9. 优先级反转是什么?如何解决?
在该种状态下,一个高优先级任务间接被一个低优先级任务所抢先,使得两个任务的相对优先级被倒置。
这往往出现在一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务;同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源。这种情况下,该次高优先级任务获得执行权。
解决方法:低优先级的进程获得互斥锁前,需要先将自己的优先级临时提高,最后处理完后再退回原优先级,这样就可以避免被次高优先级的进程抢先。
10. 进程间通信的方式有几种?
共享存储:在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如Р操作、V操作),对共享空间的写/读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式的共享则是基于存储区的共享。操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
消息传递: 在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接收消息两个原语进行数据交换。
管道通信: 所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名 pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程)则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
11. 什么是死锁?产生死锁的原因有哪些?
进程间争用资源时,不正确的进程推进顺序导致两个或以上的进程都在等待其他进程释放关键资源,但没有一方释放资源,导致进程全部进入阻塞状态。
产生的原因:1.竞争资源、2. 进程间推进顺序非法。
12. 死锁的必要条件和解决方法。
死锁的条件:
互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
不剥夺条件:进程所获得的资源在未使用完之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。
请求并保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。即存在一个处于等待态的进程集合{P,P2…,P.}),其中P;等待的资源被P;(i=0,1,… , n-1)占有,P,等待的资源被P占有。
检测死锁:
在资源分配图中,找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中己有的空闲资源数量,若所有连接该进程的边均满足上述条件,则这个进程能继续运行直至完成,然后释放它所占有的所有资源。消去它所有的请求边和分配边,使之成为孤立的结点。
该状态的资源分配图是不可完全简化的,该条件为死锁定理。
死锁解除的主要方法有:
1)资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源而处于资源匮乏的状态。
2)撤销进程法。强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。
3)进程回退法。让一(或多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点。
第三章 内存管理
1. 为什么要采用多级存储器?
这是存储元件成本和计算速度之间的一种权衡。
2. 为什么要使用虚拟内存?
基于局部性原理,在程序装入时,将程序的一部分装入内存,而将其余部分留在外存,就可启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。
虚拟内存可以使得计算机系统中以更小的运行内存同时运行更多的进程,从而节省元件成本。
3. 什么是逻辑地址和物理地址?
逻辑地址是从程序的角度由CPU生成的,而物理地址是内存单元中存在的位置。 逻辑地址空间是CPU为程序生成的所有逻辑地址的集合,而映射到相应逻辑地址的所有物理地址的集合称为物理地址空间。 逻辑地址物理上不存在于内存中,而物理地址是内存中可以物理访问的位置。
4. 分页和分段的区别?
分页是把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射。
分段使程序和数据可以被划分为逻辑上独立的地址空间(能够反映程序的逻辑结构),有助于共享和保护。
分页对程序员是透明的,分段则需要程序员手动划分。
5. 什么是颠簸(抖动)?
指频繁的页调度行为,指在分页系统中,某些页在进程运行过程中频繁地发生缺页中断,导致系统性能下降。抖动发生的原因是:1. 不良的页面置换算法;2. 当前进程的驻留集<工作集。
6. 常见的页面置换算法有哪些?
最佳置换算法(OPT):选择的被淘汰页面是以后永不使用的页面,或是在最长时间内不再被访问的页面,以便保证获得最低的缺页率。然而,由于人们目前无法预知进程在内存下的若干页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。
先进先出置换算法(FIFO):优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。
最近最久未使用算法(缓存页面置换算法)(LRU):选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。
时钟置换算法:简单的CLOCK算法给每帧关联一个附加位,称为使用位。当某页首次装入主存时,将该帧的使用位设置为1;当该页随后再被访问到时,其使用位也被置为1。对于页替换算法,用于替换的候选帧集合可视为一个循环缓冲区,并有一个指针与之相关联。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;若在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;若所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并停留在最初的位置上,替换该帧中的页。由于该算法循环检查各页面的情况,因此称CLOCK算法,又称最近未用(Not RecentlyUsed,NRU)算法。
7. 什么是地址重定位?
将逻辑地址转化为物理地址的过程。
(1)静态重定位
静态重定位是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的内存地址。静态重定位的时机是在程序装入时一次完成,在程序运行期间不再进行重定位。
(2)动态重定位
动态重定位是在程序执行期间,每次访问内存之前进行重定位。动态重定位靠硬件地址转换机构实现。
8. 内碎片和外碎片是什么?
内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。
外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。
9. 快表和多级页表解决了什么问题?
TLB:页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令、数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令、数据。为了减少因为MMU导致的处理器性能下降,引入了TLB,TLB是Translation Lookaside Buffer的简称,可翻译为“地址转换后援缓冲器”,也可简称为“快表”。
简单地说,TLB就是页表的Cache,其中存储了当前最可能被访问到的页表项,其内容是部分页表项的一个副本。只有在TLB无法完成地址翻译任务时,才会到内存中查询页表,这样就减少了页表查询导致的处理器性能下降。
多级页表解决了单级页表过大导致占用存储空间过多的问题。为了实现随机访问,页表必须在内存中连续存储,单级页表会占用大量连续空间。而多级页表将单级页表拆开,从而降低了空间占用,同时使得页表可以离散存储。
10. 什么是程序的局部性原理?
是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。
时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。
11. 虚拟内存的实现方式有哪些?
请求分页存储管理:在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。
请求分段存储管理:使用较少,在基本分段系统基础上,增加了请求调段和段置换功能。
请求段页式存储管理:类似于请求分页,还是以页为单位进行调换。
第四章 设备管理
1. 叙述一下中断处理的过程?
还是书上的截图最好用:
2. 什么是设备驱动程序?
驱动程序是一个软件,它允许操作系统和设备进行通信。 例如,当应用需要从设备读取数据时,它会调用操作系统实现的函数。然后,操作系统调用驱动程序实现的函数。
3. 什么是DMA?
在中断驱动方式中,I/O设备与内存之间的数据交换必须要经过CPU中的寄存器,所以速度还是受限,而DMA(直接存储器存取)方式的基本思想是在IO设备和内存之间开辟直接的数据交换通路,彻底“解放”CPU。DMA方式的特点如下:
- 基本单位是数据块。
- 所传送的数据,是从设备直接送入内存的,或者相反。
- 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。
4. 设备分配算法有哪些?
(1) 先来先服务
当多个进程对同一设备提出I/0请求时,该算法根据进程提出请求的先后次序,排成一个设备请求队列,总是将设备分配给队首进程。
(2)优先级高者优先
在这种算法中,总是优先权高的进程优先获得资源。对于优先权相同的进程,按照先来先服务的原则排队。
5. 什么是SPOOLing技术?
当系统中引入了多道程序技术后,可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速I/0设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。
能够缓和CPU和外设的速度,提高IO速度,将独占设备转化为共享设备,并实现虚拟设备功能。
2.SPOOLing系统的组成
(1)输入井、输出井
这是在磁盘上开辟的两大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/0设备输入的数据:输出井是模拟脱机输出时的磁盘设备,用于暂存用户程序的输出数据。
(2) 输入缓冲区、输出缓冲区
为缓和CPU与磁盘之间速度不匹配的矛盾,在内存中开辟输入缓冲区、输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以
后再传送到输入井;输出缓冲区用于暂存由输出井送来的数据,以后再传送到输出设备。
(3)输入进程、输出进程
两个进程用于模拟脱机I0时的外围控制机。输入进程用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备、通过输入缓冲区、再送到输入井,当CPU需要数据时,直接从输入井读入内存;输出进程用于模拟脱机输出时的外围控制机,将用户要求输出的数据,先从内存送到输出井,待输出设备空闲时,再将输出井中的数据,通过输出缓冲区、送到输出设备。
第五章 文件系统
1. 磁盘调度算法有哪些?
先来先服务算法(FCFS):FCFS 算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,
最短寻道时间优先算法(SSTF):SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但能提供比FCFS算法有更好的性能
扫描算法(SCAN):SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,由于磁头移动规律与电梯运行相似,因此又称电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此它在访问局部性方面不如FCFS 算法和SSTF算法好。
循环扫描算法(C-SCAN):在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题
2. 文件的基本操作有哪些?
1.创建文件:
1.分配外存空间,创建目录项
2.删除文件:
1.回收外存空间,删除目录项
3.打开文件:
1.将目录项中的信息复制到内存中的打开文件表中,并将打开文件表的索引号返回给用户
2.打开文件之后,对文件的操作不再需要每次都查询目录,可以根据内存中的打开件表进行操作
3.每个进程有自己的打开文件表,系统中也有一张总的打开文件表
4.进程打开文件表中特有的属性:读写指针、访问权限(只读?只写?)
5.系统打开文件表中特有的属性:打开计数器(有多少个进程打开了该文件)
4.关闭文件:
1.将进程打开文件表中的相应表项删除
2.系统打开文件表的打开计数器减1,若打开计数器为0,则删除系统的表项
5.读文件:
根据读指针、读入数据量、内存位置 将文件数据从外存读入内存
6.写文件:
根据写指针、写出数据量、内存位置 将文件数据从内存写出外存