- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统讲义下剖析
操作系统讲义(下)
存储器管理
主要知识点:
一、程序的装入和链接
将一个用户源程序变为一个可在内存中执行的程序,通常要经过编译、链接和装入几个步骤:(1)编译。由编译程序将用户源代码编译成若干个目标模块。(2)链接。由链接程序将编译后形成的目标模块以及它们所需要的库函数,链接在一起,形成一个装入模块。(3)装入。由装入程序将装入模块装入主存的过程。如图4.2
1.程序的装入
程序的装入就是把程序装入内存空间,采用三种方式
(1)绝对装入方式:是由装入程序根据装入模块中的地址,将程序和数据装入内存。程序中的逻辑地址与实现装入的物理地址相同,装入时无需地址转换。
①逻辑地址:用户的每一条程序指令要访问的数据都有一个对应的地址,这个地址被称为逻辑地址。由于它是相对于0的地址,因此又被称为相对地址。
②物理地址:内存中的实际地址被称为物理地址。由于它并不和任何相对地址相关,因此,物理地址又称为绝对地址。
(2)可重定位方式:是由装入程序根据内存当前的实际使用情况,将装入模块装入到内存适当的地方。
①重定位:将程序中的逻辑地址改为实际物理地址称为重定位,也称为地址变换过程。
②静态重定位方式:是指地址转换工作是在程序装入内存时由装配程序完成的。装配程序根据将要装入内存的起始地址,对程序模块中有关的地址部分进行调整和修改。一旦确定下来之后不再改变,即静态地址重定位是在程序执行之前完成的地址转换。
(3)动态运行时装入方式:动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序要真正执行时才进行。
动态重定位方式:是指地址转换工作是在程序执行期间由硬件变换机构动态实现地址转换的。
2.程序的链接
链接程序的功能是将经过编译或汇编后所得到的一组目标模块以及它们所需要的库函数,装配成一个完整的装入模块。实现链接的方法有三种:
(1)静态链接:事先进行链接,以后不再拆开的链接方式
(2)装入时动态链接:用户源程序经编译后所得到的目标模块,是在装入内存时,边装入边链接的。
(3)运行时动态链接:某些目标模块的链接,是在程序执行中需要该(目标)模块时,才对它进行链接。
二、连续分配方式
连续分配方式是指为一个用户程序分配一个连续的内存空间。
1.单一连续分配
只能用于单用户,单任务的操作系统。把内存分为系统区和用户区两部分,系统区给OS使用,通常在低址部分;用户区给用户使用。在主存中仅驻留一道程序,整个用户区为一用户独占。当用户作业空间大于用户区时,该作业不能装入。
2.固定分区分配
将内存中的用户空间划分为若干个固定大小的区域,每个分区中只装入一道作业,一个作业也只能装入一个分区中,这样可以装入多个作业,使它们并发执行。当有一个空闲分区时,便可从外存的后备队列中,选择一个适当大小的作业装入该分区;当该作业运行完时,又可从后备队列中选择另一个作业装入该分区(分区大小可以相同也可以不同)。要求把作业全部装入主存,且装入一个连续的存储空间。当分区较大作业较小时,仍然浪费许多主存空间(产生内部碎片),并且分区总数固定,限制了并发执行的作业数目。
3.动态分区分配
动态分区存储管理方式是在作业要求装入主存时,根据作业的大小动态地划分分区,使分区的大小正好适应作业的要求。各分区的大小是不定的,主存中分区的数目也是不定的。由于实施动态分区存储管理时,分区的划分是按照进入作业的尺寸进行的,因此在这个分区里不会出现内部碎片。这就是说,动态分区存储管理消灭了内部碎片,不会出现由于内部碎片而引起的存储浪费现象。
动态分区存储管理方式必须解决三个问题:
(1)分区分配中所用的数据结构。
为了实现分区分配,系统中必须配置相应的数据结构,用来记录内存的使用情况。比如空闲分区的情况,为作业分配内存空间提供依据。常用的有空闲分区表和空闲分区链。
(2)分区的分配算法。
①首次适应分配算法(FF)。要求空闲区按首址递增的次序组织空闲区表(队列)。 当进程申请大小为SIZE的内存时,系统从空闲区链的链首开始查询,直到首次找到等于或大于SIZE的空闲区。从该区中划出大小为SIZE的分区分配给进程,余下的部分仍作为一个空闲区留在空闲区链中,但要修改其首址和大小。若找不到满足要求的,则分配失败,返回。这种算法是尽可能地利用低地址空间,从而保证高地址空间有较大的空闲区。缺点是容易产生过多的小地址碎片;降低了主存空间利用率;每次查找都是从低址开始,增加了查找的开销。
②循环首次适应算法(NF)。对首次适应算法进行了改进,不是每次都从链首开始找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。使内存中的空闲分区分布得更均匀,减少了查找时的开销,但会缺乏大的空闲分区。
文档评论(0)