1 / 109

操作系统 Operating System

操作系统 Operating System. 教学目的. 通过对本章的讲解使学生理解并掌握存储管理功能,各种内存分配方式,如连续分配方式,离散分配方式以及虚拟存储的基本理论。. 本章重点:. 程序的装入方式 连续分配方式的管理 离散分配方式的管理 虚拟存储的基本理论. 本章难点:. 地址变换的实现 虚拟存储的理解 页面置换算法的实现. 第 4 章 存储管理. §4.1 存储管理的原理 §4.2 连续分配存储管理 §4.3 离散分配存储管理 §4.4 内核主存管理 §4.5 虚拟存储技术 §4.6 虚拟页式存储管理

Download Presentation

操作系统 Operating System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 操作系统Operating System

  2. 教学目的 • 通过对本章的讲解使学生理解并掌握存储管理功能,各种内存分配方式,如连续分配方式,离散分配方式以及虚拟存储的基本理论。

  3. 本章重点: • 程序的装入方式 • 连续分配方式的管理 • 离散分配方式的管理 • 虚拟存储的基本理论

  4. 本章难点: • 地址变换的实现 • 虚拟存储的理解 • 页面置换算法的实现

  5. 第4章 存储管理 §4.1 存储管理的原理 §4.2 连续分配存储管理 §4.3 离散分配存储管理 §4.4 内核主存管理 §4.5 虚拟存储技术 §4.6 虚拟页式存储管理 §4.7 虚拟段式存储管理 §4.8 存储管理实例

  6. 单连续区 固定分区 可变分区 内核存储管理 连续存储方式(实存) 分页 分段 段页式 实存 离散 虚拟页式 虚拟段式 虚拟段页式 虚存 本章学习目标 • 本章首先介绍了存储管理的研究对象和目的,明确了存储管理的基本功能和原理;然后从连续、离散(实存、虚存)两个角度,分别介绍了常用的几种存储管理方案;最后介绍了当前主流操作系统中存储管理实例。 存储管理方式一览表 存储方式

  7. §4.1 存储管理的原理 §4.1.1 存储器 §4.1.2 存储管理的原理 §4.1.3 存储管理的机制和策略

  8. §4.1.1 存储器 主存(内部存储器,磁芯存储器) 1.存储器 辅存(外存)磁盘、磁带、软盘) 高速缓冲存储器Cache 通常将用户的作业放在主存中执行;而把那些不立即使用的程序、数据放在外存中,用到时再将它们调入内存中;在程序运行时,为了提高对数据的存取速度,会将一些常用的表格,变量,临时数据等放入到高速缓存中。

  9. 系统区 用户区 2.主存(内存) 程序的指令和数据只有放在内存中,CPU才能对其进行直接存取,或者说该程序才能被执行。可见内存资源是进程执行时不可或缺的条件之一。 由于系统开工期间,OS程序与其他程序一起共享主存,为安全起见,多道程序系统常由OS把内存初始化为: 系统区 (存放OS程序和数据) 主存 用户区 (存放用户程序、数据) 存储管理常指对用户区进行管理

  10. §4.1.2 存储管理的原理 1.存储管理的原理 (1)程序执行过程 首先CPU通过程序计数器中的值从内存中取得相应的指令,指令被译码后根据要求可能会从存储器中再取得操作数。对操作数处理完成后,操作结果又会存储到存储器中;进程在运行过程中依据任务的要求也会请求内存空间,如I/O需要缓冲区、存放临时数据等,这涉及到内存的分配与回收问题。 (2)存储管理的主要工作 就是负责内存空间的使用管理,即为进程分配与回收空间,将程序装入指定内存区域;再从指定的存储单元中读写数据,而内存单元的读写操作是由主存硬件完成的,所以对主存发出的读写请求只要指定主存单元就行。

  11. 2.存储单元与物理地址空间 (1)物理地址(绝对地址) 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可唯一标识一个存储单元,称为内存地址(或物理地址)。 (2)物理地址空间 是指物理地址的集合,也叫绝对地址空间或实空间或存储空间,亦即内存空间。存储空间中的单元一般都是按字节从0开始连续编址的,内存空间的最大容量由地址总线决定。如地址总线有24根,则其地址范围是0~~16M-1(224-1),最大容量为16M。 (3)存储单元的访问 存储器只能通过物理地址访问内存单元。即给出欲访问的存储单元绝对地址,存储器即可对其进行读写操作。

  12. 3.作业的装入 (1)作业的处理过程 用户的作业总是由一个或若干个源程序文件组成,编译或汇编程序可对源程序文件进行编译或汇编形成相应的目标模块,再由连接程序将这些目标模块和库函数连接成一个完整的装入模块,最后将其装入内存执行。 (2)名字空间 用汇编语言或高级语言编写程序时,总是通过符号名来访问某一单元。我们把程序中由符号名组成的空间称为名空间。 (3)逻辑地址空间 源程序经过汇编或编译并再经过链接程序所装配形成的程序,通常是以0为基址进行顺序编址,或者是分成若干个部分,每个部分以0为基址,这样的地址表示形式称为相对地址,也叫做逻辑地址或虚地址,把该程序逻辑地址组成的集合叫做程序的逻辑地址空间(简称地址空间,也叫相对地址空间或虚空间) 。

  13. 【作业的名空间、逻辑地址空间和物理空间】

  14. 4.地址重定位 (1)地址变换 作业运行时不能按其相对地址访问内存单元,而应按相应的物理地址访问。因此将一个逻辑地址空间的程序装入到物理地址空间时,由于两个空间不一致,需要进行相对地址到物理地址的转换,即地址的重定位。也就是说将虚地址映射为内存地址,这种作法叫做地址重定位或地址变换或地址映射。地址重定位有两种方式:静态重定位和动态重定位。 (2)静态地址重定位 静态地址重定位是在程序执行之前由操作系统的重定位装入程序完成的。在装入一个作业时,把作业中的指令地址全部转换为绝对地址(地址转换工作是在作业执行前集中一次完成的)在作业执行过程中就无须再进行地址转换工作。

  15. 静态地址重定位的优点是容易实现,无需硬件支持,它只要求程序本身是可重定位的,即对那些要修改的地址部分具有某种标识,地址重定位由专门设计的程序来完成。在早期的操作系统中大多数都采用这种方法。其主要缺点是程序经地址重定位后就不能移动了,因而不能重新分配内存,不利于内存的有效利用。静态地址重定位的优点是容易实现,无需硬件支持,它只要求程序本身是可重定位的,即对那些要修改的地址部分具有某种标识,地址重定位由专门设计的程序来完成。在早期的操作系统中大多数都采用这种方法。其主要缺点是程序经地址重定位后就不能移动了,因而不能重新分配内存,不利于内存的有效利用。 静态地址重定位示例

  16. (3)动态地址重定位 动态地址重定位是在程序执行期间进行的。在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。 通过基地址寄存器、变址寄存器计算出指令的有效地址,再利用硬件机构实现地址映射,这样的硬件设备称为存储管理单元MMU(Memory-Management Unit)。 通常采用的办法是利用一个重定位寄存器,对每一个有效地址都要加上重定位寄存器中的内容,以形成绝对地址。

  17. 动态地址重定位的优点是程序在内存中的搬移不会对程序的正确执行造成影响,使内存得以被充分利用,其缺点是需要附加的硬件支持,实现存储管理的软件算法比较复杂。动态地址重定位的优点是程序在内存中的搬移不会对程序的正确执行造成影响,使内存得以被充分利用,其缺点是需要附加的硬件支持,实现存储管理的软件算法比较复杂。

  18. §4.1.3 存储管理的机制和策略 • 在多道环境下,存储管理不但要为进程提供内存资源,还要为内存的使用提供安全保障机制,如防止进程非法访问不属于自已的空间。 • 为了提高内存资源的利用率,存储管理还要提供共享机制,也就是当若干个进程调用同一段代码或数据时,系统应为共享的代码或数据保留一个副本而不是多个。 • 这是从节省资源使用出发,但是作为有限的内存资源,经常有不够用的时候。随着主存元器件成本的下降,主存的容量在不断地增长,但是在主存中运行的作业数也在增加,同时用户作业的规模也在不断地加大,因而内存容量总是很紧张。所以存储管理为了能运行大作业或尽可能多地执行任务,就要提供内存扩充技术。综上所述,存储管理的功能如下所示:

  19. 【存储管理的功能】 1.内存的分配与回收 • 每一个进程运行时都需要内存资源, 因此内存空间的分配和回收是存储管理的基本功能。在进程创建时按照一定的存储策略为其分配内存空间,进程运行结束时,再将其所占用的内存空间收回。 • 为了记录内存的使用情况,存储管理会依据存储策略采用相应的数据结构,标识哪些区域尚未分配,哪些区域已经分配以及分配给哪些进程等。每一个进程运行时都需要内存资源, 因此内存空间的分配和回收是存储管理的基本功能。在进程创建时按照一定的存储策略为其分配内存空间,进程运行结束时,再将其所占用的内存空间收回。 • 为了记录内存的使用情况,存储管理会依据存储策略采用相应的数据结构,标识哪些区域尚未分配,哪些区域已经分配以及分配给哪些进程等。系统通过所采用的数据结构来管理内存空间。

  20. 【存储管理的功能】 • 内存分配按分配时机的不同,可分为两种方式。 • (1)静态存储分配:指内存分配是在作业运行之前各目标模块连接后,把整个作业一次性全部装入内存,并在作业的整个运行过程中,不允许作业再申请其他内存,或在内存中移动位置。也就是说,内存分配是在作业运行前一次性完成的。 • (2)动态存储分配:作业要求的基本内存空间是在目标模块装入内存时分配的,但在作业运行过程中,允许作业申请附加的内存空间,或是在内存中移动,即分配工作可以在作业运行前及运行过程中逐步完成。

  21. 【存储管理的功能】 • 2.地址映射与存储保护 • 在多任务环境下,为防止内存中各程序相互干扰,必须对内存中的程序和数据进行保护。规定每一个进程只能在自己的存储区内活动,否则产生越界中断。 • 存储保护一般以硬件保护机制为主,软件为辅。因为完全用软件实现系统开销太大,速度成倍降低。故采用软、硬件相结合的方式,一旦发生越界或非法操作时,硬件保护机制产生中断,进入操作系统处理。 • 存储保护机制应设置在主存操作之前,也就是存储保护机制对每一个欲访问的主存地址都要进行检察。若为合法访问,就可以去相应的内存单元中存取数据;否则就产生一个错误中断交由操作系统处理,即该次访问内存操作被终止。

  22. 【存储管理的功能】 • 常用的存储保护方法有: • (1)上、下界存储保护:上、下界保护是一种简单的存储保护技术。系统可设置一对上、下界寄存器,分别用来存放当前运行进程在内存空间的上、下边界地址,用它们来限制用户程序的活动范围。 • (2)基址—限长存储保护:上、下界保护的一个变种是采用基址—限长存储保护。在限长寄存器中存放作业的长度,地址转换前进行测试,若逻辑地址的值大于限长值,就属于非法访问,产生一个越界中断,交由操作系统处理;若逻辑地址的值小于限长值,则表示地址合法,可以对其进行存取。只有这样内存中的进程才不会相互干扰,才能相对独立。

  23. 【界限寄存器的两种存储保护方式】

  24. 【存储管理的功能】 存储保护还涉及对所访问区域的权限检查。 应对每个访问共享区域的进程设置访问权限。进程对共享区域的操作不能超出自己的权限范围,即对公共区域的访问要加以检查以防越权。 • 权限的设置通常可以采用如下原则: ⑴ 对属于自己区域的信息,可读可写。 ⑵ 对公共区域中允许共享的信息或获得授权可使用的信息,可读而不可修改。 ⑶ 对未获授权使用的信息,不可读、不可写。

  25. 【存储管理的功能】 3.内存共享与扩充 • 内存空间共享有两方面的含义:一是指内存被多个并发进程所共用,即每一个进程占据内存的一段相对独立的区域;二是指内存中某一区域的信息可被多个进程共享。很显然,共享将极大地提高内存空间的利用率。 • 可被共享的内容既可以是程序代码,也可以是数据。如果是代码共享,则共享的代码必须是纯代码,或称“可再入程序”。即它在运行过程中不修改自身,可再入程序所使用的工作区由调用它的进程提供。信息共享可以节省内存空间,还可以实现进程间通信。 • 内存扩充技术主要有: (1)覆盖技术,节约内存使用; (2)交换技术,轮流使用内存; (3)虚拟存储管理技术,用外存补充内存的不足。

  26. §4.2 连续分配存储管理 §4.2.1 单连续存储管理 §4.2.2 固定分区存储管理 §4.2.3 可变分区存储管理** §4.2.4 连续分配中内存扩充技术 连续分配是指每一进程占据连续的空间,可分为单连续、固定分区及可变分区三种形式。

  27. §4.2.1 单连续存储管理 单一连续分配是一种简单的存储分配方案,主要用于单用户单任务操作系统。 通常内存被划分为系统区和用户区。系统区是操作系统专用区,不允许用户程序直接访问,一般在内存低地址部分,剩余的其它内存区域为用户区。 1.内存分配与回收 一道用户程序独占用户区,如图所示。 注意:本章所述的内存分配与回收都指用户区的分配与回收,除非特别说明。

  28. 2.地址映射 物理地址=用户区基地址+逻辑地址。 3.内存保护 通过基址寄存器保证用户程序不会从系统区开始;另外系统需要一个界限寄存器,里边存储程序逻辑地址范围,若需要进行映射的逻辑地址超过了界限寄存器中的值,则产生一个越界中断信号送CPU。 4.单一连续分配方案的优缺点 优点:方法简单,易于实现; 缺点:它仅适用于单道程序,因而不能使处理机和内存得到充分利用。

  29. §4.2.2 固定分区存储管理 • 分区存储管理是把主存储器中的用户区分成若干个连续区进行管理,每个连续区中可装入一个作业。 • 多道程序系统一般都采用多个分区的存储管理,具体可分为固定分区和可变分区两种方式。

  30. 分区划分 1.分区划分方法 适合于对象所需空间相等的情况;缺乏灵活性,易造成内存空间的浪费。 分区大小相等: 是对分区大小相等方式的改进,可更好地适应程序的大小。 分区大小不等: OS 把主存中可分配的用户区域预先划分成若干个连续的分区,每个连续区的大小可以相同,也可以不同。但是,一旦划分好分区之后,主存中分区的个数就固定了,且每个分区的大小也固定不变。这是一种静态分区法。

  31. 0 OS a b c d 2.主存分配表 由于主存中有多个分区,为了管理主存空间的使用,必须设置一张“主存分配表”,以说明各分区的分配情况。 主存分配表 空 job2 空

  32. 0 32k 40k 56k 88k OS 作业A(6k) 区号 分区大小 起始地址 标志位 0 32k 0k 1 1 8k 32k 1 2 16k 40k 0 3 32k 56k 1 4 64k 88k 0 作业B(28k) 3.主存空间的分配与释放 • 主存分配表中应指出各分区的起始地址和长度,并为每个分区设一个标志位。当标志位为“0”时,表示对应的分区是空闲分区,当标志位为非“0”时,表示对应的分区已被某作业占用。空闲分区可以用来装作业。

  33. 等待进入主存的作业排成一个作业队列。当主存中有空闲的分区时,依次从作业队列中选择一个能装入该分区的作业。当所有的分区都已装有作业,则其他的作业暂时不能再装入,绝对不允许在同一分区中同时装入两个或两个以上的作业。已经装入主存的作业在获得处理机运行时,要限定它只能在所占的分区中执行。等待进入主存的作业排成一个作业队列。当主存中有空闲的分区时,依次从作业队列中选择一个能装入该分区的作业。当所有的分区都已装有作业,则其他的作业暂时不能再装入,绝对不允许在同一分区中同时装入两个或两个以上的作业。已经装入主存的作业在获得处理机运行时,要限定它只能在所占的分区中执行。

  34. 当作业队列中有作业要装入主存时,存储管理可采用“顺序分配算法”进行主存空间的分配。当作业队列中有作业要装入主存时,存储管理可采用“顺序分配算法”进行主存空间的分配。 • 顺序查看主存分配表,找到一个标志为“0”的并且长度大于或等于欲装入作业的地址空间长度的分区,则把此分区分配给该作业,相应表目的标志位改成作业名的标识;若找不到一个这样的空闲分区,则该作业暂时不能装入主存。 • 主存空间的释放很简单,某作业执行结束后必须归还所占的分区,这时存储管理根据作业名查看主存分配表,找到相应的表目后,把其中的标志位重新置成“0”即可。

  35. 4.地址转换 • 固定分区管理方式下作业的地址转换常采用静态重定位技术。 • 物理地址=分区始址+逻辑地址 5.存储保护 固定分区管理方式下只考虑判断其物理地址即可。常采用“界限寄存器对”法。 If 下限地址<=物理地址<=上限地址 Then 继续 Else 产生“越界中断” ,转越界中断的处理子程序

  36. 6.固定分区的缺点 碎片大,存在小分区占用大作业的情况。不利于提高内存资源的利用率 。可调入的作业大小受分区大小的严格限制。 内存空间利用率低,如图。5道进程大小总和为250 KB,但是所占5个分区总容量却达到1000 KB,内存空间利用率仅达到25%。 解决办法: 采用可变分区存储管理

  37. §4.2.3 可变分区存储管理 • 为了改善固定分区分配给系统带来的内存碎片太大、空间浪费严重的缺陷,提出了动态分区分配,也叫做可变式分区分配的策略,即根据进程的实际需求动态地划分内存的分区方法。它是在进程装入和处理过程中建立分区,并要使分区的容量能正好适应进程的大小。而整个内存分区数目随着进程数目的变化而动态改变,各个分区的大小随着各个进程的大小各有不同,所以称之为动态分区分配。 • 动态分区又称之为可变分区,或变长分区模式,主要克服固定分区管理的“内碎片”问题。

  38. 例子:一计算机系统有2560KB内存,采用可变分区模式管理,OS占低地址的400KB空间,用户内存为2160KB。例子:一计算机系统有2560KB内存,采用可变分区模式管理,OS占低地址的400KB空间,用户内存为2160KB。 OS OS OS OS OS P1 P1 P1 P1 P2 P3 P3 P1 P2 P2 P4 P3

  39. 1.动态分区中的数据结构 和固定分区相似,动态分区也可以采用表格的形式来管理内存空间。可用一张已分区表来表示被分配出去的分区,用一张空闲分区(未分区)表来表示空闲分区。在这种方式下,由于分区个数不定,因而已分区表或空闲分区表应该有一定的冗余,此时占用标志位表示已分区表中的表项是否被使用,置1表示被使用,置0表示空闲。 为了节省内存空间,系统中的空闲分区也可采用空闲区链表的方法来管理。利用空闲分区的前几个字节,记录此分区的长度、起始地址和下一个分区的起始地址(即链指针)。从而将所有的空闲区链接起来,即将所有的空闲区链接成一个链。空闲区链表不占用额外的存储空间,因此采用这种方法,可以避免考虑空闲分区表的冗余问题。

  40. 动态分区流程

  41. 2.动态分区分配算法 1) 首次适应算法(FF, First Fit) 空闲分区链或空闲分区表以地址递增的顺序链接,分配时从链首开始查找,找到第一个大小可以满足的分区为止,从其中划分出所需空间分配给申请的进程,剩余部分仍旧作为一个分区保留在空闲分区链中,否则给出无法分配的提示。 采用这种方法时,每次分配都需要从链首也就是低地址开始查找,所以低地址由于被划分的可能性比较大,容易形成多个过小分区而难以利用,成为外部碎片(前面所描述的在每个分区内的“碎片”相应称为内部碎片)。同时这些小分区增加了查寻时的判断时间,降低了效率。

  42. 2) 循环首次适应算法 为了改变首次适应算法每次从链首开始查寻造成的缺陷,可以增加一个起始查寻指针,指向下一次开始查寻时的起始分区,在查寻过程中,该指针向后移动,当移动到最后一个空闲分区后,重新回到链首。找到适当分区后,按首次适应算法的划分分区方式进行。这种方法可以使内存区分配比较平均,减少查寻次数,但又造成了缺少大空闲分区,使得大进程无法进入。 首次适应算法实现比较简单直接,易于释放时合并相邻空间分区。比较容易的满足大作业的需要。完成一次分配平均需要的搜索次数较大,影响了工作效率。

  43. 3) 最佳适应算法 搜索整个空闲区以找出满足进程要求的最小空闲区。 先使用小的空闲区,将大的空闲区留给大作业,所以它总是试图找出最接近实际需要的空闲区。 空闲分区链按照分区容量递增的方式形成,分配时从链首开始查找,这样找到的第一个大小可以满足的分区肯定是与进程申请空间大小最接近,甚至是完全吻合的分区,而且平均查找次数为分区数的一半,也就是说它是“最佳适应”的。 评价:尽可能的保留了较大的空间。 产生大量的不易被使用的很小的空闲区。 该算法不一定是最佳的。

  44. 4) 最差适应算法 目标:总是搜索整个链表以找到够用的最大的空闲区,使分裂出来的小空闲区比较大,因而可以继续使用。因此空闲分区链按照分区容量递减的方式形成,分配时从链首开始,若链首分区大小不满足,则可以肯定不存在能够满足要求的分区;否则对链首分区进行划分,剩余空间成为“碎片”的可能性肯定是最小的。 评价:最差适应算法具有查找速度快,分区碎片少,分割后产生的空闲区一般仍可以供以后分配使用。 工作一段时间后,不能满足大作业对空闲区的请求。 在这几种分配算法中,一般情况下,首次适应算法是最简单,而且是最快和最好的算法。循环首次适应算法比首次适应算法稍差一些,而最佳适应算法虽然名字中有“最佳”,但实际上是性能最差的。但在某些应用情况下,上述比较结果会有所变化。

  45. 起始地址 长度 标志位 起始地址 长度 标志位 A L1 J1 C L2 J2 E L3 J3 B H1 1 D H2 1 C L2 1 OS A B C D E F J1 L1 H1 L2 J2 H2 J3 L3 3.动态分区的回收 已分区表 回收J2进程 未分区表

  46. 回收内存空间,关键是修改两个表。 (a) M1、M2都非空 (b) M1为空、M2非空 (c) M1为非空、M2空 (d) M1、M2都为空

More Related