博主q q 656358805,欢迎线上交流!
以前我们讲过操作系统的四级调度——作业调度、交换调度、进程调度、线程调度。 那么今天我们就详细讲一下其中的交换调度。
什么是交换调度?
交换调度其实就是对进程激活和挂起的操作,说得明白点,如果在外存中的进程满足了运行条件,它就要等待操作系统讲它从外存调入内存,这就是激活进程,反之,如果内存中的进程阻塞或者就绪,那么操作系统就可能会将他们调出内存到交换区,这就是挂起,交换调度就是这么一个关系到cpu运行效率,系统吞吐量的操作过程。
交换调度的操作是建立在存储设备上的,计算机内部的存储设备有内存和外存,而内存又分为用户区和系统区,他们分别存储用户的应用程序和系统的的程序以及数据,内存容量小存取快,外存容量大存取慢,存储器的基本功能有如下:地址转换、存储保护、共享、内存分配及回收,下面我们详细讲一下这些基本功能。
1、地址转换:逻辑地址转化成物理地址。
物理地址是计算机的实际单元地址,逻辑地址是源程序中的相对地址,我们知道单核计算机是不可以一下执行多道程序的,但是出于多道程序设计的思路,我们必须利用逻辑地址来实现程序的并行。地址转换的方式有两种:静态地址重定位和动态地址重定位。
静态地址重定位:在一个程序运行之前,操作系统就已经将这个程序的所有指令地址转换成物理地址,当该程序执行的时候就不必再考虑地址问题,这就导致了改程序必须占用连续的内存空间,而且程序不能移动,这种方法不得不说十分愚蠢,设想一下如果现在有一个比内存空间大的程序要运行,然后呢?傻了吧?
动态地址重定位:在程序运行的时候操作系统执行地址转换,使得可以共享程序段,复用内存空间,甚至可以用内存的一个单元执行完一个程序,但是该方法依赖于硬件实现。
2、共享与保护:交换调度的单位是进程,每一个进程中都有它属于自己的程序段,那么这个程序段是不可以被其它程序不经授权就干扰的,这是存储保护,反之,当多个程序需要运行同一个程序段时,操作系统会把这个程序段放在一个公共区域以备调用,这是共享。
3、内存分配回收和扩充:连续分配、离散分配、虚拟存储管理,这里先不详细讲。
存储器通过管理方式来存储程序运行,因此如果我们想提高存储效率,首先应该了解的就是存储器的管理方式,下面我们就讲一讲几种存储管理。
1、分区式存储管理:分区存储管理分为固定分区和动态分区两种管理方式。
固定分区:系统管理员会在程序运行之前把内存分为几块大小一定,数目不变的内存块,每一个内存块用于存储一个进程,当进程开始分配时,一个进程会被分配到比它略大的内存块中,这就不免会导致一个程序快中会有少量空间未利用,这就是内部碎片。其次,为了说明每个内存块的状态,我们有建立了一个分区说明表,它记录了内存的每个程序快的分区号,起始地址,大小以及所存储的进程号。 该分区方式系统开销小,但是内存利用率低,并行的程序有数目限制。
动态分区:在进程进入内存钱,操作系统根据进程的大小来划分存储区域,因此内存的区域个数可变,而且每个区域的空间都被充分利用,但是由于是不连续分配,可能导致两个分区中间有空间未利用,随着进程越来越多,这种未利用的空间也越来越多,这就是外部碎片,可能所有的外部碎片的空间总和可以用来完成执行一个进程,但是他们是分散的就很可惜地被浪费了。而为了不浪费这些空间,我们会将外部碎片拼成一个大的空间,这个过程就是紧凑。紧凑有两种方式,一是在一个进程占用的空间释放时立即紧凑,二是进程找不到足够大的空间时紧凑。动态分区的弊端就是程序在每一个分区中是连续的,而且进程的大小依旧依赖内存空间大小,不能实现虚拟存储。
地址转换:
固定分区可以采用静态地址重定位和动态地址重定位,如果使用前者地址转换后要检查进程的物理地址是否小于某个分区,使用后者则是从分区说明表中获取上下限地址,动态定位物理地址时将下限地址加上某一个值,并且不让其超过上限。
动态分只能用动态地址重定位,因为动态分区中有紧凑操作,紧凑需要移动程序位置,所以不能是静态的。
分区式管理优缺点:实现多道程序设计,提高了内存和cpu的使用率,管理比较简单;然而程序连续受内存容量控制,难以共享,内外部碎片降低了内存利用率。
2、分页式存储管理:将进程逻辑地址分成若干个相等大小的块,每一块成一个页面,然后内存也是如此,每一页又页号和页内地址组成,页号=逻辑地址/页面大小,页内地址=逻辑地址mod页面大小,从而使得将进程中的程序不连续地分散在内存中,得以共享,不过注意,每一页中的程序是连续的哦!分页式管理通过页表、作业表和存储页面来实现存储,页表是进程中程序段逻辑页面到内存物理页面的映射,作业表则是记录当前运行的所有作业的名字、起始地址和占用内存长度,存储页面则是用位示图法或链表法来表示物理页面的占用情况。
那么扯了一大堆鸡眼儿,分页式管理又是怎样进行地址转换的呢?
采用动态重定位法,物理地址和作业表、预知行进程的页表有关——物理地址=页号*页表长度+页内地址(页号<=页表长度)。
而分页式存储管理的分配算法是从存储页面表开始的,如果内存中页面不够提供则中断,如果足够,则计算出页号填入进程页表中,再把页表起始地址和页面长度填入作业表。
分页式存储管理优缺点:程序可离散存储,不会产生外部碎片;然而,内部碎片还在,也需要硬件支持。
3、分段式存储管理:一种特别像源程序的管理方式,将进程的程序分成若干段子程序,包含主程序,每一段有完整的逻辑结构,每一段的长度不一,段与段之间无顺序,每一段由段号和段内地址组成。
地址转换与分页式类似,每个进程中建立段表,包含段号、起始地址、段长度、存取方式,同样也有作业表包含作业名、段表起始地址、段表长度,不一样的是如果某个作业中的某个段表中的一段在内存中则用段表的起始地址加上相对地址得到内存中物理地址,如果不在就依据段的使用率来调度段的吞吐,注意:依旧是段号不能大于段表长度!
分段式管理优缺点:以逻辑的完整性为基础实现共享,为数据段增长保留空间,链接灵活,先运行主程序,子程序用到时才调用。
博主今天累了,就说到这了,多谢读者的支持!