1)物理地址:就是内存的地址,是以字节为单位,对内存单元的编址。 2)逻辑地址:用户源程序经过编译或汇编后形成的目标指令代码的编址。 3)地址空间:地址的编址范围。 4)物理地址空间:内存地址的编址范围。也就是计算内存的编址范围,它是由实际的物理内存的大小决定的。 5)逻辑的地址空间:用户程序指令的编址范围,是由程序的大小决定的。
一、重定位
(1)重定位:
是把程序的逻辑地址 变成 内存中的实际物理地址空间的过程。靠的是地址变换机构。
(2)静态重定位
即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
(3)动态重定位
它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。 动态重定位技术依赖于地址变换机构。
二、分区管理
单一连续区分配
把内存化成若干个连续的区域,每个连续区叫做一个分区,这种分配方案叫做分区式分配方案。
1.固定式分区
分区大小均等(管理简单,程序太大运行不了,太小浪费) 、分区大小不等
(1)分区表:
记录分区号、起始地址、分区大小、占用大小等。
2.可变式分区
可变式分区1.png
可变式分区2.png
可变式分区3.png
分区分配表:记录已分配分区信息。
空闲分区表:记录空闲分区信息。
3.分区分配算法
(1)首次适应算法
首次适应算法1.png
(2)循环首次适应算法
(3)最佳适应算法
(4)最坏适应算法
4.分区回收
分区回收1.png
当用户程序执行结束后,系统要回收已使用完毕的分区,将其记录在空闲区表中。在收回空间是,应首先检查是否有与回收区相邻的空闲区,若有则应合并成一个空闲区,并于空闲表中登记。有四种情况,上相邻、下相邻、上下相邻、上下不相邻。 ①上相邻:起始地址不变,分区大小相加。 ②下相邻:终止地址不变,分区大小相加。 ③上下相邻:上,起始地址不变;下,终止地址不变。分区大小相加。(空闲区-1) ④上下不相邻:直接记录。(空闲区 1)
5.紧缩(拼接、搬家、紧凑)
紧缩.png
紧缩1.png
三、分页管理(最主要的)
分页管理1.png
进程的每个页面离散地分配到了内存中的任意物理块(页面对应的物理块可以是不连续的,灵活性高。)中,使每个页面对应的物理块。 核心:页表。 分页管理也并未彻底解决:零头问题(可能存在业内零头)。
1.页表
在页式存储管理系统中,允许将进程的每一项离散地存储在内存的任意物理块中,但系统应能保证进程的正确进行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立一张页面映射表,简称页表,在进程地址空间的所有页,都在页表中有一个表项,其中记录了相应页在内存中所对应的物理块号。在配置了页表后,进行执行时,通过查找页表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。 即使在简单的页式存储管理系统中,也常在页表的表项中设置一存取控制字段,用于对该存储块的内容进行保护,当存取控制字段仅有一位时,可用来规定该存储块中的内容是允许读/写、还是只读;若存储控制字段威二位,则可规定为读/写、只读和只执行等存取方式。如果有一个进程试图去写一个只允许读的存储块时,则将引起操作系统的一次中断。如果要利用页式存储管理系统区实现虚拟存储器,则还需要增加一数据项。
页表.png
2.页 码 与 偏 移 量
页码与偏移量:A:逻辑地址。L:页面大小。 P(页号)=INT[A/L] , d(偏移量)=[A] MOD L
3.地址变换(重点)
地址变换1.png
页号p 小于 总页数时,页表f = 页号p。
地址变换.png
地址变换例1.png
4.快表
快表1.png
快表是一种特殊的高速缓冲存储器(Cache),内容是页表中的一部分或全部内容。 在操作系统中引入快表是为了加快地址映射速度。 在虚拟页式存储管理中设置了快表,作为当前进程页表的Cache。通常快表处于MMU(内存管理单元https://baike.baidu.com/item/MMU/4542218?fr=aladdin )中。
5.快表与页表的区别和联系
页表指出逻辑地址中的页号与所占主存物理块号的对应关系。页式存储管理在用动态重定位方式装入作业时,要利用页表做地址转换工作。
快表就是存放在高速缓冲存储器的部分页表。作为页表的Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。
快表例1.png
缺点:
分页系统存在的一个无法容忍,同时也是分页系统无法解决的一个缺点就是:一个进程只能占有一个虚拟地址空间。在此种限制下,一个程序的大小至多只能和虚拟空间一样大,其所有内容都必须从这个共同的虚拟空间内分配。
四、分段管理
1.概念
为每一个段分配一个连续的内存分区,段与段之间可以不连续,段在内存中的位置通过段表来描述。 分段管理就是将一个程序按照逻辑单元分成多个程序段,每一个段使用自己单独的虚拟地址空间。例如,对于编译器来说,我们可以给其5个段,占用5个虚拟地址空间,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的)。 如此,一个段占用一个虚拟地址空间,不会发生空间增长时碰撞到另一个段的问题,从而避免因空间不够而造成编译失败的情况。如果某个数据结构对空间的需求超过整个虚拟之地所能够提供的空间,则编译仍将失败。不过出现这种可能的概率恐怕不会比太阳从西边出来的概率高出多少。 在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显示提供,在髙级程序设计语言中,这个工作由编译程序完成。
2.段表
每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。
段表.png
在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表用于实现从逻辑段到物理内存区的映射,
分段管理1.png
3.地址变换
分段管理地址变换.png
4.信息共享
分段系统的一个突出优点,是易于实现段的共享,对段的保护也十分简单。
段式管理信息共享.png
5.分段内存管理的优缺点
【优点】:
- 每个逻辑单元可单独占用一个虚拟地址空间,这样使得编写程序的空间大为增长。
- 由于段式按逻辑关系划分,因此信息共享起来十分方便。
- 对于空间稀疏的程序来说,分段管理将节省大量的空间。
【缺点】:
- 存在外部碎片,一个段必须全部加载到内存。
五、分页与分段的主要区别
- 页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显示提供。
- 分页是一维地址空间,分段是二维的(段内和段间)。
- 页的大小不可变,段的大小可以动态改变。
- 页和段都有存储保护机制。但存取权限不同:段有读、写和执行三种权限;而页只有读和写两种权限。
六、段页式管理
在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若S<TL,表示未越界,于是利用段表始址
段页式管理地址变换.jpg
和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。右图示出了段页式系统中的地址变换机构。
在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。
显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。