操作系统错题本
王道考研-2024-操作系统考研复习指导
第一章 计算机系统概述
p005-1.1.4
- 源程序是一种计算机代码,是用程序设计语言编写的程序,经编译或解释后可形成具有一定功能的可执行文件,是直接面向程序员用户的,而不是操作系统的管理内容。
- 操作系统管理文件,是指操作系统关心计算机中的文件的逻辑结构、物理结构、文件内部结构、多文件之间如何组织的问题,而不是关心文件的具体内容。
- 操作系统主要向用户提供命令接口和程序接口(系统调用),此外还提供图形接口;当然图形接口其实是调用了系统调用而实现的功能。
- 程序接口由一组系统调用(也称广义指令)组成。
- 操作系统为编程人员提供的接口是程序接口,即系统调用。作用是请求系统服务
- 操作系统不允许用户直接操作硬件资源,用户只能通过系统调用的方式来请求内核为其服务,间接地使用各种资源。
- 引入多道程序设计后,程序的执行就失去了封闭性和顺序性。程序执行因为共享资源及相互协同的原因产生了竞争,相互制约。考虑到竞争的公平性,程序的执行是断续的。顺序性是单道程序设计的基本特征。
- 处理机与设备,设备与设备,处理机与通道,由于是独立的,故即便在单处理机系统中也能并行。
- 对于多道程序系统来说,支持虚拟存储管理并非必要,即便不支持,也可以将进程全部读入主存,让多道程序并发执行。
- 进程数越多并不代表CPU利用率越高,进程数量越多,进程之间的资源竞争越强烈,甚至可能因为资源竞争而出现死锁现象,导致CPU利用率低。
- 库函数与系统调用的区别和联系:库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中,而且许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的转换 (由用户态转向核心态)。
p011-1.2.7
操作系统的基本类型主要有批处理操作系统、分时操作系统和实时操作系统。(基本类型)
实时操作系统必须在被控制对象规定时间内处理来自外部的事件。
实时系统必须能足够及时地处理某些紧急的外部事件,因此普遍用高优先级,并用”可抢占“来确保实时处理。故进程调度采用抢占式的优先级高者优先的算法。
采用优先级+非抢占式调度算法,既可让重要的作业/进程通过高优先级尽快获得系统响应又可保证次要的作业/进程在非抢占式调度下不会迟迟得不到系统响应,这样有利于改善系统的响应时间。相反,加大时间片会延迟系统响应时间。
分时系统追求的目标是:比较快速响应用户。
分时系统种,时间片一定时,用户数越多,响应时间越长。
多任务操作系统在同一时间内运行多个应用程序,因此有并发和并行的特点。
批处理操作系统、分时操作系统和实时操作系统的特点:
- 批处理操作系统的用户脱机使用计算机,作业是成批处理的,系统内多道程序并发执行,交互能力差。
- 分时操作系统可让多个用户同时使用计算机,人机交互性较强,具有每个用户独立使用计算机的独占性,系统响应及时。
- 实时操作系统能对控制对象做出及时反应,可靠性高,响应及时,但资源利用率低
甘特图画法示例:


p018-1.3.4
- 通用操作系统使用时间片轮转调度算法,用户运行程序并不需要预先预订运行时间。
- 编译器是操作系统的上层软件,不是操作系统需要提供的功能。
- 操作系统是计算机资源的管理者,管理计算机系统资源是操作系统关心的主要问题。
- 系统调用需要触发陷入(trap)指令。
- 程序设计无法形成硬件中断,如可屏蔽中断。
- 中断是操作系统必须提供的功能,因为计算机的各种错误都需要中断处理,核心态与用户态切换也需要中断处理。
- 操作系统不允许用户直接执行某些“危险性高”的指令,因此用户态运行这些指令的结果会转成操作系统的核心态去运行。这个过程就是访管中断。
- 中断处理流程的前三个步骤是由硬件直接实现(隐指令)的。地址映射中需要基地址(或页表)寄存器和地址加法器的支持。而在时钟管理中,需要硬件计数器保持时钟的运行。进程调度由调度算法决定 CPU使用权,由操作系统实现,不需要硬件的支持。
- 当中断或异常发生时,通过硬件实现将运行在用户态的 CPU 立即转入核心态。中断发生时若被中断的是用户程序,则系统将从目态转入管态,在管态下进行中断的处理;若被中断的是低级中断,则仍然保持在管态,而用户程序只能在目态下运行,因此进入中断处理的程序只能是OS 程序。中断程序本身可能是用户程序,但是进入中断的处理程序一定是 OS 程序。
- 计算机通过硬件中断机制完成由用户态到核心态的转换。注意:中断处理程序是在核心态下执行的一些列用于处理中断的程序,不要误选。
- 大多数计算机操作系统的内核包括四个方面的内容,即时钟管理、中断机制、原语和系统控制的数据结构及处理,其中第 4 部分实际上是系统调用类的指令(广义指令)。
- CPU处于核心态时,可以执行除了“访管”指令外的全部指令。因为已经处于核心态了,自然不需要执行“访管”指令。
- 特权指令指仅能由操作系统执行的指令。
- 系统调用是操作系统提供给用户程序的接口,系统调用发生在用户态,被调用程序在核心态下执行。
- 在某状态执行和在某状态发生是不同的,注意辨别。
- trap 指令、跳转指令和压栈指令均可以在用户态执行,其中 trap 指令负责由用户态转换为内核态。关中断指令为特权指令,必须在核心态才能执行。
- 考虑到部分指令可能出现异常 (导致中断),从而转到核心态。除法指令有除零异常的可能,软中断(软件异常)指令一定导致转到核心态,读写内存时可能出现缺页异常,导致转到核心态,寄存器取非等指令不会引发异常,故不会导致转到核心态。
- 缺页属于异常。
- 执行系统调用的顺序:①传递系统调用参数,②执行陷入(trap)指令,③执行相应的服务程序,④返回用户态
- 保存中断程序的中断点由硬件自动完成。
- 操作系统提供中断服务,初始化中断向量表,保存中断屏蔽字。
- 在内核态下,CPU 可执行任何指令,在用户态下 CPU 只能执行非特权指令,而特权指令只能在内核态下执行。常见的特权指令有: ①有关对 I/0 设备操作的指令;②有关访问程序状态的指令;③存取特殊寄存器的指令;④其它指令。
- 发生中断时保存断点和状态字,模式改为内核态的操作都是由硬件完成的,保存通用寄存器内容,执行系统服务例程是由操作系统完成的。
- 处理器区分执行态(核心态和用户态)的主要目的是保护系统程序。用户态到核心态的转换发生在中断产生时,而核心态到用户态的转换则发生在中断返回用户程序时。

p030-1.6.2
- 操作系统的结构:

- 两类虚拟机管理系统的对比:

- 通常可以从四个方面来描述微内核OS:①内核足够小,②基于客户/服务器模式,③应用“机制与策略分离”原理“,④采用面向对象技术。(红色为认知盲区处)
- 低级进程管理和调度属于调度功能的机制部分,应将它放入微内核。
- 微内核在核心态和用户态之间频繁切换,系统开销大,系统效率低。
- 微内核结构添加系统服务时不必修改内核。
- 由于微内核结构内的服务较少,因此系统更具有可靠性(稳定性)。
- Windows是宏内核操作系统
- 操作系统的引导程序位于磁盘活动分区的引导扇区中。引导程序分为两种:一种是位于 ROM中的自举程序**(BIOS 的组成部分),用于启动具体的设备;另一种是位于装有操作系统硬盘**的活动分区的引导扇区中的引导程序(称为启动管理器),用于引导操作系统。
- 计算机启动的过程:
- 激活CPU:CPU加电,读取ROM中的boot程序,该程序能将指令寄存器置为BIOS的第一条指令。因此启动CPU后先访问主存的ROM部分,才跳到BIOS。
- 硬件自检:启动BIOS后先进行硬件自检。
- 加载带有操作系统的硬盘:BIOS开始读取Boot Sequence(启动顺序),把控制权交给启动顺序排在第一位的储存设备,然后CPU将该存储设备引导扇区的内容加载到内存中。
- 加载主引导记录(MBR):能以特定的标识符区分引导硬盘和非引导硬盘,非引导则查找下一个设备。MBR的作用是告诉CPU去硬盘的哪个主分区去找操作系统。
- 扫描硬盘分区表,并加载硬盘活动分区:MBR包含硬盘分区表,分区表能标识活动分区和非活动分区,找到含有操作系统的分区(活动分区)后,开始加载活动分区,将控制权交给活动分区。
- 加载分区引导记录(PBR):读取活动分区的第一个扇区,这个扇区成为分区引导记录,其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。
- 加载启动管理器。
- 加载操作系统。
- 虚拟机可以由硬件实现:软件能实现的功能也能由硬件实现。
- 虚拟机不能实现真正的并行,实现并行的是多核处理机。
- 在操作系统初始化的过程中需要创建中断向量表,以实现通电自检 POST,CPU 检测到中断信号后,根据中断号查询中断向量表,跳转到相应的中断处理程序。
第二章 进程与线程
p046-2.1.8
- 线程是处理机调度的基本单位,包含CPU现场,可以独立执行程序。
- 线程没有自己独立的地址空间,它共享其所属进程的空间。
- 动态性是进程最重要的特性,以此来区分文件形式的静态程序。操作系统引入进程的概念是为了从变化的角度动态地分析和研究程序的执行。
- 进程的优先级分静态和动态两种,动态优先级是根据运行情况而随时调整的
- 进程获得处理器运行是通过调度得到的
- 在系统发生死锁时有可能进程全部都处于阻塞态,CPU 空闲。[坑]
- 例:在单一处理器系统中任何时刻都只有一个进程处于运行状态。(错)
- 程序封闭性是指进程执行的结果只取决于进程本身,不受外界影响。也就是说,进程在执行过程中不管是不停顿地执行,还是走走停停,进程的执行速度都不会改变它的执行结果。失去封闭性后,不同速度下的执行结果不同。
- 进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位,它包括 PCB、程序和数据以及执行栈区,仅仅说进程是在多程序环境下的完整程序是不合适的,因为程序是静态的,它以文件形式存放于计算机硬盘内,而进程是动态的。
- C语言编写的程序在使用内存时一般分为三个段,它们一般是正文段(即代码和赋值数据段)、数据堆段和数据栈段。
- 二进制代码和常量存放在正文段;
- 动态分配的存储区在数据堆段;
- 临时使用的变量在数据栈段。
- 由此,我们可以确定全局赋值变量在正文段赋值数据段,未赋值的局部变量和实参传递在栈段,动态内存分配在堆段,常量在正文段,进程的优先级只能在 PCB 内。
- 一个进程是程序在一个数据集上的一次运行过程。运行于不同的数据集,将会形成不同的进程。
- 同一个系统进程(或线程)可以由系统调用的方法被不同的进程(或线程)多次使用,它们是同一个进程(或线程)。
- PCB 内所含的数据结构内容,主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU 现场信息。
- 进程的就绪数目越多,争夺 CPU 的进程就越多,但只要就绪队列不为空,CPU 就总是可以调度进程运行,保持繁忙。这与就绪进程的数目没有关系,除非就绪队列为空,此时 CPU进入等待态,导致 CPU的效率下降。
- 同一进程中,线程的切换不会引起进程的切换。当从一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。
- 引入线程后处理器在既能在进程间切换也能在线程间切换。
- 引入线程是为了减少程序执行时的时空开销。并不会增加时空开销。
- 在无线程的系统中,进程是资源调度和并发执行的基本单位。在引入线程的系统中,进程退化为资源分配的基本单位,而线程代替了进程被操作系统调度,因而线程可以并发执行,不论是否为同一个进程的线程。
- 整个系统只有一个键盘,而且键盘输入是人的操作,速度比较慢,完全可以使用一个线程来处理整个系统的键盘输入。
- 线程被唤醒,是指线程等待结束后进入就绪态。只在极少数情况下会提高其优先级,但一般也不会提到最高。
- 数据库不能直接作为进程间的通信方式。
- 采用轮转调度算法时,如果进程中分别设置 100个用户级线程和 100个内核级线程,则前者的执行时间是后者的 100 倍,可以说在轮转调度算法中,内核级线程与用户级线程的效果完全不同。
- 在用户级线程中,系统感知不到线程的存在,调度的对象是进程,因此,跨进程的用户级线程调度需要内核参与。
- 用户级线程不需要内核的支持,与系统平台无关,对线程管理的代码是属于用户程序的一部分。
- 内核级线程的程序实体可以在内核态运行。
- 进程时间片用完,可降低其优先级以让其他进程被调度进入执行状态。
- 进程是资源分配的基本单位,线程是处理机调度的基本单位。进程的代码段、进程打开的文件、进程的全局变量等都是进程的资源,唯有进程中某线程的栈指针(包含在线程 TCB 中)是属于线程的,属于进程的资源可以共享,属于线程的栈指针是独享的,对其他线程透明。
- 同一进程的个线程共享进程的地址空间。
- 管道通信虽然是用共享文件来实现的,但该文件只能存在于内存中,与磁盘容量大小无关。通常被系统限制大小
- 进程对管道读写都可能造成堵塞。
- 管道通信可以多写一读(仅考试)。
- 临界资源是只允许一个进程读写的共享资源,进程间互斥读写。
- 即使是父子进程也不能同时使用同一临界资源。
- 父进程创建子进程时会为其分配虚拟地址空间,虽然父进程和子进程可以共享一部分资源,但不能共享虚拟地址空间。
- 执行一条命令或运行一个应用程序时,进程和程序之间形成一对一的关系。进程在执行过程中可以加载执行不同的应用程序,从而形成一对多的关系;以不同的参数或数据多次执行同一个应用程序时,形成多对一的关系;并发地执行不同的应用程序时,形成多对多的关系。
- 父进程创建子进程和主程序调用子程序的区别:父进程创建子进程后,父进程与子进程同时执行(并发)。主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。
- 在操作系统中,进程是竞争和分配计算机系统资源的基本单位。每个进程都有自己的独立地址空间。为了保证多个进程能够彼此互不干扰地共享物理内存,操作系统利用硬件地址机制对进程的地址空间进行了严格的保护,限制每个进程只能访问自己的地址空间。
- 多线程是指在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。
- 多线程与多任务的区别:多任务是针对操作系统而言的,代表操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。
- 系统就绪态和运行态无进程的可能性:
- 系统无进程
- 进程均处于等待状态
- 进程处于死锁
- 支持进程状态变迁至少需要包括创建新进程原语、阻塞进程原语、唤醒进程原语、终止进程原语等操作。
p069-2.2.7
- 时间片轮换调度算法的主要目的是,使得多个交互的用户能够得到及时响应,使得用户以为“独占”计算机的使用,因此它并没有偏好,也不会对特殊进程做特殊服务。时间片轮转增加了系统开销,所以不会使得系统高效运转,吞吐量和周转时间均不如批处理。但其较快速的响应时间使得用户能够与计算机进行交互,改善了人机环境,满足用户需求。
- 在单处理机多进程系统中,进程什么时候占用处理器及决定占用时间的长短是由进程的特点和进程调度策略决定的。如进程是 CPU繁忙型还是 I/O繁忙型、自身的优先级等但仅有这些特点是不够的,能否得到调度还取决于进程调度策略,若采用优先级调度算法,则进程的优先级才起作用。至于占用处理器运行时间的长短,则要看进程自身,若进程是I/O 繁忙型运行过程中要频繁访问I/O 端口,即可能会频繁放弃 CPU,所以占用CPU 的时间不会长,一放弃 CPU,则必须等待下次调度。若进程是 CPU 繁忙型,则一旦占有 CPU,就可能会运行很长时间,但运行时间还取决于进程调度策略,大部分情况下,交互式系统为改善用户的响应时间,大多数采用时间片轮转的算法,这种算法在进程占用 CPU达到一定时间后,会强制将其换下,以保证其他进程的CPU使用权。
- 先来先服务算法有利于CPU繁忙型的作业,而不利于I/O繁忙型作业。
- 在选择进程调度算法时应考虑以下几个准则:①公平:确保每个进程获得合理的 CPU份额;②有效:使 CPU尽可能地忙碌;③响应时间:使交用户的响应时间尽可能短;④周转时间:使批处理用户等待输出的时间尽可能短;⑤吞吐量:使单位时间处理的进程数尽可能最多。
- 时间片轮换算法是绝对可抢占的
- 作业是从用户角度出发的,它由用户提交,以用户任务为单位;进程是从操作系统出发的,由系统生成,是操作系统的资源分配和独立运行的基本单位。
- [粗心易错]:三道程序$J_1,J_2,J_3$,运行时间分别为$T_1,T_2,T_3$($T_1<T_2<T_3$)。则平均周转时间为:$(3T_1+2T_2+T_3)/3$,括号内123顺序易写反,虽然$J_1$只执行了一次,但每个程序都经历了$T_1$。
- 分时系统中,响应时间与时间片和用户数成正比。
- 中断向量本身是用于存放中断服务例行程序的入口地址,因此中断向量地址就应是该入口地址的地址。
- 中断由硬件保护并完成,主要是为了保证系统运行可靠、正确。提高处理速度也是一个好处,但不是主要目的。
- UNIX是分时操作系统。[补充]分时操作系统:WIndows,Unix,Linux;实时操作系统:uCOS-II,VxWorks;单用户操作系统:DOS。
- 当进程处于临界区时说明进程正在占用处理机,只要不破坏临界资源的使用规则,就不会影响处理机的调度。
- 对于优先级调度算法一般来说,IO 型作业的优先权高于计算型作业的优先权,这是由于 I/O 操作需要及时完成,它没有办法长时间地保存所要输入/输出的数据,所以考虑到系统资源利用率,要选择 I/O 繁忙型作业有更高的优先级。
- 时钟中断是系统中特定的周期性时钟节拍,操作系统通过它来确定时间间隔,实现时间的延时和任务的超时。因此时钟中断发生后,系统会修改当前进程在时间片内的剩余时间。
- 时间片调度算法中,中断处理结束后,系统检测当前时间片是否用完,若用完则进程调度。
- [粗心易错]:程序最开始执行的进程也应算入调度次数中,容易丢掉。
- 为什么说多级反馈队列调度算法能较好的满足各类用户的需要?

- [易错]:计算利用率时,即使出现某资源在最后未出于使用状态,也要将该时间段计算入总时间。
- 对于多道作业的处理系统:有n道作业处理系统,则内存中能存放n个作业,内存有空位后由外部调度算法进行调度,调入后再由程序调度算法调入处理机。
- 调入内存后的时间才算作周转时间。
- 高相应比优先调度算法不抢占,一个程序执行完成后计算相应比,继续选择下一个要执行的程序。
- 对于多道作业批处理系统的题目,可以画出如下图更加直观,但只问周转时间也可只在表格后添加进出内存时间。

- 对于进程优先数priority,cpu占用时长cpuTime,等待时长waitTime,通过以下计算方法,可实现动态优先数,避免出现饥饿现象。(nice是进程本身优先级越小越优先,priority越小越优先)$priority=nice+k_1cpuTime-k_2waitTime$。
p101-2.3.7
- 多个进程可以共享系统中的资源,一次仅允许一个进程使用的资源称为临界资源。访问临界资源的那段代码称为临界区。
- 磁盘属于共享设备,不是临界资源。
- 公用队列是公共使用,且一次只能有一个程序访问,因此是临界资源。
- P、V操作是一种低级的进程通信原语,它是不能被中断的。
- 与互斥信号量初值一般置1不同,用PV操作实现进程同步时,信号量的初值应根据具体情况来确定。若期望的消息尚未产生,则对应的初值应设为 0:若期望的消息已存在,则信号量的初值应设为一个非0的正整数。故进程同步信号量的处置一般由用户确定。
- 若代码可被多个进程在任意时刻共享,则要求任意一个进程在调试此段代码时都以同样的方式运行;而且进程在运行过程中被中断后再继续执行,其执行结果不受影响。这要求代码不能被任何进程修改,否则无法满足共享的需求。这样的代码就是可重入代码,也称纯代码,即允许多个进程同时访问的代码。
- 一个系统中,由几个并发进程控制某一相同变量,临界区的数量为进程的数量。(因为临界区时访问临界资源的代码段)
- 管程由以下四部分组成:
- 管程的名称。
- 局部与管程内部的共享数据结构说明。
- 对该数据结构进行操作的一组过程
- 对局部于管程内部的共享数据设置初始值语句。
- 管程的signal操作与信号量机制中的V操作不同。信号量中V操作一定会改变信号量的值$S=S+1$。而管程中的signal操作是针对某个条件变量的,若不存在因该条件而阻塞的进程,则signal不会产生任何影响。
- [超级大坑][冲国特色傻逼抠字眼题目]题目问资源等待、运行的信号量条件时,一定要注意是操作前还是操作后。例如,信号量S**执行P操作后**,使该进程进入资源等待队列的条件和S执行P操作前的条件分别为 $S.value\lt0$ 和 $S.value\leq0$ ,请注意辨别。
- [坑]系统中有 $n$ 个进程,则就绪队列中的进程数最多有 $n-1$ 个,不存在处理机为空,全在就绪队列的情况;阻塞队列中进程数最多有 $n$ 个,如果发生死锁,处理机可能为空,全部处于等待队列。
- P,V属于两个原子操作,因此由两个不可被中断的过程组成。
- 忙则等待、空闲让进、有限等待是临界区互斥机制必须实现的,而让权等待则不一定非要实现。
<—-整理未完成—->
<—-后面大题一天写一到二题,优先做真题—->
p142-2.4.6
<—-整理未完成—->
第三章 内存管理
p174-3.1.8
- 内存保护是内存管理的一部分,是操作系统的任务,但是出于安全性和效率考虑,必须由硬件实现,所以需要操作系统和硬件机构的合作来完成。
- 下面几种装入方式的说明和执行时间。
- 静态装入:在编程阶段就把物理地址计算好。
- 可重定位:在装入时把逻辑地址转换成物理地址,但装入后不能改变。
- 动态重定位:在执行时再决定装入的地址并装入,装入后有可能会换出,所以同一个模块在内存中的物理地址是可能改变的。
- 动态重定位是指在作业运行过程中执行到一条访存指令时,再把逻辑地址转换为主存中的物理地址,实际中是通过硬件地址转换机制实现的。
- 分页式存储管理有内部碎片,分段式存储管理有外部碎片,固定分区存储管理方式有内部碎片,段页式存储管理方式有内部碎片。
- 多进程的执行通过内存保护实现互不干扰,如页式管理中有页地址越界保护,段式管理中有段地址越界保护。
- 页表和段表同样存储在内存中,系统提供给用户的物理地址空间为总空间大小减去页表或段表的长度。由于页表和段表的长度不能确定,所以提供给用户的物理地址空间大小也不能确定。
- 页表的功能由一组专门的存储器实现,其始址放在页表基址寄存器 (PTBR)中。这样才能满足在地址变换时能够较快地完成逻辑地址和物理地址之间的转换。
- 可重入程序主要是通过共享来使用同一块存储空间的,或通过动态链接的方式将所需的程序段映射到相关进程中去,其最大的优点是减少了对程序段的调入/调出,因此减少了对换数量。
- 实现分页、分段和段页式存储管理需要特定的数据结构支持,如页表、段表等。为了提高性能,还需要硬件提供快存和地址加法器等,代价高。分区存储管理是满足多道程序设计的最简单的存储管理方案,特别适合嵌入式等微型设备。
- 内存管理是为了提高内存的利用率,引入覆盖和交换技术,即在较小的内存空间中采用重复使用的方法来节省存储空间,但它付出的代价是需要消耗更多的处理器时间,因此实际上是一种以时间换空间的技术。为此,从节省处理器时间上来讲,换入、换出速度越快,付出的时间代价就越小,反之就越大,当时间代价大到一定程度时,覆盖和交换技术就没有了意义。应以提高换入、换出速度为主要目标。
- 在非虚拟存储器中,作业必须全部装入内存且在运行过程中也一直驻留内存;在虚拟存储器中,作业不必全部装入内存且在运行过程中也不用一直驻留内存,这是虚拟存储器和非虚拟存储器的主要区别之一。
- 引入段式存储管理方式,主要是为了满足用户的下列要求:方便编程、分段共享、分段保护、动态链接和动态增长。
- 主存的访问,不是主存的分配。对主存的访问是以字节或字为单位的。例如,在页式管理中,不仅要知道块号,而且要知道页内偏移。
- 静态重定位是在程序运行之前由装配程序完成的,必须分配其要求的全部连续内存空间。而页式存储管理方案是将程序离散地分成若干页(块),从而可以将程序装入不连续的内存空间,显然静态重定位不能满足其要求。
- 分区分配内存管理方式的主要保护措施是:界地址保护。
- 编译后的程序需要经过链接才能装载,而链接后形成的目标程序中的地址也就是逻辑地址。
- 最佳适应算法总是匹配与当前大小要求最接近的空闲分区,但是大多数情况下空闲分区的大小不可能完全和当前要求的大小相等,几乎每次分配内存都会产生很小的难以利用的内存块,所以最佳适应算法最容易产生最多的内存碎片。
<–未总结完,D12需要看视频+大题未做非真题–>
p205-3.2.10
- 多次性、对换性和离散性是虚拟内存的特征,一次性则是传统存储系统的特征。
- 无论采用什么页面置换算法,每种页面第一次访问时不可能在内存中,必然发生缺页,所以缺页次数大于或等于 n。(n为程序页数量)
- 虚拟存储器的最大容量是由计算机的地址结构决定的,与主存容量和外存容量没有必然的联系。
- 页面失效(缺页)要计算第一次使用页面的次数。交换次数则不含第一次使用。
- LRU算法需要对所有页最近一次被访问的时间进行记录,查找时间最久的进行替换,这涉及排序,对置换算法而言,开销太大。为此需要在页表项中增加LRU位,而需要硬件支持可以看作耗费高的结果,需要对所有页排序才是原因。
- 页表项中的合法位(存在位)信息显示本页面是否在内存中,即决定了是否会发生页面故障。
- Belady异常是指:物理块数增大页故障却不减反增的现象,抖动不是Belady异常。
- 所有页面置换策略都可能引起抖动。
- 实地址是物理地址,即为物理内存实际的地址。虚地址是逻辑地址,是对用户来说的地址。程序页面大小计算时需要使用虚地址位数。
- 页表也有可能存储在磁盘的交换区上,可以通过让页表常驻内存来加快虚地址转换。
- 工作集即为最近窗口大小个页面序列的集合(记得去重)。
- 用户进程发起,请求操作系统的服务叫系统调用。页面置换过程由操作系统完成,不涉及系统调用;进程调度完全由操作系统完成,不涉及系统调用;创建进程可以通过系统调用来完成,如:Linux中通过fork系统调用来创建子进程;生成随机数只需要普通的函数调用,不涉及系统调用。
- 页置换算法会影响缺页率,例如,LRU 算法的缺页率通常要比 FIFO 算法的缺页率低。工作集的大小决定了分配给进程的物理块数,分配给进程的物理块数越多,缺页率就越低。进程的数量越多,对内存资源的竞争越激烈,每个进程被分配的物理块数越少,缺页率也就越高。页缓冲队列是将被淘汰的页面缓存下来,暂时不写回磁盘,**队列长度会影响页面置换的速度,但不会影响缺页率。
- 缺页发生页面置换后,会重新到快表中查找页表。置换后的页表会直接进入快表。
<——部分题目未完成—–>
第四章 文件管理
p240-4.1.8
- 打开文件操作是将FCB存入内存活跃文件目录表;找到指定文件目录是打开文件之前的操作。
- 目录文件是FCB的集合,一个目录中既可能有子目录,又可能有数据文件。因此目录文件中存放的是子目录和数据文件的信息。
- 文件目录项即FCB,通常由文件基本信息、存取控制信息和使用信息组成。基本信息包括文件物理位置。文件目录项显然不包括文件控制块(FCB)的物理位置。
- 用户访问权限是指用户有没有权限访问该文件,而用户优先级是指在多个用户同时请求该文件时应该先满足谁。文件的属性包括保存在FCB 中对文件访问的控制信息。因此对于一个文件的访问常由用户访问权限和文件属性共同限制。
- 相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。访问控制必须由系统实现,否则系统本身的安全性就无法保证。加密机制不能由系统实现,否则加密方法将无法扩展。
- 注册和登录属于系统级安全管理。
- 文件的逻辑结构:无结构文件(流式文件)和有结构文件。文件的物理结构:连续文件,链接文件。文件用途分类:系统文件和其它
- 对于由 $N$ 条记录的顺序文件,查找某关键字的记录时,平均要查找 $\frac{N}{2}$ 次。在索引顺序文件中,最好情况时将 $N$ 条记录分为 $\sqrt{N}$ 组,索引表中有 $\sqrt{N}$ 个表项,每组有 $\sqrt{N}$ 条记录,查找某关键字记录时,先顺序查找索引表,需要查找 $\frac{\sqrt{N}}{2}$ 次,然后在主文件中对应的组中顺序查找,也需要查找 $\frac{\sqrt{N}}{2}$ 次,因此共需查找 $\frac{\sqrt{N}}{2} + \frac{\sqrt{N}}{2} = \sqrt{N}$ 次。傻逼王道的课后题中出现了一种每次查找 $\sqrt{N}+1$个的神奇现象,知道就好了不要当真,题目讲解的视频没这选项就nm离谱。
- 索引文件的表项中含有关键字和存放该记录的逻辑地址。易错,不是物理地址。逻辑索引和索引分配要分开。
- 打开文件表仅存放已打开文件信息,将指名文件的属性从外存复制到内存,再使用该文件时直接返回索引。位图和空闲盘块链表是磁盘管理方法。索引表中记录每个文件所存放的盘块地址。
- 若一个用户进程通过read系统调用读取一个磁盘文件中的数据:
- 当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞态,直到所需数据从外存调入内存后,才将该进程唤醒。
- read 系统调用通过陷入将CPU从用户态切换到核心态,从而获取操作系统提供的服务。
- 要读一个文件,首先要用 open 系统调用打开该文件。
- open 中的参数包含文件的路径名与文件名,而read 只需使用open 返回的文件描述符,并不使用文件名作为参数。
- read 要求用户提供三个输入参数:①文件描述符 fd;②buf 缓冲区首址;③传送的字节数 n。
- read 的功能是试图从fd所指示的文件中读入n个字节的数据,并将它们送至由指针 buf 所指示的缓冲区中。
- 若文件系统索引节点,索引节点总数与单个文件长度无关。
- CD-ROM中视频文件的快速随机播放性能最好的数据块组织方式是连续结构,因为CD-ROM不能修改,且连续结构可以很好的快速的随机播放。
<——大题未完成—–>
p258-4.2.7
实现用户对文件的按名存取,系统先利用用户提供的文件名形成检索路径,对目录进行检索。在顺序检索中,路径名的一个分量未找到,说明路径名中的某个目录或文件不存在,不需要继续检索。
目录的查询方式有两种:顺序检索法和 Hash 法,通常采用顺序检索法。
在树形目录中,为了加快文件检索速度,可设置当前目录,文件路径可以从当前目录开始查找。
在顺序检索法查找完成后,得到的是文件的逻辑地址。
文件在磁带上通常采用连续存放方法,在硬盘上通常不采用连续存放方法,在内存上采用随机存放方法。
对文件的访问控制,常由用户访问权限和文件属性共同限制。
在树形目录结构中,对于不同用户的文件,文件名可以不同也可以相同。
防止文件受损常采用备份的方法,而存取控制矩阵方法用于多用户之间的存取权限保护。
建立符号链接时,引用计数值直接复制;建立硬链接时,引用计数值加 1。删除文件时,删除操作对于符号链接是不可见的,这并不影响文件系统,当以后再通过符号链接访问时,发现文件不存在,直接删除符号链接;但对于硬链接则不可直接删除,引用计数值减 1,若值不为 0,则不能删除此文件,因为还有其他硬链接指向此文件。
符号链接创建后复制文件的引用计数值,且全程不再改变。
硬链接指通过索引结点进行链接。一个文件在物理存储器上有一个索引结点号。存在多个文件名指向同一个索引结点的情况。
两个进程各自维护自己的文件描述符,因此即使打开的是同一个文件,也是分别指向各自的文件表中的一项。
不同进程对同一个文件读写指针位置无关。
不同进程打开同一个文件:
- ①整个系统只有一个系统文件打开表,同一个文件打开多次,只需改变引用计数。
- ②进程打开文件表关于同一个文件不一定相同,例如读写指针位置不一定相同。
[例]:文件系统采用两级目录的结构,主目录有10个子目录,每个子目录有10个目录项。在同样多目录的情况下,采用单级目录结构的平均检索目录项数是原来的 5 倍。两级目录检索 $\frac{10}{2}+\frac{10}{2}=10$ 次。单级目录检索次数 $\frac{10*10}{2}=50$ 次。
p273-4.3.7
- 从系统角度看,文件系统负责对文件的存储空间进行组织、分配,负责文件的存储并对存入文件进行保护、检索。从用户角度看,文件系统根据一定的格式将用户的文件存放到文件存储器中适当的地方,当用户需要使用文件时,系统根据用户所给的文件名能够从文件存储器中找到所需要的文件。
- 即从用户观点看操作系统引入文件系统的目的是:实现文件的按名存取。
- 文件的存储空间管理实质上是对外存空闲区的组织和管理。
- 为了实现虚拟文件系统(VFS),Linux 主要抽象了四种对象类型:超级块对象、索引结点对象、目录项对象和文件对象。
- 传统文件系统管理空闲磁盘的方法包括空闲表法、空闲链表法、位示图法和成组链接法。文件分配表(FAT)的表项与物理磁盘块一一对应,并且可以用一个特殊的数字-1表示文件的最后一块,用-2表示这个磁盘块是空闲的(当然也可用-3-4 来表示),因此FAT 不仅记录了文件中各个块的先后链接关系,同时还标记了空闲的磁盘块,操作系统可以通过 FAT 对文件存储空间进行管理。
第五章 输入/输出(I/O)管理
p282-5.1.6
- 共享设备指一段时间允许多个进程同时访问,不是同一时间。
- 共享设备必须是可寻址的和可随机读写的。
- 分配共享设备不会引起进程死锁。
- 不存在I/O地址寄存器。地址寄存器只有计算机主机有。
- 为了便于上层软件的编制,设备控制器通常需要提供:控制寄存器、状态寄存器和控制指令。
- 通道也是用于实现内存与外设之间的信息传输。
- 命令/状态寄存器控制DMA 的工作模式并给 CPU反映它当前的状态,地址寄存器存放DMA作业时的源地址和目标地址,数据寄存器存放要 DMA 转移的数据,只有堆指针寄存器不需要在DMA 控制器中存放。
- 字节多路通道,它通常含有许多非分配型子通道,其数量可达几十到几百个,每个通道连接一台 IO 设备,并控制该设备的 I/O 操作。这些子通道按时间片轮转方式共享主通道。各个通道循环使用主通道,各个通道每次完成其 I/O 设备的一个字节的交换,然后让出主通道的使用权。这样,只要字节多路通道扫描每个子通道的速率足够快,而连接到子通道上的设备的速率不太高时,便不至于丢失信息。故用于连接大量的低俗或中速I/O设备。
- 设备的固有属性决定了设备的使用方式;设备独立性可以提高设备分配的灵活性和设备的利用率;设备安全性可以保证分配设备时不会导致永久阻塞。设备分配时一般不需要考虑及时性。
- 计算机系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的绝对号。
- 通道控制设备控制器,设备控制器控制设备工作。
- 通道是特殊的处理器,不是软件。
- 所有设备的启动工作都由系统统一来做
- 来自通道的I/O中断事件由设备管理负责处理
- 编制好的通道程序是存放在主存中的
- 操作系统只需要按照类型提供驱动程序。例如:3台打印机2台绘图机只需要两个设备驱动程序。
- 系统调用是操作系统提供给用户程序的通用接口,属于设备无关软件的功能,不会因为具体设备的不同而改变。而设备驱动程序负责执行操作系统发出的 IO 命令,它因设备不同而不同。
- 键盘是典型的通过中断 I/O 方式工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息。
- I/O软件一般从上到下分为 4 个层次:用户层、与设备无关的软件层、设备驱动程序及中断处理程序。与设备无关的软件层也就是系统调用的处理程序。
- 用户程序发出磁盘I/O请求后,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是:设备驱动程序。
- 设备的独立性主要是指用户使用设备的透明性,即使用户程序和实际使用的物理设备无关。
- CPU 与IO 设备执行速度通常是不对等的,前者快、后者慢,通过高速缓冲技术来改善两者不匹配的问题。
- 缓冲池是系统的共用资源,可供多个进程共享,并且既能用于输入又能用于输出。其一般包含三种类型的缓冲①空闲缓冲区;②装满输入数据的缓冲区;③装满输出数据的缓冲区。为了管理上的方便,可将相同类型的缓冲区链成一个队列。
- 在鼠标移动时,若有高优先级的操作产生,为了记录鼠标活动的情况,必须使用缓冲技术。
- 由于磁盘驱动器和目标或源I/O 设备间的吞吐量不同,必须采用缓冲技术。
- 为了能使数据从用户作业空间传送到磁盘或从磁盘传送到用户作业空间,必须采用缓冲技术。
- 为了便于多幅图形的存取及提高性能,缓冲技术是可以采用的,特别是在显示当前一幅图形又要得到下一幅图形时,应采用双缓冲技术。
- 在单机系统中,最关键的资源是处理器资源,最大化地提高处理器利用率,就是最大化地提高系统效率。多道程序设计技术是提高处理器利用率的关键技术。SPOOLing,虚拟技术,交换技术均为设备和内存的相关技术。
- SPOOLing 技术需要使用磁盘空间(输入井和输出井)和内存空间(输入/输出缓冲区),不需要外围计算机的支持。
- SPOOLing系统由预输入程序、井管理程序和缓冲输出程序组成。
- 因为SPOOLing 技术是一种典型的虚拟设备技术,它通过将独占设备虚拟成共享设备,使得多个进程共享一个独占设备,从而加快作业的执行速度,提高独占设备的利用率。既然是将独占设备虚拟成共享设备,所以必须先有独占设备才行。
- 独占设备采用静态分配方式,而共享设备采用动态分配方式。
- SPOOLing技术设备与输入输出井之间的数据传送是由操作系统实现的,用户不能控制。
- 设备可视为特殊文件(Linux),因此可以使用文件名访问物理设备。
- 初始化设备是由驱动程序完成的。
- 厂家会根据设备特性,在驱动程序中实现一种最合适的IO控制方式,驱动程序和IO控制方式有关。
p310-5.3.6
- 固态硬盘部分总结

- 操作系统的引导程序位于磁盘活动分区的引导扇区,因此必然产生在分区之后。分区是将磁盘分为由一个或多个柱面组成的分区(即 C盘、D等形式,每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中。**而对于高级格式化(创建文件系统)**,操作系统将初始的文件系统数据结构存储到磁盘上。
- 磁盘调度算法是为了减少寻找时间。
- 扇区数据的处理时间主要影响传输时间。
- 绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配。

- 当系统总是持续出现某个磁道的访问请求时,均持续满足最短寻道时间优先、扫描算法和循环扫描算法的访问条件,会一直服务该访问请求。而先来先服务按照请求次序进行调度,比较公平。