|
(2)进程调度
进程调度即处理器调度,它的主要功能是确定在什么时候分派处理器,并确定分给哪一个进程。在分时系统中,一般有一个确定的时间单位(称为时间片),当一进程用完一个时间单位时,就发生进程调度(又称上下文转换),即让正在运行的进程改变状态并转入就绪队列尾,再由调度原语将就绪队列的首进程取出,投入运行。进程调度的方法基本上分为两类:剥夺调度与非剥夺调度。所谓非剥夺调度是指一旦某个作业或进程占有了处理器,这个进程就占用处理器直到主动放弃处理器为止,相反,如果其他进程可获得处理器的使用权则是剥夺调度。在有些进程(如高优先级进程)需要快速服务的系统中,剥夺调度是非常有用的。例如,在实时系统中丢失一个中断的后果将是灾难性的。交互式系统中,为保证用户可接受的响应时间,剥夺调度也十分重要。在非剥夺系统中,短的作业常常等待长的作业,但所有进程受到的服务是公平的,响应时间是可以预测的。对就绪队列的处理体现了调度策略,常用的是按优先级处理。有两种确定优先级的方法,即静态优先级和动态优先级。静态是指进程的优先级在进程开始运行前确定,运行过程中不变,而动态优先则可以在进程运行过程中改变。进程调度的算法是服务于系统目标的策略,对于不同的系统与系统目标,常采用不同的调度算法,如:?先来先服务(FCFS):又称先进先出(FIFO),就绪队列按先来后到原则排队。?优先数调度:优先数反映了进程优先级,就绪队列按优先数排队。?轮转法(round robin):就绪队列按FCFS方式排队。每个运行进程一次占有处理器时间都不超过规定的时间单位(时间片)。若超过,即调用调度原语而形成就绪进程轮流使用服务器。
四、存储管理
1.引言
现代计算机系统中的存储系统常是多级存储体系,至少有主存(内存)和辅存(外存)两级。有的系统有更多级。主存是由系统实际提供的存储单元(常指字节)组成的一个连续地址空间,处理器可直接存取。辅存是指软盘、硬盘、光盘和磁带等一些外部存储部件,常用来存放暂不执行的程序和数据,处理器不能直接访问,需通过启动I/O设备,才能进行内存、外存交换。其访问速度慢,但价格便宜,常用作主存的后援设备。主存大小由系统硬件决定,是实实在在的存储,它的存储容量受到实际存储单元的限制。虚拟存储(简称虚存)不考虑实际主存的大小和数据存取的实际地址,只考虑相互有关的数据之间的相对位置,其容量由计算机的地址的位数决定。系统中主存的使用一般分成两部分,一部分为系统空间,存放操作系统本身及相关的系统数据,另一部分为用户空间,存放用户的程序和数据。
(1)地址重定位用户程序需调入主存运行,即从辅存把用户已经编译链接的目标程序(有时称为可执行程序)装入主存。由于用户作业的存储空间是运行时确定的,所以程序中的操作地址都采用相对地址(逻辑地址)的形式。把相对地址空间的程序转换成在绝对地址(物理地址)空间上能够执行的过程称为地址重定位,也称为地址映射或地址映像。地址重定位有两种:静态重定位和动态重定位。静态重定位是指在程序装入时完成,一般由软件实现;动态重定位是指在程序执行时实现地址转换,它通常由一个基本地址寄存器和一个加法器组成的动态重定位机制实现。
(2)存储管理的功能早期的单用户操作系统,一次只允许一个用户程序驻留,它拥有用户地址空间的全部访问权限,存储管理的任务是存储空间的分配与回收。在多道程序系统,多个程序同时驻留内存,如何有效地利用主存,如何让需要较大运行空间的作业运行,如何保护与共享主存等,都是存储管理应解决的问题。存储管理应提高存储资源的利用效率,又方便用户使用,存储管理的任务应具有如下功能:①分配与回收:主存分配方法有两种:静态分配与和动态分配。静态分配是指在目标模块装入主存时即取得所需空间,直至完成不再变动;动态分配则允许进程在运行过程中继续申请主存空间。采用动态分配方法的系统中,常配合使用合并自由区的方法,使一个连续的空区尽可能地大。②存储扩充:提供虚拟存储器,使计算机系统似乎有一个比实际主存储器容量大的主存空间。需考虑放置策略。③共享与保护:共享指共享在主存中的程序或数据,如多个用户共享编辑程序成编译程序等。由于多道程序共享主存,每个程序都应有它单独的主存区域,各自运行,互不干扰。
2.实存管理
(1)单一连续分配在单道程序系统中,主存区域的用户空间全部为一个作业或进程占用,单一连续分配方法主要用于早期单道批处理系统以及80年代个人计算机系统,单一连续分配方法主要采用静态分配方法,为降低成本和减少复杂度,常不对主存进行保护,会引起冲突而使系统瘫痪。
(2)固定分区分配固定分区分配法是把主存空间固定地划分为若干个大小不等的区域,划分的原则由系统决定。系统使用分区表描述分区情况。
(3)可变分区分配可变分区分配方法是将主存空间按用户要求动态地划分若干个分区。这样就消除了固定分区分配方法中的小作业占据大分区造成的浪费(这种浪费称为内碎片)。可变分区分配系统中初始时只有一个分区。随后,分配程序将这个区依次分给作业或进程。继续考察连续分配方案:一个作业必须占据相邻接的存储单元。在可变分区分配系统中,并不作出作业有多长的的假定(除了它们不能大于计算机内可利用主存的尺寸之外。当作业到达时,如果调度机构决定它们开始运行,它们就能获得必要的存储区,一点浪费也没有———存储区的分区与作业的长度相符。)但是,每种存储组织方案都包含一定程度的浪费。在可变分区分配系统中,主存中的作业在开始装入和归还自由区之前,主存浪费并不明显,这些自由区可以被其分作业使用。即使如此,剩余的自由区域可能变得很小。因此在可变分区分配系统中,确实会出现存储器浪费,这种现象称为外部碎片。①合并自由区在可变分区分配系统中,当一个作业完成时,能够检测到被释放的存储区是否与其他自由存储区域(自由区)相邻接。如果与其他自由存储区邻接,可以在自由存储区表记录上新增加一个自由区,或新的自由区与相邻接的现存自由区合并的单一自由区。合并相邻接的自由区以形成单个更大的自由区的过程叫做合并。用合并自由区的方法,我们重新获得最大可能连续的存储块。②存储拼接即使合并了自由区,经常发现分布在主存各处的破碎的自由区在主存中占据了相当数量的空间。有时,当一个作业申请一定数量的主存,而此时却没有单个的自由区大到足够装下这个作业,虽然自由区的总和大于新作业所要的存储区。存储拼接或存储紧凑也称碎片收集,移动存储器中所有被占用的区域到主存的某一端。这样留下单独的大的存储自由区,取代在可变分区多道程序设计中常见的许多小自由区。当所有可利用的自由存储区连续时,一个正等待着的作业能够调入运行,因为它的存储需求能被拼接形成的单个自由满足。③存储分配算法存储分配算法用来决定输入的程序和数据放到主存中的什么地方。
共17页: 上一页 [1] [2] [3] 4 [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] 下一页
|