计算机操作系统面试考点归纳

从第一次接触计算机操作系统到现在也已经有两个月时间了。不停的忘也在不停的理解记忆。这次花了两天时间二刷王道考研的计算机操作系统课程,并结合讲义内容自己做了相关考点的归纳总结,一轮下来总体感觉在整个知识点框架的搭建上有了更加清晰的认识。现将归纳的知识点分享记录如下:

41个问题,一万一千多字,不涉及文件、磁盘管理和I/O管理:

1、 什么是操作系统
操作系统首先是一种系统软件,是计算机软件和硬件资源的管理者,为上层应用或用户提供简单易用的服务。操作系统作为资源的管理者主要有:文件管理,内存管理,处理机管理和设备管理四大功能。

2、 操作系统的四大特征
并发:计算机中同时存在若干个运行的程序(注意和并行的区别);
共享:系统中的资源可以被若干个并发的程序同时访问或使用;
虚拟:一个物理上的实体,变成多个逻辑上的对应物。主要分为两个方面:空分复用技术(虚拟存储器)和时分复用技术(虚拟处理器);
异步:指多道程序在并发情况下,以不可知的速度向前推进。

3、 中断的类型和作用
内中断:处理机内部所引发的,与当前指向的指令有关。可细分为三种:陷入(是应用程序故意引发的,返回时执行下一条命令);故障(是由错误条件引起的,可以由操作系统进行修复。例如缺页中断,在等待内存I/O操作的时间很长,因此进程会进入阻塞态,当页调入内存之后,进行就绪态,重新执行引发故障的指令);终止(由致命错误引起,内核无法修复,例如整数除以0,该中断发生时,无法返回再次运行,只能退出程序)。
外中断:与当前执行的指令无关,来源于CPU的外部。主要有两种:时钟中断和I/O设备中断。

4、 用户态如何转换到内核态,内核态如何转换到用户态
内核态到用户态:执行一条特权指令,修改PSW的标志位为“用户态”;
用户态到内核态:由中断或系统调用引发,主要分为三种。系统调用:主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。外部设备中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

5、 什么是系统调用,有什么作用及注意事项
操作系统作为用户和计算机硬件之间的接口,负责向上提供一种简单易用的服务。主要包含命令接口和程序接口。程序接口是由一组系统调用组成。因此可以理解为系统调用是一种可以供应用程序调用的库函数,应用程序可以通过系统调用请求获得操作系统内核的服务。(库函数和系统调用的区别是有些库函数是系统调用的进一步封装会调用系统调用,如创建一个文件夹;而有些库函数不涉及到系统调用,不需要进入到内核态)。
系统调用是请求操作系统的服务,而操作系统是资源的管理者,因此凡是与共享资源有关的操作(设备管理,文件管理,内存管理,进程管理,进程通信),都必须通过系统调用向操作系统内核提出服务请求。由操作系统代为完成,可以保证系统资源的稳定性与安全性。
陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态;发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。

6、 进程的概念,组成和特征
程序是一个静态的过程,是一系列的指令集合。进程是动态的是程序的一次执行过程,同一程序多次执行会对应多个进程。
一个进程由:PCB(Process Control Block,进程控制块),程序段和数据段三部分组成。
PCB中包含有进程描述信息(PID(进程ID)和UID(用户ID)用于确定唯一的进程;资源分配信息(使用的文件,内存区域和I/O设备);进程控制和管理信息(进程当前状态,CPU,磁盘使用情况);以及处理机相关信息(各种寄存器的值,实现进程切换))。PCB是进程存在的唯一标志。

7、 进程的特性
动态性:进程是程序的一次执行过程,是动态的产生、变化和消亡的;
独立性:是能够独立运行,获得资源的基本单位;
异步性:各个进程各自独立的以不可预知的速度向前推进;
并发性:内存中有多个进程实体,各个进程可以并发的执行(同步机制解决异步);
结构性:每个进程都有一个PCB,结构上由PCB,程序段和数据段组成的。

8、 进程的组织方式
进程的组织就是研究内存中的多个进程应该以什么样的方式进行统一的分类管理。有两种主要方式:链接方式,依据进程的状态将PCB分成多个队列,操作系统持有指向各个队列的指针。索引方式,依据进程的状态建立几张索引表,操作系统持有指向各个索引的指针。

9、 进程的状态分类与转换
创建态:将作业从外存调入到内存中并且创建PCB分配程序段和数据段的过程;
就绪态:内存中的进程已经得到了所有其运行所需要的资源,只差处理机;
运行态:在处理机(CPU)中运行的进程;
阻塞态:由于缺少某个资源或者等待某个事件的发生;
终止态:进程运行结束或者遇到了不可修复的错误,系统撤销PCB回收资源;
就绪态到运行态:由于进程被调度;
运行态到就绪态:时间片结束或者高优先级进程抢占处理机;
运行态到阻塞态:是一种进程自身的主动行为,由程序调用系统调用,请求某个资源或者等待某个事件的发生;
阻塞态到就绪态:不是进程自身能控制的是一种被动行为。申请的资源已经分配或者等待的时间发生。

10、 进程的控制及实现方式
进程的控制主要是研究进程的创建撤销及状态之间的相互装换;
进程控制由原语来实现,原语是一种特殊的程序,他的执行具有原子性,也就是这段程序必须一气呵成不可中断。如果不一气呵成就会导致关键信息不统一;
原语的实现由两个特权指令完成:开中断和关中断。CPU在执行完每一条程序时都会查询是否有中断事件发生。如果有,则转去执行相关的中断处理程序,并执行关中断指令,在此期间不会再去检查是否有中断发生。直到执行开中断指令之后,才会恢复检查。

11、 进程控制相关的原语
进程的创建,进程的终止,进程的阻塞,进程的唤醒和进程的切换;
不论是哪一种原语,主要做以下的三件事:
更新PCB信息:
修改进程状态标志位;
剥夺CPU使用权时必须保存当前环境到PCB;
进程运行时,恢复之前运行环境;
将PCB插入合适的队列,等待调度;
分配与回收资源;

12、 进程间有哪些通信方式
进程是资源的分配最小单位,具有独立性。为保护进程的运行安全,不同进程之间是不能直接访问其他进程的存储区域的。为保证进程间信息的交换,操作系统提供了以下几种进程的通信方式:
共享存储:操作系统在内存中开辟一个共享存储区,可由不同的进程互斥的进行访问(PV操作)。
管道通信:在内存中开辟一个固定大小的缓冲区。是一种半双工的通信方式,在某一个时间段只能往一个方向的通信。如果要实现全双工,则需要再设置一个管道。其有几个特点,只有当写满才能读,读完才能写。被读入的信息会被扔掉,因此只会有一个进程获得该信息。
消息传递(消息队列):以格式化的消息为单位通过操作系统提供的“发送消息和接受消息”两个原语进行数据的交换。“格式化的消息”类似于网络中的报文由消息头和消息体组成。消息的传递有两种方式:直接通信方式和间接通信方式。直接通信方式是指将消息直接挂到接收进程的消息缓存队列上。间接方式是会先发送到一个中间存储体中,类似于计网中的邮件系统。
信号量:用于实现进程间的互斥与同步。(后续问题会详细介绍)

13、 线程和进程的区别
进程是资源分配的最小单位,而线程是调度的基本单位,一个进程可以拥有多个线程;
资源的分配、调度:进程是资源分配的最小单位,线程是调度的基本单位;
并发性:各个线程之间也能够并发执行,进一步的提高了系统的并发性;
系统开销:进程间的切换需要保存/更新运行环境,切换内存段,更新块表和缓冲区等操作。并且要从用户态切换到核心态,由操作系统协助实现。而同一进程的线程之间的切换在用户态下就可以完成,并且只需要更新和保存少量的寄存器;
通信方面:进程之间由于相互独立,因此需要通过操作系统的协助实现进程间的信息共享。而同一进程的线程之间只需要通过共享存储区就可以实现信息的共享。

14、 线程的实现方式与多线程模型
用户级线程:由应用程序通过线程库来实现,线程的切换只用在用户态下就可以完成,无需操作系统的干预。用户看来具有多个线程,而操作系统看来只有一个线程;
内核级线程:内核级线程的管理工作由操作系统内核完成。 线程调度、切换等工作都由内核负责,因此 内核级线程的切换必然需要在核心态下才能 完成。
内核级线程才是处理机分配的基本单位;
多线程的模型主要有以下三种:多对一(一个线程阻塞,会导致所有的线程阻塞,并发度小),一对一(可以在多核处理机并发执行,并发度高,线程管理切换开销大)和多对多(集合上述两个优点);

15、 处理机调度的三个层次以及七状态模型
处理机调度就是通过一定的算法选择一个进程在处理机上运行,实现进程的并发执行。
高级调度(作业调度):从外存的后备队列中按照一定的原则,选择一个或多个作业调入内存并创建新的进程(建立)PCB的过程。
中级调度:引入虚拟内存之后,将暂时不适用的进程从内存中调到外存中,以此来提高内存的利用率和系统的吞吐量。调到外存等待的进程称为挂起态。进程的PCB会常驻内存,保存一些状态信息并放在挂起队列中。中级调度就是研究将哪个挂起队列中的进程重新调回内存。
低级调度:从就绪队列中,选择一个进程分配给处理机运行。内存到CPU;
上述三种状态的发生频率从低到高;
中级调度的引入导致了“阻塞挂起”和“就绪挂起”两个状态的引入,由之前的5状态模型转换到了七状态。

16、 什么时候能进行进程的切换,什么时候不能切换
需要进行进程切换主要分为两种:一种是主动的放弃处理机(进程正常的运行终止;运行过程中发生异常终止;进程主动请求阻塞,例如等待I/O);另外一种是被动的放弃处理机(时间片用完;有更高优先级的进程需要进行处理;外部中断,如I/O中断)
不能进行进程切换主要有以下几种情况:在处理中断的过程中;进程在操作系统内核程序临界区中;在原子操作过程中(原语);
注意两个概念:
临界资源:一个时刻只能允许一个进程使用的资源,各个进程要互斥的访问进程;
临界区:访问临界资源的那一段代码;
内核程序临界区:主要用来访问内核数据机构的,例如进程的就绪状态。

17、 进程的调度方式与其切换的过程
进程的调度方式主要分为两大类:非抢占式(只能由当前进程主动释放处理机)和抢占式(可由操作系统剥夺当前进程的CPU使用权)
进程的切换主要完成了,两件事:
对原进程的各种数据的保存和对将运行的进程的各种数据的恢复(程序计数器,程序控制字,各种寄存器等信息,都存在于PCB中)

18、 调度算法的评价指标
CPU利用率, 系统吞吐量, 周转时间, 等待时间, 响应时间
CPU利用率 = CPU忙碌时间/CPU总的运行时间;
系统吞吐量 = 总共完成的作业数/完成作业总的时间;
周转时间 = 作业完成的时间 – 作业提交的时间;
平均周转时间 = 所有作业周转时间和/作业数;
带权周转时间 = 周转时间/作业实际运行时间(总是大于等于1的,越小越好);
平均带权周转时间 = 作业带权周转时间的平均值;
等待时间 = 等待被服务的时间和;
响应时间 = 作业被提交到首次响应的时间;

19、 作业/进程调度算法
先来先服务(FCFS):按照作业/进程的先后顺序进行服务。非抢占式的算法,优点是实现简单,公平。缺点是对短作业不利,对长作业有利。不会产生饥饿。
短作业优先(SJF, SPF):这里的短指进程运行时间短。当一个进程运行完毕时,选择此时在就绪队列中的进程最短的运行时间进行调度。非抢占式的算法,优点是较优的平均等待时间与平均周转时间。缺点是对短作业有利对长作业不利,有可能产生饥饿甚至饿死。此外要实现知道每个作业和进程的运行时间;
最短剩余时间优先(SRTN):是短作业优先的抢占式版本。
高响应比优先(HRRN):响应比 = (等待时间 + 需要服务时间)/ 需要服务时间。非抢占式的,充分结合了FCFS和SJF的优点,既考虑了等待时间,又考虑了运行时间。不会导致饥饿。
上述的几种调度算法只考虑了一些评价指标最优,没有考虑进程的优先级问题,只适用于早期的批处理系统。对于交互式系统有如下方法:
时间片轮转:公平的为每一个进程分配一定的运行时间。一个进程的时间片用完就会被放到就绪队列末尾。是一种抢占式的调度方式,由系统的计时器发出计时器中断,强行剥夺进程的CPU使用权限。优点是公平,相应时间快。缺点是不区分进程的紧急程度。不会导致饥饿。适合分时操作系统。
优先级队列:根据进程的优先级进行调度,有抢占式的和非抢占式的两种方式。对于非抢占式的在当前进程运行完主动放弃处理机时,选择就绪队列中的优先级最高的进程进行调度。对于抢占式的还需要判断在新进程到来时,是否发生抢占。优点是区分进程的紧急程度,适用于实时操作系统。缺点是会导致饥饿。
多级反馈队列:设置多级就绪队列,优先级从高到底,时间片从小到大。是一种抢占式的调度算法。优点:快速响应;短进程很快完成;不必事先估计进程的运行时间;会导致饥饿。

20、 什么是进程同步,为什么需要进程同步
由于进程能够并发的执行,其执行的过程具有异步性。各个进程之间以不可预知的速度向前推进。然而,在某些时候,需要一个进程在另一个进程执行完毕之后执行,因此就需要保持一定的顺序关系,这就是进程的同步。例如在管道通信中,只要当管道写满之后,进程才能够读取。也只有当管道读空之后,进程才允许写入。这个之间的关系,就是通过进程的同步实现的。

21、 什么是进程互斥,为什么需要进程互斥
由于操作系统并发和共享是互为存在关系的。在并发执行进程的时候,不可避免的会涉及到一些设备或者存储区的共享问题。
共享主要分为两种方式:一种是互斥共享(系统中的某些资源虽然可以给多个进程共享,但是同一时间段只能允许一个进程进行访问,例如摄像头,打印机等);另外一种是同时共享(系统中的某个资源,在一段时间内允许多个进程对他同时进行访问,例如扬声器)。
把一段时间只能允许一个进程访问的资源叫做临界资源。对临界资源的访问必须互斥的进行。进程互斥就是指,当进程访问某一个临界资源时,另一个想访问该临界资源的进程必须等待。只有当当前的进程结束访问,释放该资源后,另一进程才能够进行访问。

22、 对临界资源的访问逻辑上分为哪些部分
进入区:负责检查是否有其他进程正在访问临界资源,如果没有则对临界资源上锁,防止其他资源的访问;
临界区:访问临界资源的那一段代码;
退出区:对临界资源进行解锁;
剩余区:做其他的事情

23、 临界区的互斥访问需要遵循哪些原则
空闲让进:当临界区资源没有被其他进程访问时,允许当前进程立刻进入临界区;
忙着等待:当发现临界区资源正在被访问时,其他试图访问的进程必须等待;
有限等待:对请求访问并处于等待的进程,应该在有限时间内能够进入临界区,防止饥饿产生;
让权等待:当进程不能进入临界区时,应立即释放当前处理机,进入阻塞态,防止出现忙等。

24、 进程互斥有哪些软件的实现方法
单标志法:用一个标志位存储当前运行访问临界资源的进程号,当访问结束时,将标志位改为另外一个临界资源。也就是说一个进程的访问权限只能够被另外一个进程赋予,并且按照一定的交替顺序依次访问,当其中的一个进程不再访问临界区时,另一个资源也就一直无法访问临界区。违背了空闲让进的原则;
双标志先检查法:用一个数组记录各个进程想进入临界区的意愿。当另外一个进程的标志位为false。当前进程就可以将自身标志位置为true,开始访问临界区。当访问完毕将自身的标志位置为false。缺陷是,检查和上锁不是一气呵成的,如果两个进程的检查过程先后挨着执行,那么两个进程都会进入临界区,违背了忙着等待的条件。
双标志后检查法:针对上述问题,因此想到先上锁再检查。缺陷是当两个上锁的过程紧接着执行时,两个进程都无法进入临界区,造成死锁,违背了空闲让进和有限等待的原则。
Peterson(皮特森算法):谦让算法,用一个数组表示当前想进入临界区的意愿。并且用一个标志位记录能够进入临界区的进程号。一个进程当将想进入临界区意愿置为true后,会将标志位修改为对方进程的进程号。未遵循让权等待的原则。

25、 有哪些进程互斥的硬件实现方法
中断屏蔽方法:在访问临界区之前进行关中断,不允许进程切换,临界区访问完毕再开中断。优点是简单高效。缺点是中断屏蔽只适用于内核进程在内核态进行,不能随意供用户态程序调用。
TestAndSetLock(TSL):执行过程不允许中断,只能一气呵成。优点实现简单,不用考虑软件的逻辑关系。缺点是不满足让权等待会出现忙等。
Swap指令:同上。

26、 什么是信号量机制,有哪些类别
在为了实现进程的互斥访问中,介绍了几种软件实现方式和硬件实现方式。统一的缺点就是都不满足让权等待原则。为了实现进程的互斥,会让想访问临界资源的另外一个进程在其时间片范围内一直在执行循环语句,降低了并发性和系统的吞吐量。因此引入了信号量机制。
信号量就是一个变量用来表示系统中某种资源的数量。通过系统提供的一对原语对信号量进行操作。Wait(s)原语和Signal(s)原语,也可以简称为P(s), P(v)操作。
整型信号量机制:用一个整数型的变量作为信号量,表示资源的数量。进行P操作时,会检查资源是否足够,不满足则循环等待,满足则信号量减一。进行V操作时,信号量加一。相较于之前的软硬件实现方式,该方式将检查和上锁一气呵成,避免了逻辑上的问题。缺点是也不满足让权等待原则会出现忙等。
记录型信号量机制:用记录型数据结构表示的信号量。结构中包含有剩余资源数和等待队列。执行P操作时,资源数减一,然后判断剩余资源数是否小于0,满足则将当前进程挂到(block)等待队列中。执行V操作时,资源数加一,然后判断剩余资源数是否小于等于0,满足则从队列中选择一个唤醒(wakeup)(阻塞态变为就绪态)。可以实现进程的同步和互斥。

27、 什么是死锁以及死锁产生的条件
死锁是各个进程都在等待其他进程保持的部分资源导致所有进程都处于阻塞态无法向前推进的状态。
互斥条件:进程对资源的访问必须是互斥的进行的;
不可剥夺条件:进程在获得的资源在未使用完之前不能够被其他进程抢占,只能主动的释放;
请求和保持和:进程已经保持了至少一个资源,而又要请求其他资源,该资源又被其他进程所占有。此时进程被阻塞,而又不释放自己已有的资源;
循环等待条件:存在一种进程资源的循环等待链。链中每个进程所获得的资源又被下一个进程所请求。
对不可剥夺资源的不合理分配,可能导致死锁。

28、 死锁如何预防
核心是破坏产生死锁的四个条件
破坏互斥条件:将临界资源改造成可共享的资源(SPOOLing),缺点:可行性不高,很多时候无法破坏互斥条件。
破坏不可剥夺条件:分为主动(当请求资源得不到满足,就释放所有已有的资源),和被动(由操作系统协助剥夺,设置进程优先级),缺点实现复杂。被剥夺的进程前部分工作失效。频繁的执行会导致系统开销变大,可能导致饥饿。
破坏保持和请求和条件:静态分配法,在运行前事先分配好进程需要的全部资源,之后一直保持。资源利用率低,可能导致饥饿。
破坏循环等待条件:为资源进行编号,必须按照从小到大顺序申请资源。缺点,不方便添加新的资源,会导致资源浪费,用户编程麻烦。

29、 死锁的避免
银行家算法:当进程提出资源申请时,先预判该申请会不会导致系统进入不安全的状态。如果没有找到一个安全序列进入不安全状态,则不进行分配,让该进程继续处于阻塞等待状态。

30、 死锁的解除
用资源分配图检测死锁。
资源剥夺法。挂起(暂时放到外存上)某些死锁进程,抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿;
撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。
进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

196、内存的一些基本概念
内存可存放数据。程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾。
内存中的每个存储单元都有唯一地址,可按照字节编址或者字编址。例如4GB内存,有4 x 2^30 B,需要32位二进制数表示地址。
逻辑地址到物理地址的转换(这个过程称为地址重定位)
三种装入的方式:绝对装入(编译时产生绝对地址);可重定位装入(装入时将逻辑地址转化为物理地址);动态运行时装入(运行时将逻辑地址转化为物理地址,需要设置重定位寄存器)。

31、 内存空间扩充有哪些方法
覆盖技术:对于早期的操作系统,将内存空间分为固定区和覆盖区。程序员依据程序逻辑将程序段划分为多个段(模块/子函数)。常用的段常驻内存,不常用的段在需要时再调入内存。缺点是对用户不透明,增加编程的负担。
交换技术:在前面提到的中级调度过程中,将部分进程从内存调到外存,再从外存调入内存的过程就是交换的基本思想。那应该在什么位置保存换出的进程(硬盘分为对换区和文件区,文件区离散存储,对换区连续存储,提高效率。因此存放在对换区);什么时候需要进行交换(当多个进程都在运行,频繁出现缺页现象时就应该换出内存,缺页缓解时再换入内存);应该换出哪些进程(优先换出在阻塞状态的,其次是低优先级的)。
虚拟存储技术:后面再详细介绍。

32、 内存的分配方式(连续分配管理方式)
研究内存该以什么样的方式分配给各个进程,以及如何回收。
总体上分为两种方式:连续分配和离散分配。值的说明的是这里的连续和离散是指对于单个的进程是否会被拆分到不同的非连续的内存空间。
连续分配方式有以下三种:
单一连续分配:只支持单道批处理系统,在内存中最多只会有一个进程。
固定分区分配方式:有两种一种是固定大小,一种是不固定大小。思想就是将内存分割成一个个相等或者大小不等的内存区。将进程完整的存放在一个大小合适的内存区。会产生内部碎片,没有外部碎片。
动态连续分配方式:在进程装入内存时,动态的为进程分配其大小的内存。这种方式需要用空闲分区表或者空闲分区链(内存块号,内存大小,起始地址,状态信息)存储空闲的内存区。选择哪一个内存区进行装入有不同的算法,下一题会详细描述。不会产生内部碎片,但是有外部碎片。对于外部碎片可以用“紧凑”技术进行解决。
以上的三种连续分配方式内存利用率相对较低,且对于大型的进程来说,没办法满足一次性装入连续内存的要求。因此有了非连续的(离散)分配方式:页式存储或段式存储或段页式存储。在下面问题中会详细介绍。

33、 动态分区分配算法
在“内存的分配方式”中描述了动态连续分配方式,这题解决,如何选择空闲区;
首次适应:空闲分区表/链安装地址递增的顺序进行排列。每次从低地址向高地址寻找第一个能满足需求大小的空间。
最佳适应:将空闲分区表/链按照内存大小从小到大排列,选择第一个能够满足大小的分区。缺点是不断小化分区,最后可能导致低地址区出现很多无法利用的外部碎片;
最坏适应:将空闲分区表/链按照内存大小从大到小排列,选择第一个能够满足大小的分区。缺点是会快速使用完大分区,留下小分区。当有大进程到来时,没有大分区可供分配;
邻近适应算法:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

34、 内存的分配方式(非连续分配管理方式)
不同于上述描述的连续分配管理方式,非连续的是将每个进程切分成若干个页面进行存储。主要有三种方式:
基本分页存储管理:把进程分页,各个页面可以离散的分配到各个内存块中。需要用页表记录每个页面对应的实际物理块号。逻辑地址可以拆分为【页号和页内偏移量】两部分。
页号 = 逻辑地址/页面大小;
页内偏移量 = 逻辑地址%页面大小;
物理地址 = 页面始址 + 页内偏移量;
基本分段存储方式:进程的地址空间,按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,可以理解为子函数(在低级语言中,程序员使用段名来编程),每段从0开始编址。需要段表记录每个段的信息,段表(段号,段长和段地址三部分)。逻辑地址可以分为【段号和段内地址】两部分。
物理地址 = 段基址 + 段内地址;
段页式存储方式:先将进程按照自身的逻辑关系分成多个逻辑块,再对每个逻辑块使用页式存储方式。结合了前两种的优势;

35、 基本分页存储管理和基本分段存储方式和段页式存储方式对比
页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管 理上的需要,完全是系统行为,对用户是不可见的。
段是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。
分段比分页更容易实现信息的共享和保护。
分页(单级页表):第一次访存——查内存中的页表,第二次访存——访问目标内存单元。总共两次访存;
分段:第一次访存——查内存中的段表,第二次访存——访问目标内存单元。总共两次访存;
段页式:第一次——查询段表,第二次——查询页表,第三次——访问目标内存单元。总共三次访存。

36、 什么是快表机制,有什么作用
快表,又称联想寄存器(TLB,translation lookaside buffer),是一种访问速度比内存快很多的高速缓存(TLB不是内存!),用来存放近访问的页表项的副本,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表。
快表机构的采用主要是应用了局部性原理:
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环);
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)
引入块表之后,能够加快内存的查询速度,使上述的三种非连续的存储管理方式,在命中情况下只用访问一次内存。

37、 什么是两级页表,为什么引入两级页表,及特点
单页表存在以下两个问题:
页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框;
没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
将页表再分页,要能根据逻辑地址位数、页面大小、页表项大小确定 多级页表的逻辑地址结构。
多级页表中,各级页表的大小不能超过一个页面;
多级页表的访存次数(没有块表机制)——N级页表需要N+1次访存。

38、 什么是虚拟内存技术
在上面的问题中,总结了内存的扩充机制有交换技术和覆盖技术。这两种方式都能够在逻辑上对内存进行扩充。此外,传统的内存分配机制有以下缺点:
一次性:作业必须一次性全部装入内存后才能开始运行。这会造成两个问题:①作业很大时,不能全 部装入内存,导致大作业无法运行;②当大量作业要求运行时,由于内存无法容纳所有作业,因此只 有少量作业能运行,导致多道程序并发度下降。
驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段 内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的 数据,浪费了宝贵的内存资源。
因此利用在快表机制中已经提到的局部性原理(时间局部性和空间局部性)和高速缓存机制(将近期频繁访问的数据放到更高速的存储器,用不到的放在更低速的存储器),解决内存不够的问题:可以将程序中很快 会用到的部分装入内存,暂时用不到的部分留在外存;信息不在内存时,由操作系统负责将所需信息从外存调入内存;若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。这就是虚拟内存技术。

39、 虚拟内存技术的特点
多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。 对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
虚拟性:从逻辑扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。

40、 虚拟内存的分配存储管理方式
在操作系统提供的请求调页和页面置换的基础上,有三种管理方式:请求分页存储管理;请求分段存储管理和请求段页式存储管理。
请求分页存储管理与基本分页存储管理的主要区别:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,操作系统负责将内存中暂时用不到的信息换出到外存。
与基本分页存储管理页表不同,请求分页增加了四个字段(状态位;访问字段;修改位和外存地址)
缺页中断机构:在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。
如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。

41、 有哪些页面置换算法
最佳置换算法:每次淘汰的页面是今后永不使用或者是在最长时间内不再被访问的页面,可以保障最低的缺页率。缺点是:无法预知页面访问的序列,因此最佳置换算法是没办法实现的。
先进先出置换算法:每次淘汰的页面是最先进入的页面;(Belady异常:当为进程分配的物理块号增加时,缺页次数不减反增的异常现象)
最近最久未使用置换算法:每次淘汰的页面是最近最久未使用的页面。利用访问字段记录上次被访问以来所经历的时间。
时钟置换算法和改进型时钟置换算法;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值