本文主要是考研复试备考自用,所以课后习题答案主要是简答题部分,此外还有其他的简答补充。如果发现有误,欢迎在评论区或者私信指出。
答:
1.1 计算机系统配置OS的4个主要目标:是实现方便性、有效性、可扩充性、开放性。
1.2 OS的作用主要表现在3个方面:
(1)OS是用户与计算机硬件系统之间的接口。
(2)OS是计算机系统资源的管理者。
(3)OS实现了计算机系统资源的抽象。
答:
(1)从体系结构的角度看:OS是覆盖在硬件上的第一层软件,它负责管理计算机的软硬件资源,同时为用户提供良好的界面。
(2)从硬件的角度看:OS与硬件紧密相关,直接管理着硬件资源,为用户提供了完成所有与硬件相关的操作,极大方便了用户对硬件资源的使用,并提高了硬件资源的利用率。
(3)从软件角度看:OS是一种特殊的系统软件,也是其他系统软硬件的接口。其它系统软件运行在OS的基础之上,可获得OS所提供的大量服务 。而一般用户使用计算机除了可以使用OS支持外,也可以使用其他系统和应用软件。
答:
(1)计算机系统资源利用率不断提高
(2)方便用户
(3)硬件的更新换代
(4)计算机体系结构的发展
(5)新的需求被不断提出
(1)脱机I/O是指事先将装有用户程序或者数据的纸带或卡片上的数据输入到磁带上,该方式的I/O操作由外围控制机完成,是在脱离主机的情况下进行的。
(2)联机I/O是指程序和数据的I/O都是在主机的直接控制下进行的。
答:
推动分时系统形成和发展的主要动力:“更好满足用户需要”。其主要表现为:
(1)CPU的分时缩短了作业的平均周转时间。
(2)人机交互功能的提供方便用户直接控制自己的作业
(3)主机共享可以使多个用户(包括远程用户)同时使用一台计算机独立地、互不干扰地处理各自的作业。
答:
6.1 实现分时系统的关键问题是:使用户可以与自己的作业进行交互,即用户在自己的终端上输入一条命令以请求系统服务后,系统能够及时接收并处理该命令,并在用户能接受的时间内返回给该用户。
6.2 实现分时系统的解决方法是:在系统中配置一个多路卡,并为每个终端配置一个缓冲区以暂存用户输入的命令和输出的结果(这样是为了及时接受命令和返回输出结果)。
因此关键问题是要确保在较短时间内确保所有的用户程序都能执行一次,从而使用户输入的命令可以得到及时的响应。
为此一方面(1)用户作业被提交后应该立即进入内存。另一方面(2)系统应该设置一个时间很短的时间片,并规定每个程序每次最长只能连续运行一个时间片,如何一个时间片用完,则不管它是否运行完毕,都必须将CPUA让给下一个作业。通过使作业分时共享CPU,所有的作业都可以及时的处理,用户的请求亦可得到及时的响应。
答:实时系统是指系统能及时响应外部事件的请求,在规定的额时间内内完成对时间的处理,并控制所有实时任务协调一致的运行。引入实时系统是为了更好的满足实时控制领域和实时信息处理领域的需要。
答:
(1)硬实时任务(HRT)是指系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果,如:运载火箭的控制,导弹武器系统等。
(2)软实时任务(SRT)对截止时间的要求并不严格,偶尔错过截止时间对系统产生的影响也不大,如:网页内容的更新,火车售票系统剩余票数的更新等。
答:
(2)及时性方面:分时系统的及时性是指用户能在很短时间间隔内获取系统响应,这一时间间隔是根据人们能接受的等待时间来确定的。一般为2~3s。对实时系统来说,及时性是实时系统的关键问题之一,实时信息系统的及时性要求和分时系统的及时性要求相似,而实时控制系统的及时性要求则是由被控制对象所要求的开始截止时间和完成截止时间决定的,一般为秒级,毫秒级,甚至更低。
(2)交互性方面:交互性问题是分时系统的关键问题。在分时系统中用户可以通过终端与系统进行广泛的人机交互,比如文件编辑、数据处理和资源共享等。实时系统也有交互性,但是在实时系统中,交互性仅限于访问系统中某些特定的专用服务程序,即实时系统的交互性具有很大的局限性。
(2)可靠性方面:可靠性是实时系统的另一个关键问题,实时系统中的任何差错都可能带来巨大的经济损失,甚至导致无法预料的灾难性后果,因此实时系统往往采用多级容错措施来保证系统高度可靠。分时系统也要求可靠,但是相对实时系统而言的要求较低。
答:按照运行方式,微机OS可以分为3类:单用户单任务OS、单用户多任务OS、多用户多任务OS。
(1)单用户单任务OS:只允许一个用户上机(使用计算机),且只允许用户程序作为一个任务运行,主要配置在8位和16位微机上。最具代表性的单用户单任务OS是CP/M(8位)和MS-DOS(16位)。
(2)单用户多任务OS:只允许一个用户上机,但允许用户把程序分成若干个任务并发执行,从而有效地改善了系统性能。最具代表性的单用户多任务OS是微软的早期推出的Windows系列,如Windows3.1、Windows 95、Windows 98等。
(3)多用户多任务OS:允许多个用户通过各自的终端使用一台机器,共享主机系统中的各种资源,而每个用户程序又可以进一步分为若干个任务并发执行,从而进一步提高资源利用率和系统吞吐量。最具代表性的多用户多任务OS是UNIX系统,各种类UNIX系统(如Solaris、Linux系统等)以及Windows NT/Server系列的系统。
答:OS具有4大基本特征:并发、共享、虚拟、异步。它们有如下4种关系。
(1)并发和共享是OS最基本的特征。为了提高计算机资源利用率,OS必然要采用多道程序技术,使得多个程序共享系统资源、并发执行。
(2)并发和共享互为存在条件。一方面,资源的共享是以程序(进程)的并发执行为条件的,若系统不允许程序并发执行,就不会存在资源共享方面的问题;另一方面若系统不能对资源共享实施有效的管理,协调好各进程对共享资源的访问,则并将影响程序的并发执行。
(3)虚拟以并发和共享为前提。,OS之所以采用虚拟技术,就是为了使并发进程更方便、更有效地共享系统资源。OS多采用虚拟技术在逻辑上增加CPU和设备的数量以及存储器的数量,从而解决并发进程对有限系统资源的共享问题。
(4)异步性使并发性和共享性地必然结果。OS允许多个并发进程共享资源、相互合作,使得每个进程地运行过程受到了其他进程地制约,不再一气呵成,这必然会导致异步这一特征地产生。
答:
OS具有异步特征,而异步是并发和共享地必然结果。 具体可以归纳为以下3个原因。
(1)在多道程序环境下,允许多个程序并发执行,但由于资源等因素地限制,进程的执行通常并非一气呵成,而是以走走停停的方式完成的。
(2)内存中的每个进程在何时执行、何时暂停、以怎样的速度向前推进,都是不可预知的。
(3)但是在有关进程控制以及同步机制等的支持下,只要运行环境相同,作业经过多次运行都会获得完全相同的结果,因为异步方式是允许的。
答:
OS内核定义:在现代OS理论中,一般将OS划分为若干层次,再将OS的不同功能分别设置在不同层次中。通常将一些与硬件紧密相连的模块(如中断程序)、各种常用设备的驱动程序以及运行频率比较高的模块(如时钟管理、进程调度、公共基本操作等)都紧密安排在靠近硬件的模块种,让他们常驻内存,进而形成了所谓的OS内核。
OS内核主要功能:
(1)支撑功能:包括中断处理、时钟管理和原语操作等;
(2)资源管理功能:包括进程管理、存储器管理、设备管理等。
答:原语,是一个过程,该过程由若干条指令组成没用于完成一定的功能。原子操作,是一个不可分割的基本单位,是指一个操作的所有动作要么全做,要么全部不做。
因此,原语在执行过程中不允许被中断,原子操作在内核态被执行,常驻内存。
答:一般地,处理机至少需要两种单独的运行模式:即用户态和内核态。
(1)用户态,又称为目态,计算机硬件可以通过一个模式位1来表示它。当计算机运行用户程序时,系统即处于用户态。
(2)内核态,又称管态或系统态,计算机硬件可以通过一个模式位0来表示它。当OS能够控制计算机时,它就处于内核态。比如,当用户程序通过系统调用请求OS服务时,系统必须从用户态切换到内核态,以响应请求。
答:一旦CPU响应中断,系统就会开始进行中断处理。中断处理的过程主要包括以下3步。
(1)保护被中断进程的现场。为了在中断处理结束后能使进程正确返回中断点,系统必须保存当前处理机状态字和程序计数器的值。(保护现场)
(2)分析中断原因,执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源所发出的请求。(执行中断)
(3)恢复被中断进程的现场,CPU继续执行被中断的原进程。(恢复现场)
【王道补充の中断过程】
答:
(1)CPU检测到中断信号后,由硬件自动保存被中断程序的断点(即程序计数器PC和程序状态字PSW)。(保护现场)
(2)之后,硬件找到该中断信号对应的中断向量,中断向量指明终端服务程序入口地址(中断向量统一存放在中断向量表中,该表由操作系统初始化,即找中断向量)。然后,开放中断,允许更高级的中断请求打断低级的中断服务程序。
(3)接下来,执行中断服务程序,保存中断品鼻子、保存各通用寄存器的值,并提供与中断信号对应的中断服务,中断服务程序属于操作系统内核,中断服务程序的最后一条指令一定是中断返回指令。
(4)然后,关中断,防止在恢复现场过程中被新的中断请求打断。
(5)最后,恢复现场,然后开放中断,以便返回原来的程序后可以响应其他的中断请求。
PS:可以简记为:保护现场—>确认中断向量—>开中断—>执行中断服务程序—>关中断—>恢复现场—>开中断
答:处理机管理的主要功能有4个:进程管理、进程同步、进程通信和处理机调度。其中各部分的主要任务为:
(1)进程管理:为作业创建进程,撤销已结束进程,控制进程在运行中的状态转换。
(2)进程同步:协调多个进程(含线程)的运行。
(3)进程通信:实现在相互合作的进程之间的信息交换。
(4)处理机调度:包括作业调度和进程调度。作业调度是按照一定的算法从后备队列里选出若干个作业,为他们分配运行所需的资源;进程调度是按照一定的算法从进程的就绪队列中选取一个进程,把处理机分配给它,并设置运行现场,使进程投入运行。
答:内存管理的主要功能有4个:内存分配、内存保护、地址映射和内存扩充。其中各部分的主要任务为:
(1)内存分配:为每道程序分配内存。
(2)内存保护:确保每道程序仅在自己的内存空间运行,彼此互不干扰。
(3)地址映射:将地址空间的逻辑地址转为内存空间对应的物理地址。
(4)内存扩充:即从逻辑上扩充内存,实现请求调入功能和置换功能。
答:设备管理的主要功能有4个:缓冲管理、设备分配、设备处理和设备虚拟。其中各部分的主要任务为:
(1)完成用户提出的I/O请求,为用户分配进程所需的I/O设备,并完成指定的I/O操作。
(2)提高CPU和I/O设备的利用率,提高I/O速度,方便用户使用I/O设备。
答:文件管理的主要功能有3个:文件存储空间管理、目录管理、文件读写管理和保护。其主要任务是对用户文件和系统文件进行管理以方便用户使用、保证文件安全。
答:现代OS除了具有传统OS的功能外,还具有保障系统安全、支持用户联网获取服务和可处理多媒体信息等功能。
答:微内核OS是具有如下4个特征的OS:(1)足够小的内核;(2)基于客户/服务器模式;(3)应用策略与机制分离原则;(4)采用面向对象技术。
微内核OS的主要优点有4个:(1)提高了系统的可扩展性;(2)增强了系统的可靠性和可移植性;(3)提供了对分布式系统的支持;(4)融入了面向对象技术。
答:外核OS的基本思想是:内核不提供传统OS中的进程、虚拟存储等抽象事物,而是专注于物理资源的隔离(保护)与复用。具体来说,在基于外核结构的OS中,内核负责保护系统资源,而硬件资源的管理职责则委托给了应用程序,这样,OS就可以做到在保证资源安全的前提下,减少对应用程序的限制,充分满足应用程序对硬件资源的不同需求。
答:系统调用是OS提供给程序员的唯一接口。程序员利用系统调用,在源程序层面动态请求和释放系统资源,并调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子,对用户屏蔽了OS的具体动作,而只提供有关的功能。
系统调用与一般用户程序和库函数的区别在于3点:(1)系统调用(程序)在内核态执行,调用它们时需要一个类似于硬件中断处理机制的中断处理机制来提供系统服务;(2)普通用户程序是直接为用户完成某特定功能而设计的,它们一般在用户态执行;(3)库函数是把函数放到库里提供别人使用的一种方式,是面向应用开发,方便人们编程的。
答:
(1)(传参)正在运行的进程先传递系统调用参数。(2)(trap)然后陷入指令负责将用户态转换为核心态,并将返回地址压入堆栈后备用(3)(执行)接下来CPU执行相应的内核态程序,(4)(返回)最后返回用户态,继续执行程序。
答:CPU激活后,会从最顶端的地址FFF0H获得第一条指令来执行,这个地址仅仅只有16字节,放不下一段程序,所以是一条JMP指令,以跳转到更低地址去执行BIOS程序。BIOS程序在内存最开始的空间构建中断向量表和相应的服务程序,在后续POST过程中要用到中断调用等功能。然后通过通电自检POST(Power-on Self Tset),以检测硬件是否有故障。完成POST后,BIOS需要在硬盘、光驱或软驱等存储设备搜寻操作系统内核的位置以启动操作系统。
PS:可简记为①CPU加电、激活,CS:IP指向FFF0H;②执行JMP指令跳转到BIOS;③登记BIOS中断程序入口地址;④硬件自检;⑤进行操作系统引导
答:
(1)OS定义:OS是一组程序的集合,主要负责控制和管理计算机的硬件和软件资源、合理地对各类作业进行调度以方便用户使用计算机。
(2)OS的4个特征:并发、共享、虚拟、异步。①并发:一段时间间隔内多个进程或线程的并发执行,是宏观上的并行,微观上的串行。②共享:系统中的资源可供内存中多个并发执行的进程或者线程共同使用。③虚拟:通过某种技术将物理实体变为若干个逻辑上的对应物。④异步:进程以人们不可预知的速度向前推荐,每次运行只要环境相同,则结果必定一致。
(3)OS的5大功能:处理机管理、存储器管理、设备管理、文件管理、接口管理。①处理机管理:进程(线程)是处理机调度的单位,因此处理机管理实际上是对进程(线程)的管理。②存储器管理:主要包括内存的分配与回收、地址转换、虚拟内存的实现等。③设备管理:主要包括设备分配与回收、缓冲区管理、磁盘调度、设备虚拟等。④文件管理:主要包括文件存储空间的管理、目录管理、文件共享与保护等。⑤接口管理:主要包括用户接口、程序接口、命令接口和网络接口的管理等。
- 并发是指若干事件在同一时间间隔发生,并行是指若干事件在同一时刻发生。
- 广义指令就是系统调用(或者说系统调用指令)。其中系统调用包括①传参 ②trap指令(或仿管指令、陷入指令),该指令只在用户态执行,CPU进入核心态。 ③执行系统调用,在核心态下完成。④返回用户态,继续执行程序。广义指令只能在核心态执行。
- Shell是命令解析器,命令解析器属于命令接口。命令接口是面向用户的,在用户态执行。
- 系统中的缓存全部由操作系统管理,对用户是透明的,操作系统不提供管理系统缓存的系统调用。
- 系统开机后,操作系统的程序会被自动加载到内存中的系统区,这段区域是RAM。即操作系统最终会被加载到RAM中。
- 中断技术使得多道批处理系统的I/O设备可与CPU并行工作。
- 中断处理是操作系统必须提供的功能。
- 进程调度由调度算法决定CPU的使用权,由操作系统来实现,不需要硬件的支持。
- 中断处理的前三个步骤是由硬件直接实现的;地址映射需要基地址(或页表)寄存器和地址加法器的支持;时钟管理需要硬件计数器保持时钟的运行。
- 缺页处理和时钟中断都属于中断,在核心态执行。
- 进程调度是操作系统内核进程,无需用户干预,在核心态执行。
- 特权指令只能由操作系统使用,在核心态执行。
- 置时钟指令只能在核心态执行。读时钟、取数、寄存器清零都可以通过汇编,在用户态下完成。
- 中断程序本身可能使用户程序,也可能是OS程序,但是进入中断处理的程序一定属于OS程序,因为进入中断处理的程序时通过硬件来实现的。
- 子程序调用只保存程序断点,即该指令的下一条指令的地址;中断处理不仅要保存断点(程序计数器PC的内容,即地址),还要保存程序状态字寄存去PSWR(即当前使用户态还是核心态)的内容。在中断处理中最重要的两个寄存器使PC和PSWR。
- 中断服务程序属于操作系统内核。
- 微内核的缺点是系统效率低,因为微内核要频繁地在用户态和核心态之间切换,开销大。
- 只有操作系统的内核才常驻内存,操作系统地其他部分仅在需要时调入。
- 软件能实现地功能硬件也能实现,所以虚拟机既可以用软件实现,也可以用硬件实现。
答:前驱图是一个有向无环图DAG,它用于描述描述进程间执行的前后关系。
答:
(1)进程是一段可并发执行的具有独立功能的程序,是关于某个数据集的一次执行过程,也是OS进行资源分配和保护的基本单位。(进程是什么)
(2)在OS中引入进程,是为了实现多个程序的并发执行。传统的程序与其他程序并发执行时,执行结果是不可再现的,只有在创建了进程后才可以并发执行。这是因为传统的并发执行的程序是走走停停的,不具有保护现场,恢复现场的功能,所以在异步条件下传统程序的执行结果不可再现,只有引入进程的概念,才能在程序停下时,将其现场信息保存在它的PCB(进程控制块)中,待下次被调度执行时再从PCB中恢复现场而继续执行。(OS中为什么要引入进程)
(3)建立进程的好处是实现多个程序的并发执行,这极大提高了资源利用率和系统吞吐量。但管理进程也许要付出一定的空间和时间代价,包括PCB以及协调各运行机构所占用的内存空间开销,以及为进行进程间的切换、同步、与通信所付出的时间开销。(进程引入的优缺点/影响)
答:
(1)进程最基本的状态有3种:①运行态:进程占有处理机,正在运行。②就绪态:进程具备运行条件,等待系统分配处理机以便运行。③等待态(又称阻塞态或睡眠态):进程不具备运行条件,正在等待某个事件的完成。
(2)进程状态转换可能原因如下:①运行态—>等待态:正在运行的进程需要等待某资源或者某事件发生。②运行态—>就绪态:该进程时间片用完或者有更高级别的进程抢占了CPU。③等待态—>就绪态:处于等待的进程所需资源得到满足或者所需事件完成。④就绪态—>运行态:CPU空闲出来,准备就绪的进程被选中执行。
答:挂起状态实质上是一种静止状态。一个进程被挂起后,不管他是否处于就绪状态,系统都不会分配给他处理机。引入进程的挂起状态是因为:①终端用户的需要:用户在进程运行期间可能会因为某些原因希望暂停进程。②父进程请求的需要:父进程有时需要挂起某个子进程对其进行检查或修改,或者是为了协调各子进程的活动。③负荷调节的需要:当系统负荷过重、实时任务受到影响,需要挂起某些不常用进程来减轻系统压力。④OS的需要:OS有时需要挂起某个进程,对其进行检查或者统计系统中的资源使用情况。
答:进程由4个基本要素组成:即PCB、程序块、数据块、堆栈。它们的作用如下:
(1)PCB:用来存储进程的标志信息、现场信息和控制信息。进程创建时建立PCB,进程撤销时回收PCB,其与进程一一对应。
(2)程序块:即被执行程序。它规定了进程一次运行应事先的功能,通常是纯代码,其作为一种系统资源可以被多个进程共享。
(3)数据块:即程序运行时加工处理的对象,包括全局变量、局部变量、常量等的存储区以及开辟的工作区,常常为一个进程所专用。
(4)堆栈:每个进程都会被捆绑一个堆栈,用来存储进程的标志信息、现场信息和控制信息。
答:
(1)PCB主要用于描述进程的基本情况以及进程运行的变化过程,是进程存在的唯一标识。PCB的主要内容可以分为调度信息和现场信息两个部分:①调度信息描述了进程在被调用时进程的相关信息:比如进程名、进程号、存储信息、优先级、当前状态、资源清单、家族关系、消息队列指针和当前文件的打开情况等。②现场信息用于保留进程状态转换时需要保护或者恢复的CPU现场信息,以保证进程运行的结果的可再现性,这些现场信息一般有通用寄存器内容、控制寄存器内容、用户堆栈指针、系统堆栈指针等。
(2)OS需要使用/修改PCB的进程状态转换有两个,即"就绪—>运行"、“运行—>阻塞”。①进程从就绪态到运行态时,需要先通过修改PCB的队列指针,将其从就绪队列中移出,然后通过PCB中保存的现场信息恢复CPU现场并投入运行。(先出就绪队列,再恢复现场)②进程从运行态到就绪态,需要先保护现场,即将当前CPU现场信息保存到PCB中,然后将其放入PCB就绪队列中。(先保护现场,再放入就绪队列)
答:程序创建进程是为了能够并发执行;进程创建进程的典型事件有4类:用户登录、作业调度、提供服务、应用请求。
答:OS发现请求创建进程事件后,首先,调用进程创建原语;其次,申请一个空白PCB,并向该PCB中填写用于控制和管理进程的信息;然后,为该进程分配运行时所需要的资源;最后,把该进程的PCB转入就绪状态并插入就绪队列中。
PS:可简记为:调用创建原语—>申请PCB—>分配资源—>将PCB加入就绪队列。
答:引起进程的主要事件有:正常结束、异常结束、外界干预。①正常结束:指进程任务已经完成,准备退出运行。②异常结束:指进程在运行过程中发生了异常事件,使得程序无法继续运行。比如:越界错误、保护错误、指令非法、特权指令错误、运行超时、等待超时、算数运算错误、I/O故障等。③外界干预:指进程因外界请求而终止运行。比如:操作员干预、OS干预、父进程请求、因父进程终止等。
答:若出现终止事件,OS会调用进程终止原语,具体过程如下:
(1)寻找PCB:根据进程终止标识符,从PCB集中检索出指定进程的PCB,读出该进程的状态。
(2)修改PCB:若被终止进程处于运行态,则立即终止该进程的执行,将调度标志置为真,用于指示该进程被终止后应重新进行调度。
(3)终止子孙进程:若该进程存在子孙进程,则终止其所有子孙进程,以防它们成为不可控的进程。
(4)回收资源:将被终止进程所拥有的全部资源或者归还给父进程,或者归还成系统;
(5)PCB出队列:将被终止进程的PCB从所在队列或链表中移出,等待其他进程来搜集信息。
PS:可简记为:寻找PCB—>修改PCB—>终止该进程及子孙进程—>回收资源—>PCB出队列
答:引起进程阻塞或被唤醒的主要事件如下:
(1)请求资源失败:进程在向系统请求共享资源时,由于系统没有足够的资源分配给它,此时进程会因不能运行而变为阻塞态。
(2)等待某操作完成:当进程启动某种操作后,如果该进程必须在操作后才能执行,则应先阻塞进程。
(3)等待新数据到达:对于相互合作的进程,如果一个进程需要获得另一个进程提供的数据后才能处理该数据,但所需的数据尚未到达则进程进入阻塞态。
(4)等待新任务到达:在某些操作系统中,特别是网络环境下的OS中,往往会设置一定量的系统进程,这种进程每当完成任务后便会把自己阻塞起来,等待新任务到来。
PS:可简记为:请求资源失败、等操作、等数据、等任务。
答:低级通信工具实现的进程通信效率低,对用户不透明,所有操作都必须有程序员来实现;高级通信弥补可这些缺陷,用户可以直接利用OS提供的一组命令来高效地传送大量的数据。
答:高级通信机制可以归结为4类:共享存储器、管道通信、消息传递、客户机-服务器。具体如下:
(1)共享存储器系统通信机制:在共享存储器系统中,相互通信的进程共享某些数据结构或存储区,进程之间通过这些"空间"进行通信。
(2)管道通信系统通信机制:发送进程和接受进程通过管道进行通信。
(3)消息传递系统通信机制:进程不必借助任何共享通信存储区或数据结构,而是以格式化的消息为单位,将通信的数据结构封装在消息中,并利用OS提供的一组通信命令在进程间的笑西爨地,完成进程间的数据交换。
(4)客户机-服务器系统通信机制:在网络环境的各种应用领域,客户机-服务器系统的通信机制已经成为当前主流的通信实现机制。
答:在Linux、UNIX等系统中都可以使用管道文件实现进程间的相互通信。其优缺点如下:
(1)优点:可以在进程间不间断地传递大量信息,且无需占用用宝贵地内存空间。
(2)缺点:使用管道通信地进程之间地信息传递需要启动、读、写磁盘,相对于消息缓冲队列而言通信速度较慢。另外,接收进程和发送进程之间的同步也比较复杂,需要一定的时间开销。
答:可以从以下几个方面来比较直接通信方式和简介通信方式。
(1)原语种类:直接通信原语通常为send(receiver,message)、receive(sender,message);而间接原语通常为send(mailbox,message)、recieve(mailbox,message),而且它还需要有关信箱创建与撤销的原语。(send和receive原语的参数不同,且间接通信还需要信箱的创建和撤销原语)
(2)标识符种类:直接通信中,双方以显式地提供对方的标识符,而间接通信需要提供的是信箱的标识符。
(3)通信链路方面:直接通信的通信链路的建立由系统自动完成,通信双方间有且仅有一条通信链路,进程只需要提供对方的标识符就可以进行通信。间接通信中,仅当两个进程共享某个信箱时,它们之间才有通信链路,但是可以有多条链路。
(4)实时性方面:直接通信方式一般只能提供实时通信,间接通信则是实时和非实时通信都可以实现。
答:线程的引入是为了减少进程在并发执行时的时空开销,进一步提高OS的并发性和CPU利用率。进程是分配资源的基本单位,而线程是进程调度的基本单位。由于进程是资源的拥有者,因此在其创建、撤销、切换操作中需要较大的时空开销,从而限制了进程并发性的进一步提高。为了减少进程切换的开销,通常把资源和调度这两个属性进行分靠处理,即进程负责管理资源(很少进行调度、切换),把调度、切换的任务交给线程。由此提高了系统的并发度,还能使系统适应新的对称多处理机环境,充分发挥其性能。
答:线程是一个轻型实体,是可独立调度和分派的基本单位;线程可以并发执行,同时共享进程所属的进程资源。
答:
(1)用户级线程是仅存在于用户空间中的线程,无需内核支持。这种线程的创建与撤销线程间的同步与通信等功能,都无需利用系统调用来实现。用户及线程的切换通常产生在一个应用进程的诸多线程之间,同样无需内核支持。
(2)内核支持线程是在内核支持下运行的线程。无论是用户进程中的线程。还是系统中的线程,它们的创建、撤销和切换等操作都是依靠内核、在内核空间中实现的。在内核中间中还为每个内核支持线程设置了TCB,内核根据该TCB感知某线程的存在并对其实施控制。
答:内核支持线程是在内核支持下实现的,即每个线程的TCB均设置在内核中,对所有线程的操作都是通过系统调用有内核中相应的处理程序来完成的。而用户及线程仅存在于用户空间之中,即每个线程的TCB均设置在用户控件中,所有对线程的操作也在用户空间中完成,而无需内核帮助。具体可以从以下几个方面进行比较:
(1)是否需要OS内核支持。用户即线程可以在一个不支持线程的OS中实现,而内核支持线程需要得到OS内核的支持,因为必须在支持线程的OS中实现。
(2)处理机分配。多处理机环境中,对纯粹的用户级线程来说,内核只为一个进程分配一个处理机,及进程无法想用多处理带来的好处;而当设置有内核支持线程时,内核可以为一个线程分配一个处理机,使得多个线程可以同时运行在多个处理机上面,从而提高了程序的执行速度和效率。
(3)调度和线程执行时间。对设置有内核支持线程的系统,内核的调度方式和调度算法与进程十分相似,但是调度的单位是线程;对于仅设置了用户级线程的系统,内核调度的单位为进程,当进程获得CPU时,隶属于该进程的多个线程可通过用户态下的线程调度分享有内核分配给进程的CPU执行事件。因此在相同条件下,内核支持线程通常会得到比用户级线程更多的执行时间。
(4)切换速度。用户级线程的切换通常发生在一个应用程序的各个线程之间。由于无需陷入内核,因为切换的规则相当简单,切换的速度也比内核支持线程少了至少一个数量级。
(5)系统调用。在OS中国,许多系统调用都会引起阻塞,当一个用户级线程执行这些系统调用的时候,整个用户进程都会被阻塞;而当一个内核支持线程执行这些系统调用时,则仅阻塞该线程,该进程的其他线程仍可继续执行。
答:
(1)用户级线程在用户空间中实现,运行在"运行时系统"与"内核控制线程"的中间系统上。运行时系统是用于管理和控制线程函数的集合。内核控制线程可以通过系统调用获得内核提供的服务,将轻型进程(light weight process ,LWP)作为中间系统。
(2)在设置了内核支持线程的OS中,系统创建新进程时,会为其分配一个任务数据区(per task data area,PTDA),其中包括若干个TCB空间。每次创建一个线程,都为其分配一个TCB,将线程有关的而信息写入TCB,并为线程分配必要的资源。当任务数据区的TCB用完而进程又有新的线程时,只要所创建的线程数目未超过系统允许值,系统即可在位置分配新的TCB。在撤销一个线程时,也应收回该线程所有的资源和TCB。
答:
(1)调度:线程时OS中调度和分派的基本单位,具有唯一标识符和TCB。线程的线程几乎不占有资源,因此线程调度的时空开销很小;进程具有独立的虚地址空间,所以进程调度必须切换地址空间,且进程占有系统资源,因此线程调度的时空开销很大。
(2)并发:引入线程后,OS并发性进一步提高,尤其在内核级支持线程中,同一进程的不同进程可以同时使用不用的处理器,并行执行。对于不含线程的传统进程,一个进程只能占用一个处理器,且因为进程同时占有系统资源,相对线程来说过于庞大,因此进程的数量也受到严格的限制,并发性因此也受到限制。
(3)拥有资源:对线程而言,同一个进程的所有线程可以共享所有被进程的状态和资源,但是不能拥有资源。这些线程都驻留在进程的同一个内存地址的空间中,可以访问相同的数据,大大方便通信和同步。对进程而言,进程是系统资源分配和保护的基本单位,占有独立的地址空间和系统资源。
(4)系统开销:对线程而言,由于线程不占有过多资源,且同一进程的不同线程共享同一地址空间,因此线程的切换十分方便,每次切换调度线程所带来的系统开销也相对较小。对进程而言,在进行进程创建、调度、终止时需要保护现场、恢复现场、保护资源,因此系统开销很大。
(1)为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构?
答:进程控制块PCB、相关队列(就绪队列、等待队列等)
(2)为支持进程状态的变迁,系统至少提供哪些进程控制原语?
答:创建原语、阻塞原语、、唤醒原语、撤销原语。
(3)在执行每一个进程控制原语时,进程状态会发生什么变化?相应的数据结构会发生哪些变化?
答:进程状态改变有4种情况:①创建原语:系统为进程创建PCB,并对它进行初始化。进程状态由无变为就绪态,新创建的进程被加入就绪队列。②阻塞原语:进程状态由运行态变为阻塞态,同时将相应进程的PCB插入阻塞队列。③唤醒原语:进程状态从阻塞状态变为就绪态,从阻塞队列种删除该进程。并将其插入就绪队列中。④撤销原于:进程状态从运行态变为消亡状态,系统撤销该进程的PCB并回收资源。
C语言编写的程序在使用内存时一般分为三个段:正文段(即代码和赋值数据段)、数据堆段和数据栈堆栈。其中二进制代码和常量存放在正文段,动态分配的存储区在数据堆段,临时使用的变量在数据栈段。
由此,我们可以确定全局赋值变量在正文段(赋值数据段),未赋值的局部变量和实参在数据栈段,动态内存分配在对端,常量在正文段,进程的优先级只能在PCB内。
- 进程映像就是进程,是PCB、程序段和数据的组合,其中PCB是进程存在的唯一标识。
- 动态性是进程最重要的特性,以此来区分文件形式的静态程序。
- 对于存在进程的单线程系统,未必一定有一个进程会占用处理机处于运行态,因为处理机可能发生死锁。
- 进程是资源分配的基本单位,内核级线程是资源(或处理机)调度和分派的基本单位。PS:进程是分配,线程是分派,注意二者的区别。
- "A对B的线程模型"一般指的是用户级线程(A)和内核支持线程(B)
- 进程是程序在一个数据集上的一次运行过程。若运行于不同的数据集,则会产生不同的进程。
- 程序代码经过多次创建会产生不同的进程,这些进程可以调用系统中的同一个线程。
- PCB中的信息主要包括,进程的标志、控制、资源信息以及CPU现场信息。全局变量属于代码段,不属于PCB信息。
- 只有运行态到阻塞态是由进程自身(进程自身需要资源、事件等)决定的。
- 对于键盘而言,因为键盘输入是由人来完成的,速度很慢,因此完全可以使用一个线程来处理整个系统的键盘输入。
- 不同的进程拥有不同的代码段和数据段,全局变量是对同一进程而言的,在不同的进程中是不同的变量,没有任何联系,因此不能用于交换数据。
- 进程由运行态到就绪态,一般都是因为:①时间片用完 ②优先级更高的进程抢占CPU。
- 进程切换是指CPU调度不同的进程执行。
- 内核参与≠内核支持。对于跨进程的用户线程调度必须要内核参与(从内核来看,就是一次进程调度)
- 用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等。所有用户进程都会在该进程下创建和管理。
- 设备分配时通过在系统中设置相应的数据结构实现的,不需要创建进程。这是I/O核心子系统的内容。
- 启动程序执行是引起创建进程的典型事件。
- 属于线程的栈指针是独享的,对其他线程是透明。
- 管道是一种固定大小的缓冲区,管道的大小通常为内存的一页,其大小并不是受磁盘容量大小的限制。
- 一个普通的管道只允许单向通信,若要实现父子进程双向通信,则需要定义两个管道,而每个管道向不同的方向发送数据。
- 父进程创建一个管道后,由于管道是一种特殊的文件,因此所有子进程也会继承父进程的管道,并使用它来与父进程进行通信。
- 管道可以一边读,一遍写(存疑)
- 管道是用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件。
答:
(1)
①高级调度的对象是作业。他的主要任务是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为他们创建进程,分配必要的资源,并将它们放入就绪队列。
②低级调度的对象是进程(或内核级线程)。它的主要任务是根据某种算法,决定就绪队列中的哪个进程获得处理机,并由分派程序将处理机分配给选中的进程。
(2)引入中级调度的主要目的是提高内存利用率和系统吞吐量。为此,应把哪些暂时不能运行的进程调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。当他们已具备运行条件且内存又有空间时,由中级调度来决定把外存上的那些已经具备运行条件的就绪程序再重新调入内存,并修改它们的状态为就绪态,挂再就绪队列上等待。
答:
(1)作业包含通常所说的程序和数据,还配有作业说明书。系统根据该说明书与对程序的运行进行控制。批处理系统中是以作业为基本单位,将其从外存调入内存的。
(2)JCB是作业再系统中存在的标志。为了管理和调度作业,为每个作业设置一个JCB,用户记录管理和调度作业所需的全部信息。
答:
(1)当一个作业进入系统时,便由"作业注册"程序为改作业建立一个JCB,再根据作业类型,将其插入相应的后备队列中等待调度。调度程序根据一定的调度算法来调度它们,被调度的作业将被装入内存。在作业运行期间,系统会按照JCB中的信息和作业说明书来对作业进行控制。当一个作业执行结束并进入完成状态时,系统负责收回已分配给他的资源,并撤销其JCB。
(2)JCB包含的内容通常有作业标志、用户名称、用户账户、作业类型(CPU繁忙型、I/O繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业已运行)、资源请求、入系统时间、开始处理事件、作业完成时间、作业推出时间、资源使用情况等。
答:作业调度每次接纳进入内存的作业数取决于多道程序度,即取决于系统允许多少个作业同时在内存中运行。应选择哪些作业从外存调入内存,取决于所采用的作业调度算法,最简单的时FCFS调度算法,比较常用的时SJF(short job first,短作业优先)调度算法和基于优先级的调度算法。
答低级调度时在就绪队列中选择某个进程,有分派程序把CPU分配给该进程。低级调度的主要功能有:①保存当前进程的CPU现场信息;②按某种算法选择投入执行的新进程;③恢复新进程的CPU现场。从而将CPU分配给新进程。
答:引起进程调度的常见原因有:①正在执行的进程正常终止或异常终止;②正在执行的进程因某种原因而阻塞,如I/O请求后被阻塞、在调用wait操作时因资源不足而阻塞、因其他原因执行block原语而阻塞等;③在引入时间片的系统中,时间片用完;④在抢占式调度方式中,就绪队列中某进程的优先级比当前正在执行进程的高,或者有优先级更高的进程进入就绪队列。
PS:可简记为:异常终止、进程阻塞、时间片用完、被抢占。
答:抢占原则主要三个:优先级、短进程优先、时间片原则。其中①优先级原则,指高优先级高的先到进程抢占进程的处理机;②短进程优先原则:指允许新到的短进程抢占当前长进程的处理机;③时间片原则,即各进程按时间片轮转运行时,当正在执行的一个时间片用完后,便停止该进程的执行而重新调度。
答:一般而言,在设计一个OS时,应如何选择调度方式和调度算法,很大程度上取决于OS的类型及其设计目标。在批处理系统、分时系统和实时系统中,通常会采用不同的调度方式和调度算法。遵循的准则包括:①处理机调度算法的共同目标:即资源利用率高、保证公平性与平衡性以及策略强制执行;②批处理系统的目标,即平均周转时间短、系统吞吐量大、处理机利用率高;③分时系统的目标,即响应时间快、保证均衡性;④实时系统的目标,即保证截至时间和可预测性。
答:
(1)①静态优先级是指在创建进程时确定的、在进程的整个运行期间保持不变的优先级。②动态优先级是指在创建进程指出,先赋予进程一个优先级,然后其☞会随着进程的推进或者等待时间的增加而改变,以便获取更好的调度性能。
(2)确定进程优先级的依据有进程类型、进程对资源的需求和用户要求等。
答:
(1)相同点:这两种调度算法都可以用于作业调度和进程调度。
(2)不同点:FCFS调度算法每次都从后备队列中选择一个或多个最先进入该队列的作业,将它们调入内存、分配资源、创建资源、插入就绪队列。该算法有利于长作业/长进程,不利于短作业/短进程。SJF调度算法每次调度都从后备队列中选择一个或多个估计运行时间最短的作业,将其调用内存运行。该算法有利于作业/短进程,不利于长作业/长进程。
答:在RR调度算法中,时间片大小对系统性能有很大的影响。通常,时间片应略大于一次典型的交互所需的时间,使大多数交互式进程能在一个时间片内完成,从而获得很小的响应时间。在确定时间片的大小时,一般考虑三个因素:系统对相应时间的要求、就绪队列中进程的数目和系统的处理能力。
答:
(1)对终端型作业作业用户,其所提交地作业大都属于较小地交互型作业,系统只要使这些作业在低1队列规定地时间片内完成,终端队列就会得到满足。
(2)对于短批处理作业用户,如果作业在第1队列中执行一个时间片即可完成,便可获得与终端作业一样地相应时间。对于稍长批处理用户,其作业通常只需要在第2梯队和第3梯队各执行一个时间片即可完成,周转时间仍然较短。
(3)对于长批处理作业用户,将其一次在第1,2…,n各队列中运行,然后再按轮转方式运行,用户不必担心其作业长期得不到处理。
因此多级反馈队列调度算法能较好地满足各方面用户的需要。
PS:所谓的多级反馈队列就是设置多个队列梯队,每个队列内时间片大小各不相同,作业从最小的时间片队列开始执行,执行不完换更大的时间片队列,以此类推,直到执行结束。
答:在实时系统中都存在若干各实时进程或任务,它们用来反映或控制某些外部事件,往往带有某种程度的紧迫性,因而对实时系统中的调度提出了某些特殊要求。若CPU的处理能力不够强,则有可能会因CPU忙不过来而使某些实时任务得不到及时处理。
答:按调度方式分,调度算法可以分为两种:抢占式调度算法和非抢占式调度算法。
(1)非抢占式调度算法,包括非抢占式RR调度算法和非抢占式优先级调度算法。
(2)抢占式调度算法,根据抢占时机的不同分为基于时钟中断的抢占式优先级调度算法和立即抢占式的优先级调度算法。
答:实时系统的调度算法主要是基于任务开始/截止时间的EDF(earliest deadline first,最早截止时间优先)调度算法,以及基于任务紧急/松弛程度的LLF(least laxity first,最低松弛度优先)调度算法。
(1)EDF调度算法。该算法使根据任务的开始/截止时间确定任务的优先级的,截止时间越早则优先级越高。算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间先后顺序进行排序。
(2)LLF调度算法。该算法使根据任务的紧急/松弛程度确定任务的优先级的。任务的紧急程度越高,赋予该任务的优先级就越高,以使其优先执行。PS:松弛度一般可以用最晚开始时间来衡量。
答:
(1)批处理系统可采用的调度算法有SJF、优先级、高相应比优先、多级反馈队列等调度算法。
(2)分时系统中常用的调度算法是RR调度算法。
(3)实时系统中可采用的调度算法有EDF和LLF算法。
答:
(1)死锁是指多个进程在运行过程中因争夺资源而照成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法向前推进。
(2)产生死锁的原因有:①竞争不可抢占性资源;②竞争可消耗资源;③进程间推进顺序不当。
产生死锁的4个必要条件:互斥条件、请求和保持、不可抢占条件、循环等待条件。
(3)死锁预防是通过破坏产生死锁的4个必要条件的一个或多个来实现的。其中互斥条件时社内固有属性,不能改变。因此主要破坏产生死锁的其他3个必要条件。①破坏"请求和保持条件"。当一个进程在请求资源时,他不能持有不可抢占性资源。②破坏"不可抢占条件"。当一个已经保持了某些不可抢占行的资源提出新的资源请求不能满足时,释放其所有及资源,待以后重新申请。③破坏"循环等待"条件。对系统所有资源类型计兴先行排序,并赋予它们的不同序号,规定每个进程必须按序号递增的方式请求资源。
18.在解决死锁问题的几个方法中,哪个方法是最易于实现的?哪各方法可使资源利用率最高?
答:解决死锁的方法有死锁预防、死锁避免、死锁检测和接触,其中预防死锁是最容易实现的,但由于所施加的限制条件过于严格,资源利用率和系统吞吐量会降低;而死锁的检测和接触这一方法可以使得系统获得较好的资源利用率和系统吞吐量。
- CPU繁忙型作业是指该类作业需要占用很长的CPU时间,而很少请求I/O操作,因此CPU繁忙型作业类似于长作业,比较适合采用FCFS算法进行调度。
- I/O繁忙型作业是指作业执行时需要频繁请求I/O操作,即可能频繁放弃CPU,所以CPU占用时间不会太长,一旦放弃CPU,必须重新排队等待调度,比较适合采用SJF算法进行调度。
- 时间片轮转算法对于短作业和长作业的时间片都一样,所以地位几乎也一样。
- 优先级算法中,I/O繁忙型作业要由于计算繁忙型作业,系统进程的优先权应高于用户进程的优先权。
- 作业是从用户角度出发的,它由用户提交,以用户任务为单位,进程是从操作系统出发的,由系统生成,是操作系统资源分配和独立运行的基本单位。
- 分时系统中,响应时间与时间片和用户数成正比。
- 中断向量本身是用于存放中断服务例行程序的入口地址,因此中断向量地址就应该是入口地址的地址。
- 中断由硬件保护完成,主要是为了保证系统运行可靠、正确。提高处理速度确实也是一个好处,但并不是主要 目的。
- 当进程处于临界区时,OS依然可以进行处理机调度。
- 对于优先级调度算法,一般来说,I/O型作业的优先权高于计算型作业的优先权,这是由于I/O操作需要及时完成, 它没有办法长时间地保存所要输入/输出的数据,所以考虑到系统资源利用率,要使得I/O繁忙型作业有更高的优先级。
答:
(1)临界资源定义:一次仅允许一个进程使用的资源称为临界资源,如打印机和一些共享变量等。
(2)临界区定义:进程中访问临界资源的那段代码称为临界区。
答:同步机制应遵循的准则有4个。
(1)空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入临界区,以有效地利用临界资源。
(2)忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因为其他试图进入临界区地的进程必须等待,以保证对临界区的资源的互斥访问。
(3)有限等待。对要求访问临界资源的进程,应该保证其能在有限的时间内进入临界区,以免出现死等的状态。
(4)让权等待。当进程不进入临界区时,其应立即释放处理机,以免进程陷入忙等。
答:临界资源本身的特性决定了它们只能被各个进程互斥地访问,如果并发执行地多个进程同时访问临界资源,则会造成系统混乱或程序执行结果不确定,即程序出现不可再现性。这样进程的执行就可能不正确或者不确定。
答:为了互斥地访问临界资源,系统必须保证进程互斥地进入临界区。为此,必须在临界区前增加一段进入区代码,以检查是否有其他进程已进入临界区而在使用临界资源。若有,则进程必须等待;否则,允许进程进入临界区,同时设置表只以表示有进程正在使用临界资源。同样地,在临界区后必须增加一段退出去代码,用于将已有进程进入临界区访问临界资源的标志改为无进程进入临界区使用临界资源。进入区和退出区可以用多种同步机制实现,如锁、信号量机制等。
答:
(1)忙等就是不让权的等待,即进程因某事件的发生而无法继续执行时,它仍占用CPU,并通过不断地循环执行测试指令来等待时间地完成。
(2)忙等地主要缺点时浪费CPU时间,另外,它还可能会引起预料不到地后果。例如,考虑某个采取高优先级优先调度原则地系统,且当前有两个进程A和B共享某个临界资源,A的优先级比B高,但是B在A之前先进入了CPU,获得了临界资源使用权,占用了临界资源,此时因为A会抢占CPU,但是无法获取临界资源,B占有临界资源但是无法获取CPU,所以二者都无法继续向前推进,进而陷入死等状态。
答:Perterson算法中Pi和Pj两个进程共享turn和flag两个变量。turn=i表示进程Pi可以进入临界区,flag[i]=true表示Pi准备进入临界区。因此,可能会存在以下几种请求情况。
(1)当Pi在临界区时,若Pj请求进入临界区,则flag[i]=true,flag[j]=true,turn=i,则Pj的while语句的循环条件flag[i]&&turn==i为true,此时Pj会循环执行while语句,进入忙等状态而无法进入临界区,满足忙则等待。
(2)如果当前临界区空闲,但Pi请求进入,而Pj未请求,此时flag[i]=true,flag[j]=false,turn=j,此时Pi的while语句的循环条件为false,则Pi可以进入临界区执行。满足空闲让进。
(3)如果当前临界区空闲,两个进程都要进入临界区,即flag[i]=true flag[j]=true turn的值只能取一个不能取两个,即只能有一个进程进入临界区。当一个进程退出临界区后,另一个进程即可进入临界区,满足有限等待。
答:解决进程互斥问题可采用的硬件方法主要有下列3种。
(1)关中断。将临界区放在关中断与开中断之间,关中断后不允许当前进程被中断,因此进程在临界区执行期间都不允许被中断,不能发生进程切换;进程访问完临界区后,在执行开中断指令,此时其他进程才能获得处理机并访问临界区,进而有效保证进程互斥。
(2)Test-and-Set,简称TS指令或TSL指令。该指令是一条硬件指令,指令执行过程中不允许被中断,即TS是把“上锁”和“检查”操作用硬件的方式变成了一气呵成的原子操作。指令执行过程为:①为每个临界区资源设置一个布尔变量lock,表示当前临界区是否加锁;②进程进入临界区前,首先用TS指令测试lock,若其值为flase,则表示没有进程在临界区内,while循环条件不满足,进入临界区,并将true值赋给lock,即关闭临界区;③任何其他进程再利用TS指令测试lock,while都会一直循环,直到当前访问临界区的进程再退出区进行“解锁”,从而实现了进程互斥。
(3)Swap指令。该指令用硬件实现,执行过程不允许中断。其用法是为了每个临界资源设置一个全局布尔变量lock,初值为false,在每个进程中再利用一个局部布尔变量key,使用Swap指令与lock进行数值交换,循环判断lock的指。只有当key为false时,进程才可进入临界区进行操作。从逻辑上看,Swap指令和TS指令并无太大区别,都是先记录下此时临界区是否已经被上锁,再将上锁标记lock设置为true,最后检查局部布尔变量key,如果key为false,则说明之前没有别的进程对临界区上锁,此时可以跳出循环,进入临界区。
答:例如:利用P、V操作实现A、B进程对临界资源的互斥使用,代码如下:
semaphore S=1;//信号量
A(){
while(1){
P(s);
临界区;
V(s);
剩余区;
}
}
B(){
while(1){
P(s);
临界区;
V(s);
剩余区;
}
}
若P、V操作不被设计成原语,则执行P、V操作时进程可以被中断。A、B并发执行,初始状态下,临界资源空闲,应该允许第一个申请临界资源的进程(假设为A进程)进入临界资源区使用临界资源。但如果A执行到P操作S.value–后S.value变为0,此时被B中断,B执行S.value–后S.value=-1,此时B被阻塞,但是因为此时S.value<0所以A也无法继续执行,进而被阻塞。这样就照成了,在存在临界资源空闲的情况下,请求进临界区的A和B都无法进入临界区,无法满足“空闲让进”的要求。同样的,如果被中断的是V操作,或则一个V操作被中断,一个P操作被中断,这样都会照成信号量混乱,程序的运行便具有了不可再现的特点,进程的同步就难以实现。因此,P、V操作必须设计成原语的方式。
答:
(1)AND信号量机制的基本思想时将进程在整个运行过程中所需要的所有临界资源一次性全部分配给进程,待该进程完成后再一起释放。也就是说,对若干个临界资源的分配采取原子操作的方式,要么全部分配给进程,要么一个也不分配。
(2)AND信号量能解决的问题是预防死锁的发生,因为该方法在资源分配的过程中破坏产生的死锁必要条件的“请求和保持”条件。
答:利用信号量实现进程互斥时,对互斥信号量mutex的wait操作和signal操作必须成对出现,这是因为:
(1)若缺少wait(mutex),将导致系统混乱,不能保证进程对临界资源的互斥访问。
(2)若缺少signal(mutex)则将会使临界资源永远不被释放,从而使因等待该资源而阻塞的进程无法被唤醒。
答:
(1)管程定义:管程是由代表共享资源的数据结构以及由对共享数据结构实时操作的一组过程所组成的资源管理程序共同构成的一个OS管理模块。
(2)管程是一种程序设计语言结构成分,从语言的角度来看,管程主要有以下特性:①模块化。管程是一个基本程序单位,可以单独编译;②抽象数据类型。管程不仅有数据,而且有对数据的操作;③信息掩蔽,管程中的数据结构只能被管程中的过程访问,这些过程在管程内部被定义,供管程外的进程调用,而管程中的数据结构以及过程函数的具体实现在外部是不可见的。
答:
(1)条件变量是管程中的一种数据结构,且只有在管程中才能被访问,它对管程内所有的过程而言是全局变量,只能通过两个原语操作来控制它:①x.wait()原语。调用进程阻塞并移入与条件变量x相关的队列中,释放管程,直到另一个进程在该条件变量x上执行x.signal()唤醒等待进程,并将其移出条件变量x的队列。②x.signal()原语。如果存在其他进程对于条件变量x执行wait操作而阻塞,则将释放之,如果没有进程被等待,则信号被丢弃。
(2)条件变量是一种信号量,起到了维护等待进程队列的作用。当管程中的进程被阻塞或挂起而不能运行时,如果该进程不如果不释放管程,则其他进程就无法进入管程,此时就需要条件变量来进行控制。
- 信号量机制是一种工具,用于实现进程的同步和互斥。
- 进程的并发执行不需要信号量来控制。
- 信号量是一个特殊的整型变量,只有初始化和PV操作才能改变其值。
- 信号量有互斥量和资源量两种。
- 互斥量初值一般为1,表示临界区只允许一个进程进入,从而实现互斥。
- 互斥量=0,表示有一个进程进入临界区,临界区外尚无进程等待。
- 互斥量<0,表示临界区有进程进入,互斥量的绝对值即临界区外等待进入的进程数量。
- 资源信号量可以是任意整数,表示可用的资源数,当资源量<0表示所有资源用完,其绝对值为正在等待使用资源的进程数量。
- 临界资源一定是共享资源,要求互斥使用,非共享资源不是临界资源。
- 公共队列也是一种临界资源。
- 与互斥信号量=1(初值)不同,用P\V操作实现进程同步时,信号量的初始值应该具体情况具体分析。
- 可重入代码,又称纯代码,是允许对各进程同时访问的代码,但是不允许修改。
- 共享程序段可能同时被对各进程使用,所以必须使用可重入代码,负责无法实现共享的功能。
- 管程由三部分组成:局限于管程的共享变量数目,对管程内的数据结构进行操作的一组过程及对局限于管程的数据设置初始语句组成。注意,这些都是在管程之内的(局限于管程)。
- 管程的signal操作与信号量机制中的V操作不同,信号量机制中的V操作一定会改变信号量的值S=S+1。而管程中的signal操作是针对某个条件变量的,如不存在因该条件而阻塞的进程,则signal不会产生任何影响。
- 记录型信号量机制是一种不存在“忙等”现象的进程同步机制。
- 记录型信号量除了需要一个用于代表资源数目的整型变量value外,还要再增加一个进程链表L,用于链接所有等待该资源的进程。
即typdedf struct{ int value; strcut process *L }semaphore;
- 对于记录型信号量S.value
①S.value>0,表示某类可用资源的数量。每次P操作,意味着请求分配一个单位的资源。
②S.value<=0 ,表示某类资源已经没有,或者是还有因请求该资源而被阻塞的进程,S.value的绝对值表示等待进程的数目。- 银行家算法是用来避免死锁的算法。
- 临界区是进程中的一段代码段,是用来访问临界资源的。
- 条件变量是管程内部说明和使用的一种特殊变量,其作用类似于信号量机制的信号量,都用于实现进程同步。
- 同一时刻,管程中只能有一个进程在执行。
- 对于管程中的进程A,若执行了x.wait()操作,该进程会阻塞,并挂到条件变量x对应的阻塞队列上。
- 硬件方法实现进程同步时不能实现让权等待。
- Peterson算法满足有限等待,但不满足让权等待。
- 记录型信号量引入了阻塞机制,因此可以实现让权等待。
答:良好的存储器环境应包含:
①让每道程序各得其所,在不受干扰的环境中运行,还可以使得用户从存储空间的分配、保护等繁琐事务中解脱出来;
②向用户提供更大的存储空间,从而使更多的作业同时运行,或使得更大的作业能在较小的内存空间中运行;
③为用户在信息的访问、保护、共享以及动态链接等方面提供方便;
④使存储器有较高的利用率;
答:内存保护的主要任务,使确保每道程序都只能在自己的内存区中运行。这要求系统能对每条指令锁访问的地址是否超出自己内存区的范围进行越界检查,一旦发生越界,系统应能立即发出越界中断请求,抛弃该指令。若此检查完全用软件实现,则每次执行一条指令,都需要增加若干挑指令区执行越界检查,这大大降低了程序的执行速度。因此越界检查通常由硬件实现,以使指令能够与越界检查并行执行,从而不降低程序执行的速度。当然,越界后的处理仍需由软件配合完成。因此,内存保护是由硬件和软件协同完成的。
答:
(1)重定位定义:将用户程序的相对地址(逻辑地址)转换为绝对地址(物理地址)的过程,称之为重定位。
(2)使用重定位原因:在多道程序环境下,多个目标快的起始地址通常是0,程序中的其他地址都是相对0这一个起始地址而言的。采用重定位,可以根据内存的当前地址使用情况,将装入模块装入内存的适当位置。并确定装入的物理地址,以保证程序运行时取指令或数据地址的正确性。
答:动态重定位的实现必须有硬件地址转换机构的支持,其具体实现方式主要有以下2种。
(1)连续分配方式下的动态重定位。该方式须在整个系统种设置一个重定位寄存器,用来存放正在执行的作业在内存种的起始地址。当CPU要存取指令或数据时,硬件地址转换机构会自动将逻辑地址与重定位寄存器的值相加,形成指令或数据的物理地址。
(2)离散分配方式下的动态重定位。离散分配方式主要是指分页和分段存储管理方式。其重定位过程为:
① 系统首先必须为每个作业配置一张页(段)表,用来记录作业的每个页(段)对应的内存块号(内存起始地址和段长),页(段)表被存放在内存中。
②整个系统设置一个页(段)表控制寄存器,用来存放正在执行的作业的页(段)表起始地址和长度;
③当CPU要存取指令或数据时,硬件的地址转换机构会自动将逻辑地址分成页号和页内地址两部分(或者直接从逻辑地址中获得段号),根据页(段)号到控制寄存器所指示的页(段)表中获得对应的物理块号(或短的内存起始地址),并与页(段)的地址相加,最终形成物理地址。
答:将程序装入内存可采用的方式有:绝对装入方式、重定位装入方式、动态运行时装入方式。绝对装入方式是用于单道程序环境中,重定位装入和动态运行时装入是用于多道程序环境中。
答:
(1)静态链接定义:指在程序运行之前,先将各目标模块以及它们所需的库函数链接成一个完整的装入模块,以后再不拆开的连接方式,即静态链接。
(2)静态链接中,将几个目标模块链接成一个装入模块时,须解决以下2个问题。
① 修改相对地址,即将除第一个模块外的相对地址修改成装入模块中相应的相对地址。
② 变换外部调用符号,即将每个模块中所用的外部调用符号变换为相对地址。
PS:“外部符号”是在一个对象文件中引用,但在不同的库或对象文件中定义的符号。比如头文件、库函数之类的
答:
链接是指由链接程序将编译后形成的一组目标以及所需库函数链接再一起,进而形成一个完整的装入模块。链接程序按各个模块的相对地址依次构成统一的0号单元开始编址的逻辑地址空间。
链接主要有3种类型:静态链接,装入时动态链接,运行时动态链接。各类型优缺点如下。
(1) 静态链接:指在程序运行之前,先将各目标模块以及它们所需的库函数链接成一个完整的装入模块,以后再不拆开的连接方式,即静态链接。
优点:适用范围广,无需担心用户机器再运行时缺少某个库函数。
缺点:①修改或更新某个目标模块时需要重新打开装入模块,这不仅涉及效率问题,而且再很多时候甚至是不可能实现的。②静态链接中,每个模块必定含有目标模块的复制。无法实现共享。(2)装入时动态链接:将用户程序编译后所得的一组目标模块,采用边装入边链接的方式装入内存,即运行时动态链接。
优点:①便于修改和更新,针对动态链接方式,由于各目标是分开存放的,因此非常容易修改或更新各目标模块;②便于实现对目标模块的共享,针对装入时链接方式,很容易将一个目标模块链接到几个应用模块上,从而实现多个应用模块对目标模块的共享。
缺点:由于应用程序无法事先确定本次要运行的模块,因此该程序的所有模块都要全部装入内存,并再装入时链接到一起。有些部分目标模块不会被运行,但也要装入,低效且浪费空间。
(3)运行时动态链接:将某些目标模块的链接推迟到程序执行时才能进行装入,即运行时动态链接。
优点:该方式下,运行过程中未用到的目标模块都不会被调入内存和链接,这样不仅能加快程序的装入过程,而且可以大大节省内存空间。
8.为什么要引入对换?对换可分为哪几种类型?
答:
(1)引入对换的原因:在多道程序环境下,一方面,在内存中的某些进程会因某事件尚未发生而阻塞,但此时它占用了大量的内存空间,这样,内存中的所有进程都有可能被阻塞,进而发生迫使CPU停止运行下来等待的情况;另一方面,有许多作业因内存空间不足会一直驻留在外存上,而不能进入内存而运行。这不仅浪费系统资源,而且会降低系统吞吐量。为了解决这一问题,在OS中引入了对换(又称交换)技术。
(2)对换可分为整体对换和部分对换两种类型。整体对换是将整个进程换入/换出,主要用于缓解当前系统内存不足这一情况。部分对换是将进程的一部分(段、页)换入/换出,主要用于实现虚拟存储器。
答:对文件区管理何对对换空间管理的目标分别为:①对文件区管理的主要目标是提高文件存储空间的利用率,然后才是提高对文件的访问速度,因此,对文件区管理采取的是离散分配的方式;②对对换空间管理的主要目标是提高进程换出/换入的速度,然后才是提高文件存储空间的利用率,因此,对对换空间采取的是连续分配的方式,较少考虑外存中的碎片问题。
答:①对于分页系统,每个页面时分散存储的,为了实现信息的共享与保护,页面之间需要一一对应起来,为此需要建立大量的页表项。②对于分段系统,每个段都从0开始编址,并采用一段连续的地址空间,这样在实现信心共享与保护时,只需为要共享与保护的程序设置一个段表项,将其中的起始地址与内存一一对应起来即可。
11.提高内存利用率的途径主要有哪些?
答:内存利用率不高,主要表现为4中形式:①内存中存在大量的、分散的、难以利用的碎片;②暂时或长期不能运行的程序或数据占据了大量的存储空间;③当作业较大时,内存中只能装入少量作业,当它们被阻塞时,将使CPU空闲,从而降低了内存的利用率;④内存中存在着重复的复制。
针对上诉问题,可采用下述方法提高内存的利用率:①将连续分配方式改为离散分配方式,以减少内存中的碎片;②增加对换机制,将暂时不能运行的进程或暂时不需要的程序何数据换出外存,以腾出内存来装入可运行的进程;③引入动态链接机制,当运行中的程序需要调用某段程序时,才将该段程序由外存装入内存;④引入虚拟存储器机制,使得更多作业能进入内存,提高CPU利用率,也可避免装入本次运行中中不会用到的那部分程序和数据。⑤引入存储器共享机制,允许一个正文段或数据段能被若干个进程共享,以减少内存中重复的复制。
- 覆盖技术是扩大存储容量的一种技术,早期在单一连续存储管理中使用,也可用于固定分区分配的存储管理。
- 静态装入在编程时完成,可重定位是在装入时完成,动态重定位是在运行时完成。
- 动态重定位在装入后可能换出,物理位置可能改变;可重定位装入后,物理位置不能改变。
- 动态重定位实际中是通过硬件转换机制实现的。
- 最佳适应算法空闲区按长度递增排序;首次适应算法按地址递增次序排序。
- 页表和段表同样存储在内存中,系统提供给用户的物理地址空间大小=总空间-页/段表空间。
- 页表的功能时由一组专门的存储器实现,其起始地址放在页表基址寄存器中。
- 分段是指在用户编程时,将用户程序按照逻辑划分为几个逻辑段。
- 编译后一个目标程序所限定的地址范围称为该作业的逻辑地址空间。
- 对主存储器的访问以字节或字为单位;对主存储器的分配以块为单位。
- 段式存储优点:方便编程、分段共享、分段保护、动态链接、动态增长。
- 分页的作业地址空间时一维的(一个数字即可,因为页大小固定,可以推算);分段是二维的,既需要给出段名,有需要给出段内地址。
- 段页存储,用分段方法来分配和管理用户地址空间;用分页来管理物理存储空间。
答:常见存储器管理方式具有一次性和驻留性这两大特征。一次性是指进程必须全部装入内存;驻留性是指在运行过程中,进程全部驻留在内存中。一次性对内存空间浪费非常大;驻留性则会使暂时不用的程序或数据无法释放。
答:
(1)虚拟存储器是具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储系统。从用户观点来看,虚拟存储器具有比实际内存大的多的容量,其逻辑容量由逻辑地址结构以及内存和外存容量之和决定,其运行速度接近于内存的存取速度,而实现成本又接近于外存。
(2)为了实现虚拟存储器,首先需要扩充页表,增加状态位以指出所需页是否在内存中,增加外存起始地址以便调入页面,增加引用位以提供页面置换算法使用,增加修改位以减少换出时写入磁盘次数,另外还要使用两种关键技术:①请求调页技术。该项技术是指及时将进程所要访问的不再内存中的页调入内存。该功能是由硬件(缺页中断机构发现页)和软件(将所需页调入内存)配合实现的。②置换页技术。该技术是指当内存中已无足够空间装入即将调入的页时,为了保证程序能继续运行、系统必须换出内存中的部分页,以腾出足够的空间。具体的置换操作并不复杂,其关键时确定将哪些页换出,即采取什么置换算法。
答:说法错误。
(1)整体对换是将某个内存中暂时不用的某个程序及其数据换出到外存,以腾出足够的内存空间去装入在外存中具备运行条件的进程所对应的程序和数据。
(2)虚拟存储器是指仅把作业的一部分装入内存便可运行的存储器系统,亦指具有请求调入功能和置换功能、能从逻辑上对内存容量进行扩充的存储器系统,它的实现必须建立在离散分配的基础上。
(3)虽然整体对换和虚拟存储器均能从逻辑上扩充内存空间,但整体对换不具备离散型。实际上没在具有整体对换功能的系统中,进程的大小仍将收到实际内存容量的限制。
答:在请求调页时,只要作业的部分页在内存中,该作业就可以执行;而在执行过程中发现索要访问的指令或数据不在内存中时,系统就会残生缺页中断,将所需的页面调入内存。在请求调页系统中,一条指令可能跨越了两个页,而其中要访问的操作数可能与指令不在同一个页上,且操作数本身也可能跨越了两个页。当要执行这类指令而相应的页又都不在内存中时,就将执行多次缺页中断。
答:缺页中断与一般中断的区别主要有:
(1)一般中断只需要保护现场后即可直接跳到序及时处理的地方;
(2)缺页中断除了需要保护现场外,还需要判断内存中是否有足够的空间来存储页或段,然后再把所需的页或段调进来使用。
答:每当程序所要访问的页面未在内存时(存在位为0),便向CPU发出缺页中断,中断处理程序保存CPU现场信息,分析中断原因后,转入缺页中断处理程序。该程序同过查找页表获得页所在外存的物理地址,如果此时内存可以容纳新页,则启动磁盘,将所缺页调入内存,然后修改页表。如果内存已满,则须按照某种置换算法进行页面置换;如果换出页面被修改过(修改位为1),则必须将其写回磁盘,在把缺页调入内存,将页表中调入页的存在位修改为1,并将此页表项写入快表中。利用修改后的页表,形成要访问数据的物理地址,再去访问内存数据。整个页面调入过程对用户时透明的。
答:在具有快表的请求分页系统中,将逻辑地址转变位物理地址的完整过程为:
(1)检索快表,试图重中找出索要访问的页;
(2)如果找到,则修改页表项中的访问位,供置换算法选择淘汰页时参考,将写指令修改为1,然后利用页表项给出的物理块号和页内地址形成物理地址,地址转换结束;
(3)如果没找到,则到内存中去查页表,再根据页表中的状态位来判断该页是否以调入内存。若该页已经被调入内存,则将该页的页表项调入内存。当快表快满时,先按某种算法调取某些页表项,再写入该页的页表项。若该页未调入内存中,则产生缺页中断,请求OS从外存中将该页调入内存,再转到步骤(2)进行地址转换。
答:
(1)固定分配局部置换:固定分配是指,为每个进程配分一组固定数目的物理块,在进程运行期间不再改变;局部置换是指,如果进程中出现缺页,只能从分配给该进程的n个页中选出1页换出,然后再调入1页。
(2)可变分配全局置换:可变分配是指,先为每个进程分配一定数目的物理块,在进程运行期间可以根据情况适当发生变化;全局置换是指,如果进程在运行中发现缺页,则将OS所保留的空闲物理块或所有进程的全部物理块选择1快换出,然后再将缺页调入。
答:需要寄存器和栈等硬件支持。寄存器用于记录某进程再内存中各页的使用情况;栈用户保存当前使用的各页的页面号。
答:
(1)抖动是指刚被换出的页很快被访问,必须重新调入,因此需要再选一页调入,然后此时被换出的页很快又被访问,因而又必须将它调入,如此频繁地更换页面,使得系统把大部分时间用在了页面地换进换出上,而几乎不能完成任何有效地工作,我们称这一现象为抖动。
(2)产生抖动地根本原因是同时再系统中运行地进程太多,分配给每个进程的物理块太少,无法满足进程运行的基本要求,只是每个进程再运行时出现频繁缺页。·
答:
(1)工作集,又称驻留集,是指再某段时间间隔内进程实际要访问的页面集合。经常使用的页面需要存在于工作集中,而长期不使用的页面则要从工作集中丢弃。
(2)工作集的确定原理:基于程序运行的局部性原理,程序运行期间对页面的访问会局限于很少的页面之中,这些页面被称为活跃页面,这些页面的集合即为工作及。如果能预先将活跃页面调入内存,则将大大降低缺页率。因此需要让OS跟踪每个进程的工作及,并为进程分配大于其工作集的物理块。如果还有空闲物理块,则可以再调入一个进程到内存占用以此增加多道程序度。如果所有的工作集之和超过了可用物理块的总数,则OS会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,以防止出现抖动现象。选择正确工作集的大小,对存储器利用率和系统吞吐量都有重要影响。
答:所需的硬件支持有:段表机制、缺页中断机构以及地址转换机构。
- CLOCK算法选择将最近未使用的页面置换出去,因此又称NRU算法。
- 无论采用什么页面算法,每种页面第一次访问时不可能再内存中,必然发生缺页。
- 虚拟存储器的最大容量是由计算机的地址结构决定的,与主存容量和外存容量没有必然的联系,但是实际使用中,虚拟存储器可以使得进程的可用内存扩大到内外存容量之和。
- FIFO是队列类算法,存在Belay现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。
- 作业不多的情况下交换操作非常频繁,说明物理内存严重短缺。
- 增大内存可使每个程序得到更多的页框,能减少缺页率,进而减少换入和换出过程,提高CPU的利用率。
- 缺页中断时,系统执行的操作可能时置换页面或分配内存。这时不会出现越界错误,不会进行越界出错处理。
- 固定分配是指进程运行的物理块数目分配后保持不变,全局置换指内存满时每次换出一个物理块,换进一个页。所以固定分配和全局置换不可能搭配使用。
- 系统调用是由用户进程发起的,请求操作系统的服务,如创建进程。其他的比如进程调度和缺页处理都是完全由操作系统完成的,不涉及系统调用。
- 页缓冲队列是将被淘汰的页面缓存下来,暂时不写回磁盘,队列长度会影响页面置换的的速度,但不会影响缺页率。
答:I/O系统的基本功能主要包括:①隐藏物理设备细节;②保证OS与设备无关;③提高处理机和I/O设备利用率;④控制I/O设备;⑤确保对设备的正确共享;⑥处理错误。
答:
(1) 用户层I/O软件:实现与用户交互的接口,用户可直接调用该层所提供的、与IO操作有关的库函数对设备进行操作。
(2) 设备独立性软件:用于实现用户程序与设备驱动器的接口、设备命名、设备保护以及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
(3) 设备驱动程序:与硬件直接相关,用于具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
(4)中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断的进程。
请说明下列工作分别是在哪一层完成的?
(1)向设备寄存器写命令。
答:该操作与硬件直接相关,属于设备驱动程序。
(2)检查用户是否有权使用设备。
答:该工作属于设备保护,属于设备独立性软件完成的。
(3)将二进制整数转换成ASCII的格式打印。
答:该操作通过库函数完成,属于用户层I/O软件。
(4)缓冲管理。
答:该操作为设备公有操作,属于设备独立性软件。
答:
(1)设备控制器主要由3部分构成:设备控制器与CPU的接口、设备控制器与设备的接口、I/O逻辑。
(2)设备控制器应具备的功能有:应具备接收和识别命令、交换数据、标志和报告设备的状态、缓冲地址、识别数据、控制差错等功能。
答:
(1)通道是一种特殊的处理机,它具有I/O执行能力,并且可以通过执行I/O程序来控制I/O操作。
(2)交叉连接主要是为了解决通道的瓶颈问题。之所以会产生瓶颈问题,是因为通道价格昂贵,设置的通道数量较少,导致系统吞吐量下降。交叉连接的方式不仅解决了瓶颈问题,还提高了系统可靠性。
答:
(1)设备中断处理程序要完成的工作有:①唤醒被阻塞的驱动进程;②保存被中断进程的CPU现场信息;③转入相应的设备处理程序;④处理中断;⑤恢复被中断进程的CPU现场。
(2)对中断处理的过程包括:①检测是否有未响应的中断信号;②保护被中断进程的CPU现场;③转入相应的设备处理程序;④处理中断;⑤恢复CPU现场并退出中断。
答:
(1)设备驱动程序与硬件密切相关,主要负责接收上层软件发来的I/O指令,并将其转换成具体要求发送给设备控制器;反之,也将来自设备控制器的信号传送给上层软件。采用设备驱动程序是为了实现I/O系统的高层与设备控制器之间的通信,驱动I/O设备工作。
(2)用户进程通过设备驱动程序控制设备工作的过程为:①接收由用户进程发来的I/O命令和参数,并将命令中的抽象要求,转换为具体要求,如将磁盘盘块好转换为磁盘的盘面、磁道、扇区号;②检查用户I/O请求的合法性,如果请求不合法,则拒绝接收I/O请求并反馈用户进程;③了解I/O设备的状态,如果设备准备就绪,则可由设备控制器设置设备的工作方式、传递参数;否则,将请求者的请求块挂到请求队列上等待;④发出I/O命令,如果设备空闲,立即启动I/O设备,完成指定的I/O操作。
答:推动I/O控制方式发展的主要因素包括:①尽量金少CPU对I/O控制的干预。把CPU从繁杂的I/O控制中解脱出来,以便更多地去完成数据处理任务;②缓和CPU的高速性和设备的低速性不匹配的矛盾,以提高整个系统资源的利用率和吞吐量。③提高CPU和I/O设备操作的并行程度,是CPU和I/O设备都处于忙碌状态,提高整个系统的资源利用率和系统吞吐量。
答:
(1)I/O中断频率。①在中断驱动I/O方式中,每当输入数据缓冲寄存器中装满输入数据或将输出数据换缓冲寄存器中的数据输出之后,设备控制器就会发生以一次中断,由于设备控制器中配置的数据缓冲寄存器通常较小(如一个字或字节),因此中断比较频繁。②而在DMA方式中,在DMA控制器的控制下,一次能完成一批连续数据的传输,并在整批数据传输完成后才发生一次中断,因此可大大减少CPU处理I/O中断的时间。
(2)数据的传送方式。①在中断驱动I/O方式中,由CPU直接将输出数据写入控制器的数据缓冲寄存器以供设备输出,或在中断发生后直接从数据缓冲寄存器中取出输入数据以供进程处理,几数据的传送必须经过CPU;②而在DMA方式中,数据传送实在DMA控制器的控制下直接在内存和I/O设备间进行的,CPU只须将磁盘地址、内存地址和字节数传给DMA控制器即可。
答:
(1)设备无关性的基本含义是:应用程序独立于物理设备。为了实现设备无关性,引入了逻辑设备和物理设备这两个概念。在应用程序中,可通过逻辑设备名称请求使用某类设备;而系统在实际执行时,必须使用其对应的物理设备名称,应用程序应与实际使用的物理设备无关,由OS考虑因物理设备不同而需要使用不同的设备驱动程序等问题。
(2)设置设备无关性的目的:①增加设备分配的灵活性;②实现I/O重定向。当I/O设备被更换时,不必改变应用程序,即I/O重定向。
答:可能。在设备分配的过程中,如果进程发出I/O请求后,系统为其分配了I/O设备,则进程仍继续运行;运行中再次发出新的I/O请求,只有当某个请求不满足是进程才会阻塞。在这种情况下,一个进行可以同时使用多个设备。虽然进程推进迅速,但吃屎的资源分配方式是不安全的,可能会发生死锁。
答:
(1)假脱机系统又磁盘上的输入井和输出井、内存中的输入缓冲区和输出缓冲区、输入进程和输出进程以及井管理程序组成。
(2)采用假脱机技术共享打印机时,对所有提出输出请求的用户进程,系统接收它们的请求时,并不分配打印机,而是由假脱机管理进程做两件事:①在输出井中为它申请一个空缓冲区,并将要打印的数据送入其中;②为用户进程申请一张空白的用户打印请求表,并将用户打印的请求填入该表中,再将该表挂到假脱机文件队列上。
至此,用户进程认为打印过程已经完成,而不必等待真正的慢速的打印过程完成。当打印机空闲时,假脱机打印进程将从假脱机文件的队列的队首取出一张打印请求表,根据表中的要求将要打印的数据从输出井传送到内存输出缓冲区,再由打印机进行输出打印。打印完成后,再处理假脱机文件队列的下一个打印请求表,直至队列为空。这样虽然系统中并未将它分配给任何进程。而是只是为每个提出打印请求的进程再输出井分配一个存储区(相当于一个逻辑设备),使得每个进程都感觉自己独占一台打印机,从而实现了多个进程对打印机的共享。
答:
在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为T;操作系统将缓冲区数据传送给用户区的时间为M;而CPU对这一块数据进行计算得时间为C。
在单缓冲情况下,由于设备的输入操作和CPU的处理操作可以并行,所以系统对每一整块数据的处理时间为max(C,T)+M。
- 块设备可寻址,字符设备不可寻址。
- DMA方式主要用于块设备,磁盘是典型的块设备。因此磁盘主要采取DMA传送数据。
- 中断寄存器位于计算机主机。
- 编程空间一般是由体系结构和操作系统共同决定的。
- DMA是一种不经过CPU而直接从主存存取数据的数据交换模式,它在I/O设备和主存之间建立了一条直接数据通路,这条通路是逻辑上的,通常是通过总线进行的。
- DMA方式中,设备和内存之间可以成批地进行数据交换而不用CPU干预,CPU只参与预处理和结束过程。
- 通道是一种特殊的处理器,它属于硬件技术,主要用于完成内存与外设的数据交换。
- 设备的固有属性决定了设备的使用方式。
- 计算机系统为每台设备确定了一个编号以区分和识别设备,这个确定的编号称为设备的绝对编号。
- 同一类设备只需要一个设备驱动程序,比如10台打印机和5台绘图机,只需要2个设备驱动。
- 系统调用是操作系统提供给用户程序的通用接口,属于设备无关软件的功能。
- 键盘是典型的通过中断I/O方式工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息。
- 在开始DMA传输时,主机向内存写入DMA命令块,向DMA控制器写入命令块的地址,启动I/O设备。然后CPU继续其他工作,DMA控制器直接操作内存总线,将地址放到总线上开始传输。整个传输完成后,DMA控制器中断CPU。
- 设备无关性主要是指用户使用设备的透明性,即使用户程序和实际使用的物理设备无关。
- 缓冲池是系统的共用资源,可以供多个进程共享,有利于实现进程的并发执行。
- 输入输出井是在磁盘上开辟的存储空间,输入输出缓冲区是在内存中开辟。
- 提高单机资源利用率的关键技术是多道程序技术。
- 假脱机系统主要包含三部分,即输入输出井、输入输出缓冲区、输入输出进程。它们由与预输入程序、井管理程序、缓输出程序管理。
- 构成假脱机系统的基本条件的基本条件不仅是要有大容量、高数都的外存作为输入输出井,而且还要有假脱机软件。
- 独占设备采用静态分配方式,共享设备采用动态分配方式。
- 缓冲区结合预读和滞后写技术对具有重复性及阵发性的I/O进程改善磁盘I/O性很有帮助。
- 优化文件物理块的分布可以减少寻找时间与延迟时间,从而提高磁盘性能。
- 在一个磁盘上设置多个分区与改善设备I/O性能并没有多大关系,相反还会带来处理的复杂性,降低利用率。
- SPOOLing的意思是外部设备同时联机操作,又称假脱机输入输出操作,是操作系统采用的一项将独占设备改造成共享设备的技术。
- 高速磁盘也是外存。
- 假脱机技术需要输入输出操作,单道批处理系统无法满足。
- 假脱机技术利用专门的外围机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。
- 设备厂家会根据设备特性,在驱动程序中实现一种合适的I/O控制方式。
答:
(1)数据项是最低级的数据组织形式,可分为基本数据项和组合数据项。基本数据项是描述一个对象某种属性的字符集,是数据组织中可以命名的最小逻辑单位,又称为数据元素或字段。组合数据项是若干个基本数据项所构成的数据项。
(2)记录一组相关数据项的集合,用于描述一个对象某方面的属性。
(3)文件是由创建者定义的,具有文件名的一组相关信息的集合。
答:一个比较完善的文件系统应具备5个功能。
(1)文件存储空间管理。通过文件存储空间管理,能使文件“各得其所”,并且能尽量提高文件存储空间的利用率。
(2)目录管理。通过目录管理,能实现文件“按名存取”,并尽可能提高文件的检索速度。
(3)文件读写管理。通过文件的读写管理,可以实现文件数据的快速读写。
(4)文件安全性管理。通过采取多级文件保护等措施,可以实现对系统文件的保护。
(5)用户接口管理。文件系统要可以向用户提供一个统一的、方便的接口,用户可以通过该接口方便地获得如文件存取、创建、删除、修改等文件管理服务。
答:
(1)引入“打开”这一系统文件调用的原因是为了避免多次重复检索目录。每当用户要求对一个文件实时对此读写或其他操作时。每次都要从检索目录开始。为了避免多次重复检索目录,在大多数OS中都引入了“打开”这一文件系统调用,当用户第一次请求对某文件进行操作时,须先利用open系统调用将该文件打开。
(2)所谓“打开”,是指系统将指定文件的属性(包括文件在外存上的物理位置)从外存复制到内存中打开文件表的一个表目中,并将该表目的编号(或称索引号)返回给用户。“打开”就是在用户和指定文件文件建立起一个连接。此后,用户通过该连接可直接得到文件信息,避免了再次通过目录检索文件,即当用户再次向系统发出文件操作请求时,系统可根据用户提供的索引号直接在已打开的文件表中查到文件信息。这样不仅节省了检索开销,而且提高文件操作速度。如果用户不再对文件实时操作,则可以利用“关闭”系统调用来关闭此文件。即断开此连接,此时,OS将会把该文件从已打开文件的表目中删除。
答:
(1)文件的逻辑结构是指从用户的角度出发所观察到的文件组织形式,也就是用户可以直接处理的数据及其结构。
(2)逻辑文件根据起结构可以分为两种:一种是无结构的流式文件,是指文件信息由一串字符流构成;另一种是有结构的记录式文件,是指将文件信息按照逻辑上独立的含义划分为信息单位,每个信息单位称为一个逻辑记录(简称记录)。
答:为了提高变长记录顺序文件的检索速度,可建立一张索引表,以主文件中每条记录的长度及指向对应记录的指针(即该记录在逻辑地址空间的起始地址)为表项的内容。由于索引表是一个定长记录的顺序文件,其可实现方便快速的直接存取。但是,如果文件较大,则可建立多级索引以提高检索效率。
答:
(1)按名存取,是指用户只要给出文件名就能存取外存空间中的文件信息,而不必给出文件的具体物理地址。
(2)文件系统实现文件按名存取的步骤为:首先利用用户提供的文件名,检索文件目录中该文件的FCB或索引节点,然后根据FCB的文件地址,将文件读入内存。
答:将文件描述信息从文件目录向中分离出来后,目录项中只包含文件名和索引结点表好,文件的其他描述信息放在索引节点中。这样的分离主要有两个优点:
(1)提高查找速度。查找文件时,用欲查找的文件名与文件目录的文件名进行依次比较。由于文件目录存在于外存,比较时须将其读入内存。FCB包括全部文件描述信息时,一个外存盘块仅能保存较少的FCB,查找速度较慢;将FCB描述信息分离后,文件目录中仅保存FCB文件名和索引结点编号信息,此时,一个盘块中可容纳较多的FCB,进而即可减少磁盘块的读取次数,提高文件检索的速度。
(2)实现文件链接。链接就是将路径名作为文件名,是不用的用户均可使用。描述信息分离后,目录项只包括文件名和索引节点编号,索引结点包含文件描述信息和标志该索引结点于对应索引号相连接的计数。
答:目前广泛采用的目录结构时:多级树形目录,它具有以下优点。
(1)能有效提高对目录的检索速度。假定文件系统中有N个文件,在单级目录中,最多要检索N个目录项;但对于i级树形目录,在目录中没检索一个执行文件,最多可能要检索i*(N^(1/t))项。
(2)允许文件重名。在树形结构的文件系统中,不仅允许每个用户在自己的分目录中使用于其他用户相同的名字,而且用户用户的不同分目录中的文件重名
(3)便于实现文件共享。在树形目录中,用户可通过路径名共享他人的文件;也可将共享文件链接到自己的目录下实现共享,实现方式是系统在用户目录中增设一个目录项,并在其中填上用户赋予共享文件的新文件名,以及该共享文件的唯一标识符(或者索引节点编号)。
(4)能有效地进行文件地管理和保护。在多级目录中,用户可按文件性质的不同,将它们存放到不同的子目录中,并且可以赋予各目录不同的存储权限,因此,能更有效地管理和保护文件。
答:
(1)在树形目录中,用户提供的是从根目录(或当前目录)开始的、由多个文件分量名所组成的文件路径名。系统在检索一个文件时:①系统读入给定文件路径名中的第一个文件分量名,用它于根目录(或当前目录)文件中各目录项的文件名进行顺序比较,若能找到匹配的目录项,则在它的FCB或索引节点编号中找到文件;②系统读入第二个文件分量名,用它于刚检索到的目录文件中的各目录项文件名进行顺序比较,若能找到匹配者,则重复上述过程;③如此逐级检索指定文件的分量名,最后将会得到指定文件的FCB或索引节点编号。
(2)图略
答:
(1)方便用户。此共享方式文件允许用户将共享文件链接到自己的子目录下,并赋予它新的文件名,方便用户管理和使用共享文件。
(2)可防止共享文件被任意删除。每次链接时,系统对索引结点中的链接数字段i_nlink执行加1操作;删除时,先队该字段执行减1操作,只有当i_nlink的值为0时,共享文件才会被真正删除,因此可防止共享文件被任意删除。
(3)可加快检索速度。为了加快检索文件的速度,一般系统都引入了当前目录。若共享文件已被链接到当前目录下,则系统无需再逐级检索目录,进而提高了检索了检索 速度。
答:
(1)保护域时进程对一组对象的访问权的集合。保护域规定了进程所能访问的一组对象(硬件或软件)以及所能执行的操作(即访问权)。
(2)进程与保护域之间的动态联系是指进程的可用资源集在其整个生命周期中是变化的,进程在不同的运行阶段,可以从一个保护域切换到另一个保护域。
答:
(1)访问控制表是对访问矩阵按列(对象)进行划分,由有序集{<域,权集>}组成,可用于描述不同用户(进程)对于同一对象的不同访问权限集。访问控制表也可用于定义各域对于某对象默认的访问权集,其可作为资源是否能使用的首要依据。
(2)访问权限表是对访问矩阵按行(域)进行划分,有序集{<对象,权集>}组成,表示一个域对每个对象可以执行的一组操作。当域为用户(进程)、对象为文件时,访问权限可用于描述一个用户(进程)对每个文件所能执行的一组操作。
(3)系统为每个对象配置一张访问控制表。当一个进程第一次试图访问一个对象时,必须先检查访问控制表,确定进程是否具有该对象的访问权。如果其无权访问该对象,则系统会拒绝本次访问,并构成一个例外(异常)时间;否则(有权访问),允许本次访问,为该进程建立一个访问权限,并将该权限连接到该进程。以后,进程便可直接利用这一返回的权限去访问该对象,亦可快速验证访问的合法性。当进程不再需要对该对象进行访问时,可撤销该访问权。
- UNIX操作系统中,所有设备都被设为特殊的文件。
- 一个文件对应一个FCB,而一个文件目录项就是一个FCB.
- 打卡文件操作是将该文件的FCB存入内存的活跃文件目录表,而不是将文件内容复制到主存。
- 目录文件是FCB的集合,一个目录中既可能由子目录,有可能有数据文件。
- 文件目录项即FCB,通常由文件基本信息、存取控制信息和使用信息组成(这些信息也称作文件属性)。基本信息包括文件物理位置。文件目录项显然不包括FCB的物理信息。
- 文件保护是针对文件访问权限的保护。
- 在文件系统中,口令、存取控制和用户权限表都是常用的文件保护方法。
- 相对加密保护机制,访问控制机制安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。若访问控制不由系统实现,则系统本身就无法保证。若加密机制由系统实现,则加密方法将无法拓展。
- 系统级安全管理包括注册和登录。
- 逻辑文件包括无结构文件(流式文件)和有结构文件。连续文件和链接文件都属于文件的物理结构,而系统文件是按文件用途分类的。
- 文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式,数据组织形式来自需求,而物理结构是操作系统组织物理存储块的结构形式。
- 索引文件由逻辑文件和索引表组成。
- 索引表中的索引项只包括每条记录的长度和逻辑文件中的起始位置。因为每条记录都有一个索引项,因此提高了存储代价,增加了存储开销。
- 磁带是一种顺序存储设备,用它存储文件时只能采用顺序存储结构。PS:若允许磁带来回倒带,也可组织为其他文件的组织形式。
- 索引表项中存放的是关键字和逻辑地址,不是物理地址。
- open系统调用参数包括文件路径名与文件名,而read调用只需使用open返回的文件描述符,并不使用文件名作为参数。
- read系统调用要求用户提供三个输入参数:①文件描述符fd;②buf缓冲区首地址;③传送的字节数n。
- read的功能是试图从文件描述符所指示的文件中读入n各字节的数据,并将它们送至由指针buf所指示的缓冲区中。
- 目录拆线呢的方式由顺序检索和Hash两种方法,最常用的是顺序检索。
- 多级目录结构解决了命名冲突,提高了文件查找速度,允许用户建立同名文件。
- 对文件的访问控制,通常由用户访问权限和文件属性共同限制。
- 防止文件受损常采用备份的方法;存取控制矩阵主要用于多用户间的存取权限保护。
- 建立硬链接时,引用计数加1。建立符号链接时,引用计数直接复制。
- 删除文件时,删除操作对符号链接时不可见的,这并不影响文件系统,当以后再通过符号链接访问时,发现文件不存在,直接删除符号链接;对于硬链接则不可直接删除,引用计数减1,若值部位0,说明还有其他硬链接指向此文件,则不能删除此文件。
- 硬链接是索引节点进行链接,软连接是符号链接。
- 快捷方式属于文件共享中的软连接,本质上创建的是一个链接文件,其中存放的是该文件的路径,删除文件并不会导致文件的快捷方式被删除。
- 操作系统并不保证写操作的互斥性,进程可通过系统调用对文件加锁,保证互斥写(读写者问题)。
- 删除一个文件时,会根据文件控制块回收相应的磁盘空间,将文件控制块回收,并删除目录中对应的目录项。
- 用户进程的打开文件表关于同一个文件不一定相同,如读写指针不一定相同。
- 进程关闭文件时,文件的引用计数减1,引用技术变为0是才删除系统打开文件表中的表项。