1)方便性:计算机硬件只能识别0或1,即只能识别机器代码,因此没有配置操作系统的计算机是难以使用的;如果配置了操作系统,则可以使用OS提供的各种命令来使用计算机系统,从而方便了用户,也使计算机变得易学易用。
2)有效性:操作系统可以管理CPU、I/O设备等系统资源,从而避免各种资源使用无需而引起的资源浪费现象。配置了OS的计算机可有效改善系统的资源利用率和提高系统吞吐量。
3)可扩充性:OS采用模块化设计,可适应计算机硬件和体系结构的迅速发展,可方便增加新的功能模块和修改旧的功能模块。
4)开放性:为了适应不同的硬件系统和软件系统,实现硬件设备正确、有效地协同工作,以及实现应用程序地可移植性和互操作性,要求OS具有开放性。
说明:方便性和有效性是OS最重要的两个目标。当前更重视OS使用上的方便性。
1)从一般用户的观点看,OS是用户和计算机硬件系统之间的接口;用户可以通过命令方式或者系统调用方式来使用计算机。
2)从资源管理的观点看,OS是计算机资源的管理者。计算机的资源分为四类:处理器、存储器、I/O设备和信息(数据和程序),相应地,OS系统的主要功能也是对这四类资源的管理,即:处理机管理、存储器管理、I/O设备的管理、文件管理。这也是本课程要介绍的主要内容。
3)OS可用作扩充机器。没有任何软件支持的计算机,称为裸机,覆盖了软件的机器称为虚拟机(Virtualmachine);每多覆盖一层软件,则虚拟机的功能就越强。
1)人工操作方式:主要发生在第一代计算机到上世纪50年代中期,此时的程序员通过人工操作方式直接操作计算机硬件系统;用户独占全机和CPU等待人工操作是这种方式的主要缺点。
人工操作方式严重影响了计算机资源的利用率,引起了所谓的“人机矛盾”。后来出现了“通道技术”和“缓冲技术”,用于缓和此矛盾,但是效果不好,再后来引入了“脱机输入输出方式”,获得了良好的效果。
2.操作系统时代
1)单道批处理系统(SimpleBatchSystem):是为提高系统资源利用率和系统吞吐量而提出的,配有监督程序(Monitor)。首先将一批作业以脱机输入输出方式(Off-LineI/O)输入道磁带上,然后在监督程序的监督之下顺序执行。此种方式可保证系统对作业的处理是成批进行的,且内存中总保持一道作业。其效果并不好,目前已经很少使用。其特点是:自动性(无需人工干预)、顺序性、单道性。可以认为SBS是OS的前身。
说明:作业调度是将作业从外存调入内存,但是不一定占有处理机;进程调度是从已在内存中的作业选择一个作业,将处理机分配给它,使其运行。
3)分时系统(Time-SharingSystem):是一台主机+多个终端的系统。推动分时系统形成和发展的动力是用户的需要。用户使用计算机时,希望实现“人机交互”,以便能对错误进行修改,并且希望能独占主机;但是在19世纪60年底,计算机非常昂贵,又不可能每个用户独占一台主机,所以“共享主机”是一个不错的选择;同时,如果每个用户各自占用一台终端设备,则可以方便地将自己的作业通过终端设备传输到计算机上处理。
分时系统的定义:是指一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户共享主机的资源,每个用户都可以通过自己的终端以交互的方式使用计算机。
分时系统需要解决的问题:
a.及时接收:指的是主机要及时接收用户输入的命令和数据
说明:
分时系统的实现方法:
分时系统的特点:
(1)多路性:一台主机上连接多台终端,系统按照分时原则轮流为每个用户服务。多路性也称为同时性。
(2)独立性:是从用户的角度考虑的,每个用户独占一个终端,各自独立操作,互补干扰,因此,用户感到是他一个人占用主机。
(4)交互性:用户通过终端可以同主机进行广泛的对话,以实现人机交互。
(1)按照是否呈现周期性划分
l周期性实时任务:任务按照制定的周期循环执行;
说明:实时系统和分时系统的比较
(1)多路性:都具有多路性。分时系统的多路性指的是系统按照分时原则为多个用户服务,实时系统的多路性是指系统经常对现场的多路信息进行采集及对多个对象进行控制。
(2)独立性:都具有独立性。分时系统的独立性体现在每个终端用户向系统提出服务时是独立的操作,彼此不相干,实时系统的独立性体现在系统对多路信息采集和控制时,也是彼此独立的。
(4)交互性:实时信息系统中的交互是为了访问系统内的特定资源,分时系统中是系统向终端用户提供各种数据处理服务、资源贡献服务等。
(5)可靠性:分时系统要求系统较为可靠,但实时系统要求系统严格可靠。
1.操作系统的定义:是一组控制和管理计算机硬件和软件资源,合理对各类作业进行调度,以及方便用户的程序的集合。
批处理系统、分时系统和实时系统是三种基本的操作系统类型。一个实际的操作系统,可能兼有三者或者其中两者的功能。
2.操作系统的四大基本特征
1)并发性(Concurrence)
程序是不能并发进行的,是静态实体;为使得程序能并发执行,系统必须为每个程序建立进程。进程,也称任务,是系统中能独立运行且作为资源分配的基本单位,是一个活动实体。进程之间可以并发执行和交换信息。
2)共享性(Sharing):系统中的资源可供内存中的多个并发执行的进程共同使用。有两种共享资源的方式:互斥共享方式和同时访问方式。
同时访问方式:有的资源(如磁盘)可以允许多个进程同时访问。注意这里的“同时”是一个宏观的概念,在微观上往往是这些进程交替对资源进行访问。
3)虚拟性(Virtual):通过某种技术把一个物理实体变成若干个逻辑上的对应物。物理实体实实在存在的,而后者是虚拟的,是用户感觉到的东西。例如多道分时系统中中只有一个CPU,但是每个终端用户都认为有一个CPU在专门为他服务,此即为利用多道程序技术把一台物理上的CPU变成多台逻辑的CPU。
4)异步性(Asynchronism):多道环境中,多个进程并发执行,但是由于资源有限,通常进程的执行并非“一气呵成”,而是以“走走停停”的方式进行,即进程是以异步方式进行的。
说明:并发和共享是操作系统的两个最基本的特征,且互为依存。
3.操作系统提供的服务:操作系统提供了其他程序执行的环境,也为程序和用户提供了一些操作系统的服务。操作系统可以提供诸如程序执行、I/O操作、文件系统操纵、通信以及差错检测等服务,还可以提供系统调用(SystemCall)服务。
4.操作系统的五大功能
1)存储器管理功能:为多道程序的运行提供良好的环境。这里的“存储器”指的是内存。主要有以下功能:内存分配(静态分配、动态分配)、内存保护(每道程序在自己的内存范围内,不能越界)、地址映射和内存扩充(借助虚拟存储技术)
2)处理机管理功能:实际是对进程的管理。在多道程序环境下,对处理机的管理是以进程为基本单位的,因此处理机的管理可以归结为对进程的管理。主要有以下功能:进程控制、进程同步、进程通信和调度(作业调度和进程调度)等。
3)设备管理功能:主要任务是完成用户提出的各种I/O请求,为用户分配I/O设备,提高CPU和I/O设备的利用率,提高I/O速度,以及方便用户使用I/O设备。主要功能有:缓冲管理(CPU和I/O设备之间速度不匹配)、设备分配(包括回收)、设备处理(设备驱动)、保证设备的独立性和虚拟性。
4)文件管理功能:主要是对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。主要功能包括:文件存储空间的管理、目录管理、文件的读写管理以及文件的贡献与保护等。
5)用户接口功能:是操作系统为了方便用户使用而向用户提供的“用户与操作系统的接口”,通常以命令和系统调用的形式呈现出来,有命令接口、程序接口(系统调用)和图形接口几种形式。
5.常见操作系统:有以下几类操作系统
1)微机操作系统:
(1)单用户单任务操作系统:只允许一个用户使用计算机,且只允许用户程序作为一个任务运行,是一种最简单的操作系统。例如:CP/M和MS-DOS。
(2)单用户多任务操作系统:只允许一个用户使用计算机,但允许将一个用户程序分为若干个任务,使它们并发执行,可有效改善系统的性能。例如OS/2和Windows系列。
(3)多用户多任务操作系统:允许多个用户通过各自的终端,使用同一台主机,共享主机系统中的各类资源,而每个用户程序又可进一步分为几个任务,使它们并发执行,从而进一步提高了资源利用率和增加系统吞吐量。例如UNIXOS。
2)多处理机操作系统MPS(MultiProcessorSystem):多台处理机协调工作,可增加系统吞吐量、节省开支、提高系统的可靠性。
3)网络操作系统:主要有两种模式C/S模式和对等模式(peer-to-peer)
4)分布式操作系统:通集中式操作系统不同。处理和控制都集中在一台主机上,所有的任务都由主机来处理,这样的系统称为集中式操作系统。而分布式操作系统的处理和控制,都是分散在系统的各个处理单元上。
程序是不能独立运行的,而只有将程序调入进程,由系统为程序创建一个或多个进程,程序才可以运行。因此,进程才是资源分配和独立运行的基本单位。
进程是操作系统中极为重要的概念,要深刻理解。
1.程序执行
程序顺序执行的特征:1)顺序性(保证前驱、后继关系);2)封闭性(程序不间断执行,占有本机所有资源,资源状态只有本程序可改变,执行结果不受外界影响);3)可再现性(只要条件相同,不管何时、何地执行,结果均相同)。
程序并发执行,其特征是为了提高系统运行效率,特征为:
1)间断性(并发程序之间相互制约,例如互为输入、输出,程序具有“执行――暂停执行――再次执行”的活动规律);
2)失去封闭性(系统资源由多个程序共享,其状态也受多个程序控制;某程序运行时,受到其他程序的影响);
3)不可再现性(失去了封闭性,也将导致失去可再现性)
说明:当多个程序共享一个资源时,由于对资源的访问时刻不定,因此执行结果不定。例如:
假设有一软件变量资源N,设当前N=5,现有两个程序A和B共享该变量,程序A对N的操作为:N:=N+1;程序B对N的操作为:先利用Print(N)打印N,然后执行N:=0;由于A和B可以按照不同的速度执行,则语句N:=N+1;Print(N);N:=0;有可能出现以下几种执行顺序:
(1)N:=N+1;Print(N);N=0;N的取值分别是6,6,0
(2)Print(N);N:=N+1;N=0;N的取值分别是5,6,0
(3)Print(N);N=0;N:=N+1;N的取值分别是5,0,1
以上结果说明,程序A中变量N的值可能是6,也可能是1,结果是可变的;同样情况,程序B中打印N时其值有可能是6,也可能是5,结果也是可变的。
程序并发执行,虽然能显著提高系统效率,但是出现了“不可再现性”,这显然是不允许的。既要保证系统的效率,又要保证程序执行的“可再现性”,必须采取适当的措施。这些措施的根本就是要保证并发执行的程序对临界资源的独占性访问。
2.程序并发执行的条件――Bernstein条件
设程序Pi可对多个变量进行操作(资源),操作分为“读操作”和“写操作”,亦即程序Pi在执行过程中作为参考的所有变量的集合称为“读集”,在执行过程中需要修改的所有变量的集合称为“写集”,如下定义:
R(Pi)={a1,a2,…,am};R(Pi)是Pi的读集
W(Pi)={b1,b2,…,bn};W(Pi)是Pi的写集
若两个程序Pi和Pi能满足如下条件,它们便能够并发执行,并具有可再现性:
R(Pi)∩W(Pj)W(Pi)∩R(Pj)W(Pi)∩W(Pj)={}
以上条件是由Bernstein提出的,因此称为Bernstein条件。
理解:只有保证程序Pi的读集和Pj的写集不相交、Pi的写集和Pj的读集不相交、Pi的写集和Pj的写集不相交,才能保证Pi和Pj并发执行,且保证程序的正确执行(可再现性)。
说明:两个程序可以同时对某变量执行“读操作”,但只要有一个“写操作”,则另一个程序就不能再执行“读操作”,也不能再执行“写操作”了,即“写操作”是独占临界资源的。
1.进程:是可执行程序在一个数据集合上的运行过程,是系统资源分配和独立运行的基本单位。其基本特征为:
1)动态性:进程是进程实体的执行过程,它“由创建而产生,由调度而执行、因得不到资源而暂停执行,以及由撤消而消亡”。动态性是进程最基本的特征,是同程序不同的。
【程序:是一组指令的集合,存放在某种介质上,无运动含义,是一个静态实体】
3)独立性:指的是进程实体是一个能独立运行和获得资源的基本单位。如果某程序没有建立进程,则不能作为一个独立的单位参与运行。
4)异步性:多个进程各自独立运行,其运行速度是不可预知的。该特种导致了程序执行的不可再现性,因此操作系统必须采取有效措施保证各程序(进程)之间能协调运行。
5)结构特征:进程实体是由程序段、数据段以及进程控制块(PCB)三部分组成的。
2.进程基本状态
有五个基本状态:
1)新状态(New):进程刚刚建立,还未送入就绪队列的状态。
2)就绪状态(Ready):进程获得了除处理机(CPU)之外的所有资源,一旦获得了处理机,便可立即执行。一个系统中可有多个进程同时处于就绪状态,这些进程可排成一个或多个队列,这样的队列称为就绪队列。
3)执行状态(Execute):进程已经获得处理机,其对应的程序正在执行。单处理机系统中,系统中只有一个进程处于执行状态,而在多处理机系统中,可能有多个进程同时处于执行状态。
4)阻塞状态(Block):某进程正在执行重,但是因为某些原因(例如等待I/O)暂时停止了执行,此时进程转入阻塞状态,处理机被剥夺。注意阻塞状态一定是由执行状态转过来的。阻塞状态也称为“睡眠”状态或“等待”状态。同就绪队列近似,系统中处于阻塞状态的进程也排成一个队列,或者根据阻塞原因排成多个队列,这些队列称为阻塞队列。
处于阻塞状态的队列,只有其I/O完成,或者需要的资源得到了,则从阻塞队列重转出,排到就绪队列的尾部,等待接收系统的重新调度。
5)终止状态(Terminated):进程结束(不管正常结束,还是异常结束),操作系统将它从就绪队列中移出,但是还没有撤销时的状态。
说明:如果当前进程正在执行,则它仍处于就绪队列中,仅是其PCB中有关进程状态的字段要修改为“正在执行”状态。之所以如此,是因为在进程并发时,进程不可能总占有处理机,操作系统会根据各种不同策略为进程分配处理机,所以进程的执行过程是“走走停停”式的,是在“就绪”――“执行”――“就绪”的状态中来回切换的。
3.进程五大基本状态的切换
一个进程只有一次新状态和终止状态,但可有多次就绪状态、阻塞状态和执行状态。有以下几种状态转换的情况。
1)新状态à就绪状态:系统的就绪队列允许接收新的就绪队列时,操作系统就将处于新状态的进程移入就绪队列,此时完成了进程的“新状态”到“就绪状态”的转变。
2)就绪状态à执行状态:进程调度程序为就绪队列中优先(如何判断优先?)的进程分配处理机,则该进程由就绪状态变成了执行状态,该进程称为当前进程。
3)执行状态à阻塞状态:当正处于执行状态的进程需要访问临界资源,而临界资源正在被其它资源访问时,或者进程需要等待I/O时,进程将由执行状态变为阻塞状态,进程也将进入阻塞队列。
5)阻塞状态à就绪状态:阻塞进程获得了所需的全部资源(除了处理机),并且I/O也已经完成,则可由阻塞状态转为就绪状态,等待进程处理程序的调度而重新获得处理机。
6)执行状态à终止状态:进程完成,不管是正常完成,还是异常结束,都将执行状态变为终止状态,等待系统撤消。
4.进程的挂起状态(Suspend)
是一种新引入的状态,是一种静止状态。处于此状态的进程,得不到处理机调度。处于挂起状态的进程被调出内存,进入外存暂时存放。其原因可能基于:
1)终端用户的需要;2)父进程的要求;3)操作系统的需要;4)对换的需要;5)负荷调节的需要。
【所谓对换,指的是为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上,此时进程将处于一种有别于阻塞状态的另一种状态,称为静止阻塞状态。该状态的进程即处于挂起状态,确切地说,该进程处于静止阻塞状态,因为即使该进程获得了所有资源,或者其预想的事情(例如I/0)已经发生能够,其仍不具备运行条件,仍不能进入就绪队列】
引入挂起状态的进程,又增加了从挂起状态(静止状态)到非挂起状态(活动状态)的转换,或者相反。为同原有的就绪、阻塞状态相区别,原有的非挂起状态下的就绪、阻塞状态分别称为活动就绪状态、活动阻塞状态,而挂起状态下的就绪、阻塞状态称为静止就绪状态、静止阻塞状态。状态转换图如下所示。
(1)活动就绪à静止就绪(ReadyAàReadyS):
(2)静止就绪à活动就绪(ReadySàReadyA):如果利用激活原语Active将进程激活后,静止就绪状态的进程变为活动就绪状态,此时进程可以再调度执行。
(3)活动阻塞à静止阻塞(BlockAàBlockS):利用挂起原语Suspend将进程挂起时,活动阻塞状态的进程变为静止阻塞状态。即使该进程所期待的事件发生了(例如I/O完成),也不能进入活动就绪队列,而只能进入静止就绪队列。
(4)静止阻塞à活动阻塞(BlockSàBlockA):如果利用激活原语Active将进程激活后,静止阻塞状态的进程变为活动阻塞状态。
5.进程控制块PCB
进程控制块是进程实体的一部分,是操作系统中最重要的记录型数据结构,PCB中记录了操作系统所需要的,用于描述进程情况及控制进程运行所需的全部信息。
PCB的特征:1)常驻内存;2)是进程存在的唯一标识;3)一个进程对应一个PCB;4)可以被多个系统模块访问;5)OS中有专门的PCB区。
PCB中包含的信息:
(1)进程标识符信息:例如外部标识符(字母,用户访问进程时使用)、内部标识符(整数,系统使用)、父进程标识符、子进程标识符以及用户标识符(谁拥有该进程)等。
(2)处理机状态信息:现场保护、现场恢复,例如通用寄存器、PC、PSW、SP等的信息。
(3)进程调度信息:进程当前状态、优先级、进程调度所需的信息以及阻塞原因(事件)等。
(4)进程控制信息:例如程序和数据的地址、进程同步和通信机制、资源清单以及链接指针等。
PCB的组织方式:
(1)链接方式:把具有相同状态的PCB用其中的链接字,链接成一个队列。
(2)索引方式:系统根据所有进程的状态,建立几张索引表,索引表的每一个表项指向一个PCB的物理块。
1.处理机的执行状态:系统态和用户态。
1)系统态又称为核心态,具有较高的特权,能访问所有寄存器和存储区,能执行一切执令。
2)用户态具有较低特权的执行状态,只能执行规定的指令,访问指定的寄存器和存储区。
通常情况下,用户程序运行在用户态,OS内核通常运行在系统态。进程控制就是由OS内核实现的。
2.操作系统内核
操作系统内核是计算机硬件的第一次扩充,内核执行OS与硬件关系密切,执行频率高的模块,它们是常驻内存的。多数OS包括下述功能:
1)支撑功能:包括中断处理功能、时钟管理功能、原语操作等。
2)资源管理功能:包括进程管理、存储器管理、设备管理等。
中断:计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到现行程序的间断处。这就是“中断”。
3.进程的创建及终止
1)进程图:是用于描述进程家族关系的有向树,表现进程之间的父子关系。父进程和子进程关系为:(1)父进程创建子进程;(2)子进程继承父进程的资源,文件以及缓冲区;(3)子进程随父进程的撤消而撤消;(4)子进程撤消时,其从父进程获得的资源全部归还父进程。
2)什么时候创建进程?(引起创建进程的事件)
3)什么时候终止进程?(引起终止进程的事件)
(1)正常结束;(2)异常结束(出现错误或故障);(3)外界干预(例如操作系统干预、父进程干预、父进程终止等)。
4)进程创建步骤:
(1)申请空白PCB(为进程分配唯一数字标识符,从PCB集合中索取空白PCB块);(2)为新进程分配资源(为进程的程序和数据,以及用户栈分配内存资源);(3)初始化进程控制块(包括初始化标识符信息、处理机状态信息以及处理机控制信息);(4)将新进程插入就绪队列(如就绪队列能够接纳新进程,则插入)。
5)进程的终止步骤:
OS调用进程终止原语,按下述过程终止指定进程:
(1)从PCB集合中检索当前进程PCB,并从中读出进程状态;(2)终止进程的执行(修改其调度标志为真,以保证终止后应重新调度);(3)终止子孙进程;(4)释放资源(或归还给其父进程,或归还给系统);(5)将被终止进程的PCB从它所处的队列中移出。
4.进程阻塞及唤醒
1)引起进程阻塞和唤醒的事件
(1)请求系统服务,如:打印服务;
(2)启动某种操作,如:启动I/O或启动打印机;
(3)新数据尚未到达;
(4)无新工作可做,发送一消息之后等待的时候。
2)进程阻塞过程
(1)终止进程的执行,将进程的状态改为阻塞态;
(2)将进程插入相应的阻塞队列;
(3)转进程调度例程,重新进行进程调度,以将CPU分配给其它进程。
3)进程唤醒过程
(1)将进程从阻塞队列中移出;
(2)将进程状态由阻塞改为就绪;
(3)将进程插入就绪队列。(有可能立即得到调度,也有可能在就绪队列中等待)
【说明:进程阻塞用Block原语,进程激活用Active原语。需要说明,这是两个作用相反的原语。】
5.进程挂起与激活
1)进程的挂起过程:调用挂起原语suspend()。suspend的执行过程:(1)检查被挂起的进程的状态,如正处于活动就绪状态或执行状态,则将其修改为静止就绪状态;如正处于活动阻塞状态,则将其修改为静止阻塞状态;(2)复制改进程的PCB到指定的内存区域,以方便用户或父进程检查其运行情况;(3)如果被挂起的进程正在执行,则转调度程序重新调度新的进程。
2)进程的激活过程:调用激活原语Active()。执行过程:(1)将进程后外存换入内存;(2)检查现行状态,若是静止就绪(阻塞)状态,则修改为活动就绪(阻塞)状态;(3)如采用抢占调度策略,且有新进程进入就绪队列,则还可能转入进程调度程序:如当前进程优先级较低,则立即剥夺其执行,将处理机分配给刚被激活的进程,否则就不必重新调度,继续原先进程的执行即可。
1.线程的引入(减少时空开销,提高系统的并发性)
上个世纪60年代,进程的概念被提出,在OS中进程一直作为资源分配合独立运行的基本单位。直到80年代中期,人们又提出了比进程更小的能独立运行的基本单位――线程。
提出线程的目的是为了进一步提高系统内程序并发执行的程度,进一步提高系统吞吐量。目前新近推出的OS和DBMS中都引入了线程的概念。
引入线程的目的:为了减少程序并发执行时所付出的时空开销,保证OS具有更好的并发性。为保证程序能并发运行,系统必须进行以下操作:创建进程、撤消进程和进程切换,而这一切,系统都必须付出较大的时空开销。
多个进程进入内存,可保证良好的并发性,但是进程越多,切换的频率越大,系统为之付出的时空开销就越大,实际上系统的性能将有所降低。如果既要保证并发性,又要减少系统时空开销,则必须采取新的措施。由此,线程被提出了。
线程:线程是进程的一个实体,是被系统独立调度和分派的基本单位。线程有进程生成,本身基本上不拥有资源,仅有一点自己的运行过程中必不可少的资源(例如程序计数器、堆栈等),但是它可以利用创建它的进程的所有资源。一个进程可以创建多个线程,线程也可以创建或撤消另一个线程,这些线程共享进程的资源。同一个进程的线程之间可以并发执行,线程之间相互制约,也呈现间断性(异步性),因此,线程也同样拥有就绪、阻塞和执行三种基本状态,有的系统中还有终止状态。
2.线程和进程的比较
线程:轻型进程(Light-WeightProcess),也称为进程元;
进程:重型进程(Heavy-WeightProcess)
一个进程都有若干个线程,至少有一个线程。线程和进程有一些相似之处,下面我们从调度、并发性、拥有资源、系统开销等方面对它们进行比较。
调度:传统OS中,进程是资源分配和独立执行的基本单位,而在引入线程的OS中,进程仅是资源拥有的基本单位,线程称为调度和分派的基本单位。进程的两个属性(资源分配,独立执行)被分开,从而线程可轻装上阵,可提高系统并发程度。
同一进程的线程切换不会引起进程的切换,不同进程的线程的切换将会引起进程切换。
并发性:在引入线程的OS中,不仅进程之间可以并发,同一进程之间的线程也可以并发,从而有效提高了并发程度。
拥有资源:进程是拥有资源的,而线程基本上不拥有资源,但是同一个进程的线程可以共享进程的资源。
系统开销:进程的创建和撤销,系统都需要为之分配和撤销资源(如内存空间、I/O设备等),而系统创建线程实,没有资源分配合撤销的问题,因此系统开销远远小于进程;同时,进程切换时,系统需要保护旧进程的线程、设置新进程的初始环境,也需要很大的系统开销,而线程切换时,除了保护几个优先的寄存器之外,不涉及有关存储器管理的有关方面,因此系统开销非常小。另外,由于同一进程的线程占有相同的地址空间,线程同步和通讯的开销也非常小。
线程分为用户级线程和内核支持线程。
OS系统引入进程,提高了系统效率和吞吐量,但是进程运行的异步性,导致了结果的不可再现性和差错,因此必须采取措施保证进程执行结果的可再现性和正确性。这就是进程同步提出的原因。
进程同步的主要任务:使并发执行的进程之间能有效利用资源和相互合作,从而使程序的执行具有可再现性。
1.多道程序环境下进程之间的关系
资源共享:进程之间彼此无关,互不知道对方的存在。但是处在一个环境之下,运行时需资源共享(如共享CPU和I/O设备)。进程同步的主要任务是保证进程能互斥地访问临界资源。系统中的资源不是由用户进程直接使用的,而是由系统(操作系统)统一分配的。亦即:用户进程要使用某资源,必须首先咨询系统:资源被其他进程占有吗?如果占有,则当前进程或等待,或进入阻塞状态;如果资源处于空闲状态,则当前进程占有该资源,继续执行,执行完毕后,释放资源,其他进程方可再次占有该资源。
2.临界资源和临界区
临界区:每个进程中访问临界资源的代码。如下:
说明:如果每个进程都能保证互斥地进入自己的临界区,则能保证互斥访问临界资源。
entrysection,进入区:其作用时保证进程进入临界区之前先对欲访问的临界资源的当前状态进程检查,看它是否正在被访问。如此时临界资源未被访问,则进程可以进入临界区,对资源进行访问,并设置临界资源的访问标志为“占用”状态;如果此时临界资源处于占用状态,则说明其他进程正在访问它,为避免混乱,本进程不能进入临界区。
exitsection,退出区:是临界区后面的一段代码,用于恢复刚才在临界区中访问的临界资源的标志为“未被占用”状态,以便于其他的进程可进入自己的临界区。
remaindersection,剩余区:进入区、临界区、退出区之外的其它代码。
3.同步四原则
1)空闲让进:当临界资源空闲时,允许进程访问,以有效利用临界资源;
2)忙则等待:当临界资源忙时,进程将不能进入临界区对临界资源进行访问,只能等待,以保证进程互斥访问临界资源;
4)让权等待:如果进程不能进入临界区,即当前无法访问临界资源,则应立即释放处理机,让其他符合运行条件的进程有机会获得处理机,以免当前进程陷入“忙等”状态。
4.互斥问题的解决
可以采用软件方法解决进程互斥问题,也可以用硬件方法解决进程互斥问题。目前用软件方法解决进程互斥的方法已经很少使用,但是从理解的角度出发,利用软件方法解决,还是有些意义的。
经典进程同步问题
生产者--消费者问题
mutex:使诸进程互斥地访问缓冲区(n个缓冲区)
empty、full:空、满缓冲区数量。
Varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,1,…,n-1]ofitem;
in,out:integer:=0,0;
begin
parbegin
producer:begin
repeat
…
Produceaniteminnextp;
wait(empty);
wait(mutex);
buffer(in):=nextp;
in:=(in+1)modn;
signal(mutex);
signal(full);
Untilfalse;
End
consumer:begin
wait(full);
nextc:=buffer(out);
out:=(out+1)modn;
signal(empty);
Consumertheiteminnextc;
end
parend
varmutex,empty,full:semaphore:=1,n,0;
buffer:array[0,…,n-1]ofitem;
inout:integer:=0,0;
produceaniteminnextp;
swait(empty,mutex);
ssingal(mutex,full);
Consumer:begin
swait(full,mutex);
ssignal(mutex,empty);
consumertheiteminnextc;
untilfalse;
wait和Signal操作(PV操作):
Wait(s):whiles≤0dono-op
s:=s-1.
Signal(s):s:=s+1
注:wait(s)和Signal(s)都是原子操作。
特点:可以实现让权等待。
procedurewait(s)
vars:semaphore
svalue:=s.value-1;
ifs.value<0,thenblock(S.L)
procedureSignal(s)
svalue:=s.value+1;
ifs.value<=0thenwakeup(S.L)
s.value>=0时,s.value的值表示资源数量;s.value<0时,|s.value|的值表示某资源的等待队列中进程的数量。
每次的wait(s)操作,意味着进程请求一个单位的资源,因此描述为s.value:=s.value-1;当s.value<0时,表示资源已分配完毕,因而进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号链表S.L中。
每次的Signal(s)操作,意味着进程释放一个资源,故s.value:=s.value+1操作表示资源数目加1。若加1后仍是S.value<=0,则表示在该信号链表中,仍有等待该资源的进程被阻塞,故还应该调用wakeup原语,将S.L链表中的第一个等待进程唤醒。
如果S.value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量。
AND型信号量集机制的目的在于解决进程共享多个临界资源的互斥问题。
AND同步机制的基本思想是:将进程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,待该进程使用完后再一起释放,只要还有一个资源不能分配给该进程,其它所有可能为之分配的资源,也不分配给它。
实现:
Swait(S1,S2,……Sn)
ifS1≥1and…andSn≥1then
fori:=1tondo
endfor
else
placetheprocessinthewaitingqueuewiththefirstSifoundwithSi<1,andsettheprogramcountofthisprocesstothebeginningofSwaitoperation
endif
SSignal.(S1,s2,……sn)
Si=Si+1;
removealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueue
1)当信号量必须大于一个给定值(不一定是1)而且每次分配的资源数为给定值(不一是1个单位)的信号量集机制。
Swait(S1,t1,d1,……Sn,tn,dn).
ifS1≥t1and…andsn≥tnthen
Si:=Si-di
PlacetheexecutingprocessinthewaitingqueueofthefirstSiwithSi<tiandsetitsprogramcountertothebeginningoftheSwaitOperation.
Signal(Si,di,……;sn,dn)
Si:=Si+di
RemovealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueue
2)一般“信号量集”的几种特殊情况。
(1)Swait(S,d,d):允许每次申请d个资源。
当资源数少于d时,不予分配。
(2)Swait(S,1,1):S>1,记录型信号量。
S=1时,互斥型信号量。
(3)Swait(S,1,0),可控开关,当时,允许进入,S<1时,不能进入。
1.利用信号量实现互斥
varmutex:semaphore:=1
process1:begin
criticalsetion
remaindersection
process2:begin
2.利用信号量来描述前趋关系
Vara,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0;
Begin
beginS1;signal(a);signal(b);end;
beginwait(a);S2;signal(c);signal(d);end;
beginwait(b);S3;signal(e);end;
beginwait(c);S4;signal(f);end;
beginwait(d);S1;signal(g);end;
beginwait(e);wait(f);wait(g);S6;end;
1.利用记录型信号量解决哲学家进餐问题
Varchopstick:array[0,…,4]ofsemaphore;
Repeat
wait(chopstick[i]);
wait(chopstick[(i+1)mod5]);
eat
signal(chopstick[i]);
signal(chopstick[(i+1)mod5]);
think;
Untilfalse
2.利用AND信号量解决哲学家进餐问题
Varchopstick:array[0,…,4]ofsemaphore:=(1,1,1,1,1);
processi
Sswait(chopstick[(i+1)mod5],chopstick[i]);
Ssignal(chopstick[(i+1)mod5],chopstick[i]);
特点:
读进程可共享同一对象。
写进程不可共享同一对象。
1.利用记录型信号量解决读者——写者问题
varrmutex,wmutex:semaphore:=1,1;
readcount:integer:=0;
reader:begin
wait(rmutex);
ifreadcount=0thenwait(wmutex);
readcount:=readcount+1;
signal(rmutex);
performreadoperation
readcount:=readcount-1;
ifreadcount=0thensignal(wmutex);
writer:begin
wait(wmutex)
performwriteoperation;
signal(wmutex)
2.信号量集解决读者——写者问题
varRNinteger;
L,mx:semaphore:=RN,q;
swait(L,1,1);
swait(mx,1,0);
performreadoperation;
ssignal(L,1);
swait(mx,1,1;L,RN,0);
ssignal(mx,1);
untilflase;
管程是描述共享资源的数据结构和在数据结构上的共享资源管理程序。
管程有三部分组成:局部于管程的共享变量说明;对该数据结构进行操作的一组过程;对局部于管程的数据设置初始值的语句。
这又称为作业调度或长程调度,用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行。有时也称为接纳调度或远程调度。在每次执行作业调度时,都必须做出以下两个决定:
(1)接纳多少个作业
(2)接纳哪些作业
通常也称为进程调度或短程调度,用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序执行把处理机分配给该进程的具体操作。调度方式有两种:
1)非抢占方式:
(1)说明:采用这种调度方式时,一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才再把处理机分配给其他进程,决不允许某进程抢占已经分配出去的处理机。
(2)优点:实现简单,系统开销小。
(3)缺点:难以满足紧急任务的要求——立即执行。
2)抢占方式:
这种调度方式,允许调度程序根据某种原则,去暂停某个正在执行的进程,将以分配给该进程的处理机重新分配给另一进程。抢占的原则有:
(2)优先权原则。
(3)短作业优先原则。
又称为中程调度,引入中级调度的主要目的,是为了提高内存利用率和系统吞吐量。
4)优先权准则:调度程序允许紧急作业先调度。
(2)处理机利用率好。
(3)各类资源的平衡利用:尽可能使系统中的各类资源都处于忙碌状态。
(1)在作业调度中,FCFS就是从后备作业队列中,选择最先进入该队列的作业(队首作业),进行调度。
(2)在进程调度中,FCFS就是从就绪队列的队首,选择最先到达队列的进程,为该进程分配CPU。
先来先服务调度算法
进程名
开始执
带权周
A
0
1
B
100
101
C
2
102
D
3
202
199
1.99
(2)不能保证紧迫作业的及时处理,因为该算法不考虑作业的紧迫程度。
(3)作业长短根据用户的估计而定,故不一定能真正做到短作业优先。
短作业(进程)优先调度算法
4
6
9
8
2.67
5
14
12
2.4
1.5
(1)非抢占式优先权算法
(2)抢占式优先权调度算法
1)算法思想
动态优先权作业,调度算法
优先权==
2)算法评价
缺点:每次调度之前,要进行响应比的计算,增加了系统开销。
所谓死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace),当进程处于这种僵持状态时,若无外力作用,他们都将无法再向前推进
(1)竞争资源,资源可分为可剥夺资源(CPU)和非可剥夺资源(打印机)。
(2)进程间推进顺序非法。
(1)互斥条件
(2)请求和保持条件
(3)不剥夺条件
(4)环路等待条件
所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称
(1)可利用资源向量Available当前可分配资源。
(2)最大需求矩阵Max进程需要的最大资源数。
(3)分配矩阵Allocation某时刻已分配给进程的资源数。
(4)需求矩阵Need当前,进程还需要多少资源才能就绪。
Need[i,j]=Max[i,j]-Allocation[i,j]
设Requesti是进程Pi请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:
(1)如果,Available[j]≤Need[i,j],便转向步骤(2);否则系统出错,因为它所需要的资源已超过它所宣布的最大值。
(2)如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Available[j]:=Available[j]-Available[j];
Allocation[i,j]=Allocation[i,j]+Requesti[j];
Need[i,j]=Need[i,j]-Requesti[j];
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
系统所执行的安全性算法可描述如下:
1)设置两个向量:(1)工作向量Work:它可表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work:=Available;(2)Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:=false;当有足够资源分配给进程时,再令Finish[i]:=true。
2)从进程集合中找到一个能满足下述条件的进程:(1)Finish[i]:=false;(2)Need[i,j]≤Work[j];若找到,执行步骤3),否则,执行步骤4)。
3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]:=Work[i]+Allocation[i,j];Finish[i]:=true;gotostep2);
4)如果所有进程的Finish[i]:=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。
假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配图情况如下图:
T0时刻的资源分配表
资源情况
进程
MAX
ABC
Allocation
Need
Available
P0
753
010
743
332
(230)
P1
322
200
(302)
122
(020)
P2
902
302
600
P3
222
211
011
P4
433
002
431
1)T0时刻的安全性:利用安全性算法对T0时刻的资源分配情况进行分析如下图可知,在T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的。
T0时刻的安全序列
Work
Work+Allocation
Finish
532
true
745
1047
1057
2)P1请求资源:P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查:
(1)Request1(1,0,2)≤Need1(1,2,2)
(2)Request1(1,0,2)≤Aailable1(3,3,2)
(3)系统先假定可为P1分配资源,并修改Available,Allocation和Need1向量,由此形成的资源变化情况如T0时刻的资源分配表中的圆括号所示。
(4)再利用安全性算法检查此时系统是否安全。如下图所示:
P1申请资源时的安全性检查
230
020
755
由所进行的安全性算法检查得知,可以找到一个安全序列{P1,P3,P4,P2,P0}。因此系统是安全的,可以立即将P1所申请的资源分配给它。
3)P4请求资源:P4发出请求向量Request1(3,3,0),系统按银行家算法进行检查:
(1)Request4(3,3,0)≤Need4(4,3,1)
(2)Request4(1,0,2)﹥Aailable(2,3,0),让P4等待。
4)P0请求资源:P0发出请求向量Request0(0,2,0),系统按银行家算法进行检查:
(1)Request0(0,2,0)≤Need0(7,4,3)
(2)Request0(0,2,0)≤Aailable(2,3,0)
(3)系统暂时先假定可为P0分配资源,并修改有关数据,如下图所示:
为P0分配资源后的有关资源数据
030
723
210
5)进行安全性检查:可用资源Available(2,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。
(1)资源分配图
(1)剥夺资源
(2)撤消进程:以最小代价、撤消进程。
编辑――>编译――>链接――>装入――>运行
程序的装入
1.绝对装入方式(适用于单道环境下)
编译后,装入前已产生了绝对地址(内存地址),不可改
2.可重定位装入方式(适用于多道环境下)
静态重定位:装入时完成。
3.动态运行时装入方式
在装入后不能移动,该情况一般在执行时才完成相对-绝对地址的转换且有硬件的支持,能保证进程的可移动性。
1.静态链接(程序运行之前把n个模块链接成一个完整模块,以后不可拆分)
2.装入时动态链接(装入内存时,边装入边链接)
3.运行时动态链接(什么时候运行,什么时候链接)
连续分配方式,是指为一个用户程序分配一个连续的内存空间。
用于单用户、单任务的操作系统中,可把内存分为系统区和用户区两部分,系统区提供给操作系统使用,通常放在内存的地址部分,用户区是指除系统区以外的全部内存空间,提供给用户使用,用户区不能抢占系统区。
1.划分分区的方法
(1)分区大小相等:适合于作业大小相同的,其缺陷是小程序浪费,大程序无法运行。
(2)分区大小不相等:利用率高
2.特点:简单,有碎片(内零头)。
1.分区分配中的数据结构
(1)空闲分区表
(2)空闲分区链
2.分区分配算法
(1)首次适应算法FF
分区按低址-高址链接,找到第一个大小满足的分区划分,有外零头,低址内存使用频繁。
(2)循环首次适应算法
从上次找到的空闲分区的下一个开始查找,空闲分区分布均匀,提高了查找速度,缺乏大的空闲分区。
(3)最佳适应算法
分区按大小递增排序,分区释放时需插入到适当位置。
1.动态重定位的引入
紧凑:通过作业移动将原来分散的小分区拼接成一个大分区。(取消外零头)
作业的移动需重定位,是动态(因作业已经装入)
2.动态重定位的实现(重定位寄存器)
1.对换的定义
所谓对换,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。
2.对换空间的管理
在具有对换功能的OS中,通常把外存分为文件区和对换区。
3.进程的换入和换出
1.页面
(1)页面和物理块
分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页,第1页等,相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框。
(2)页面大小
页太大:页内碎片大;页太小:页表可能会很长,降低页面换进换出的效率。
2.地址结构
以32位地址为例,分页地址中的地址结构如下:
它含有两部分:前一部分为页号P,后一部分为位移量W(页内地址)。图中的地址长度为32位,其中0~11位为页内地址,即每页的大小为4KB;12~31位页号,地址空间最多允许有1M页。
若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:P=INT[A/L];d=[A]MODL其中INT是整除函数,MOD是取余函数。例如,其系统的页面大小为1KB,设A=2170B,则由上式可以求得P=2,d=122。
3.页表
页表的作用是实现从页号到物理块号的地址映射。
地址变换机构的任务,实际上只是将逻辑地址中的页号,转换为内存中的物理块号,其借助于页表来完成。
1.基本的地址变换机构
2.具有快表的地址变换机构
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。为了提高地址变换速度,可在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓存寄存器,又称为“联想寄存器”或“快表”。
如果说,推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力,是提高内存利用率,那么引入分段存储管理方式的目的,则主要是为了满足用户(程序员)的需要。
引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:
方便编程,信息共享,信息保护,动态增长,动态链接。
1.分段
2.段表
在动态分区分配方式中,系统为整个进程分配一个连续的内存空间,而在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。
3.地址变换机构
4.分段和分页的主要区别
(1)页是信息的物理单位,分页是为了实现离散的分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它包含一组意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2)页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3)分页的作业地址空间是一维的,分段的作业地址空间是二维的。
5.分段系统的突出优点:易于实现段的共享。
分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需要。
1.常规存储器管理方式的特征
(1)一次性
(2)驻留性
2.局部性原理
局限性又表现在下述两个方面:
(2)空间局限性
3.虚拟存储器的定义
所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
1.分页请求系统
(1)硬件支持
主要的硬件支持有:请求分页的页表机制;缺页中断机构。地址变换机构。
(2)实现请求分页的软件
2.请求分段系统
(1)请求分段的段表机制
(2)缺段中断机构
(3)地址变换机构
1.多次性
2.对换性
3.虚拟性
另外离散性也是虚拟存储器特征。
1.页表机制
页号
物理块号
状态位P
访问字段A
修改位M
外存地址
2.缺页中断机构
4.6.2内存分配策略和分配算法
1.最小物理块数的确定
最小物理块数,是指能保证进程正常运行所需的最小物理块数。
2.物理块的分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。
(1)固定分配局部置换
为每个进程分配一定数目的物理块,在整个运行期间都不再改变。缺点:难以确定固定分配的页数,(少:置换率高,多:浪费)
(2)可变分配全局置换:先为系统中的每个进程分配一定数目的物理块,而OS自身也保持一个空闲物理块队列。当某进程发现缺页时,由系统从空闲物理块队列中,取出一个物理块分配给该进程,并将欲调入的缺页装入其中,这样,凡产生缺页(中断)的进程,都将获得新的物理块。
(3)可变分配局部置换
假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1。
1.最佳置换算法
2.先进先出页面置换算法
在I/O系统中,除了需要直接用于I/O和存储信息的设备外,还需要有相应的设备控制器和高速总线,在有的大、中型计算机系统中,还配置了I/O通道或I/O处理机。
1.I/O设备的类型
1)按传输速率分类
(1)低速设备:键盘、鼠标,几个字节-几百字节/秒
(2)中速设备:打印机,几个~几百字节/秒
(3)高速设备:磁带机、磁盘机、光盘机,几十万~几兆/秒
2)按信息交换的单位分类
(1)块设备:数据的存取以数据块为单位,如磁盘、DMA可寻址。
(2)字符设备:传输速率低、不可寻址、I/O时,采用中断驱动方式。
3)按设备的共享属性分类
(1)独占设备。
(2)共享设备:磁盘
(3)虚拟设备。
2.设备与控制器之间的接口
(4)1)设备与设备控制器接口中的三类信号:
(5)(1)数据信号。控制器→设备;或设备→控制器。(双向)
(6)(2)控制信号。控制器→设备;用于规定设备执行读或写操作的信号,
(7)(3)状态信号。是指示设备当前状态的信号。
设备控制器的主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,已使处理机从繁杂的设备控制事务中解脱出来。
1.设备控制器的基本功能
(1)接受和识别命令
(2)数据交换
(3)标识和报告设备的状态
(4)地址识别
(5)数据缓冲
(6)差错控制
2.设备控制器的组成
(1)设备控制器与处理机的接口:数据线、控制线、地址线、
(2)设备控制器与设备的接口。
(3)I/O逻辑。
1.I/O通道设备的引入
I/O通道是一种特殊的处理机,与CPU共享内存。
2.通道类型
(1)字节多路通道
(2)数组选择通道
(3)数组多路通道
3.瓶颈问题
解决瓶颈问题最有效的方法是增加设备到主机间的通路而不增加通道。
I/O控制发展:(发展宗旨:减少主机对I/O控制的干预,更多地去完成数据处理任务)
程序I/O方式;
↓
中断驱动方式;
DMA控制器,使传输以字节为单位变成以数据块为单位。
通道。使I/O的组织和数据的传送,都能独立进行,无需CPU干预。
CPU需花代价不断查寻I/O状态,CPU总在查询,CPU资源浪费极大,效率低。
CPU只处理I/O中断,不等待I/O。
1.DMA控制方式的引入
(1)本传输单位是数据块。
(2)的数据是从设备直接送入内存的。
(3)送一个或多个数据块的开始和结果时,才需CPU干预。
2.DMA控制器的组成
(1)主机与DMA控制器的接口
(2)DMA控制器与块设备的接口
(3)I/O控制逻辑
有专门的设备分配程序对设备进行分配。
1.设备控制表DCT(DeviceControlTable)
2.控制器控制表COCT、通道控制表CHCT和系统设备表SDT
1.设备的固有属性
(1)独占设备
(2)共享设备
(3)虚拟设备
2.设备分配算法
(1)先来先服务FCFS
(2)优先级高者优先
设备独立性,即设备无关性,指应用程序独立于具体使用的物理设备。
1.定义
这种在联机情况下实现的同时外围操作称为spooling(SimultaneousPerihernalOperationsOn-Line),或称为假脱机技术。
2.SPOOLing系统的组成SPOOLing技术是对脱机输入、输出系统的模拟,通常采用磁盘存储技术。
1)输入井和输出井:输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。
2)输入缓冲区和输出缓冲区:其目的是为了缓和CPU和磁盘之间速度不匹配的矛盾。
(1)spi(输入设备→输入缓冲区→输入井)→内存。
(2)spo(内存→输出井→输出缓冲区)→输出。
3)输入进程spi和输出进程spo。
3.共享打印机
当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不真正立即把打印机分配给该用户进程,而只为它做两件事:
1)由输出进程在输出井中为之申请一空闲磁盘块区,并将要打印的数据送入其中。
2)输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上。如果还有进程要求打印输出,系统仍可接收该请求,也同样为该进程做上述两件事。
当打印机空闲时,输出进程完成以下动作。
(1)从请求打印队列队首取一张请求打印表。
(2)将打印数据从输出井送到打印机缓冲区(输出缓冲区)。
(3)打印。
(4)打印完?N→转第1步,取下一个打印请求表。
↓Y
结束工作
4.SPOOLing系统的特点
(1)提高I/O速度。
(2)将独占设备改造为共享设备。
(3)实现了虚拟设备功能。
设备处理程序通常又称为设备驱动程序,它是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程。其主要任务是接收上层软件发来的抽象要求,再把它转换为具体要求后,发送给设备控制器,启动设备去执行;此外,它也将由设备控制器发来的信号传送给上层软件。
1.数据的组织和格式
磁盘设备可包括一或多个盘片,每片分两面,每面可分成若干条磁道,各磁道之间留有必要的间隙。
磁道——扇区——字节
2.磁盘的类型
(1)固定头磁盘
(2)移动头磁盘
m是常数,它与磁盘驱动器的速度有关。
1.先来先服务FCFS(FirstCome,FirstServed)
3.扫描(SCAN)算法
4.循环扫描(CSCAN)算法
(从100号磁道开始)
被访问的下一个磁道号
移动距离(磁道数)
90
58
55
39
38
18
150
160
184
10
32
16
20
132
24
平均寻道长度:27.5
45
19
21
72
70
112
146
平均寻道长度:55.3
先来先服务FCFS
(从100#磁道开始,向磁道号增加方向访问)
50
166
平均寻道长度:35.8
CSCAN调度算法
94
平均寻道长度:27.8
SCAN调度算法
5.N-Step-SCAN和FSCAN调度算法
1)N—Step—SCAN
粘臂:由于连续对某磁道访问引起的垄断访问,将磁盘请求队列分为长为N的子队列m个,如下图处理。当N=1时,为FCFS。当N时,为SCAN.
2)FSCAN
磁盘高速缓存是指利用内存中的存储空间,来暂存从磁盘中读出的一系列盘块中的信息。
1.提前读
2.延迟写
3.优化物理块的分布
4.虚拟盘:是指利用内存空间去仿真磁盘,又称为RAM盘。虚拟盘与磁盘高速缓存的主要区别在于:虚拟盘中的内容完全由用户控制,而高速磁盘缓存中的内容则是由OS控制的。