OS学习-存储器管理

1.1存储管理的功能

主存储器(内存):处理器可直接访问,访问快,容量有限;

辅助存储器(外存):处理器不可直接访问,访问慢,容量大;

操作系统的存储管理主要是对内存的管理。内存空间主要分为系统区和用户区,分别存放操作系统和用户的程序与数据,存储管理主要是对用户区管理。

1.1.1内存分配和回收

(1)记录内存空间的使用情况(内存分配登记表)

(2)实施内存的分配

(3)内存的回收

1.1.2地址转换

1.逻辑地址和物理地址的概念

物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页。

逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。

引自:https://www.cnblogs.com/felixfang/p/3420462.html

地址转换即为将逻辑地址转换为物理地址。

2.地址重定位方法

CPU执行指令是按物理地址进行的,而程序的逻辑地址与之不一致,因此需要地址重定位。

(1)静态地址重定位

程序装入时,由装入程序将逻辑地址转换为物理地址。

物理地址=程序在内存中首址+逻辑地址

OS学习-存储器管理

注:逻辑地址500在装入时转换为物理地址1500

(2)动态地址重定位

程序在运行时将涉及的指令或数据的地址转换为物理地址

实施:

1)程序装入时将其首址送基址

2)程序运行时将涉及的指令或数据的地址送虚址。

3)首址+虚址=物理地址

OS学习-存储器管理

现代计算机系统都采用动态地址映射技术

 

1.1.3存储保护

限制进程只在自己的存储区活动,除了允许共享的部分外,不能对其他进程的程序和数据产生干扰和破坏。

1.防止地址越界

(1)上, 下届存储保护

(2)限长存储保护

2.存取权限控制

下届寄存器:存放程序在内存中的开始地址

上届寄存器:存放程序在内存中的末地址

判别式:下届寄存器 ≤ 物理地址 ≤ 上届寄存器

OS学习-存储器管理

限长寄存器保护

限长寄存器:存放程序占用内存区的长度

判别式:0 ≤ 逻辑地址 ≤ 限长寄存器

OS学习-存储器管理

两种存储保护技术的区别:

1.寄存器的设置不同;

2.判别式中用的判别条件不同(前者用物理地址,后者用逻辑地址);

3.前者浪费的CPU时间相对多些

 

1.1.4存储扩充

虚拟存储器的概念

由系统构造一个存储容量远超过内存实际容量的存储器,简称为虚存。可实现在有限内存容量的情况下,执行比内存容量大得多的程序。


1.2分区存储管理

将内存划分为若干个连续的区域,称为分区

 

1.2.1单一连续分配法

一段时间内,只有一个进程在内存的用户区。

 

1.2.2 固定分区管理

操作系统把内存划分为若干个大小固定且各不相同的存储区,除操作系统占用一个区域,其余区域为系统中多个用户共享。

程序和数据一旦装入分区后不可再移动,因此也称静态地址重定位

 

OS学习-存储器管理



1.2.3可变分区管理

各分区根据作业占用的内存大小动态建立。

1.空闲区表

 记载内存空闲分区(包括首址,长度)

OS学习-存储器管理

 

2,内存分配

(1)常用的内存分配算法

1)最先使用算法

空闲块按首址递增的顺序登记在各空闲区表中,找到第一个满足要求的空闲区即实施分配,并在空闲区表删除此登记,将多出的空间作为新空闲区记录在表中。

2)最佳适应算法

空闲区按大小递增顺序序登记在各空闲区表中,找到第一个满足要求的空闲区即实施分配。

3)最差适应算法

空闲区按大小递减顺序序登记在各空闲区表中,搜索表中首项,若满足则分配,否则分配失败。

 

OS学习-存储器管理

OS学习-存储器管理

3.可变分区的回收

1)释放区和前面或后面或前后空闲区相邻,则合并。

2)释放区和前面或后面或前后空闲区都不相邻,则在空闲区表中插入该项。

 

4.地址转换与存储保护

OS学习-存储器管理

操作系统将进程分配得到的起始地址和内存长度分别装入基址寄存器和限长寄存器,并在进程执行时根据两个寄存器的值,得到绝对地址在,完成地址转换。

 

OS学习-存储器管理

OS学习-存储器管理

 

1.3页式存储管理

分区管理的缺点:

1)存在碎片现象,内存利用率不高;

2)若连续的空闲区不能满足进程需求,则即使整个内存中所有的连续分区之和大于进程所需的空间,进程仍不能装入内存

 

1.3.1页的划分技术

1)系统把内存按2^n划分为大小相同,位置固定的若干个存储块,成为页面;

2)进程的逻辑地址空间按2^n划分若干相对的部分,每部分称为一个页面;

3)进程以页为单位分配内存,一个进程可分布在不相邻的存储区域;

 

1.3.2逻辑地址的形式

进程分页后,逻辑地址由两部分组成:

OS学习-存储器管理


1.3.3 相关数据结构

1.页表

将进程的逻辑页号与内存的物理页号对应起来

由页号(进程地址空间的页序号)和块(内存空间的页序号)组成

每个进程拥有一张页表

2.空闲块表

记载内存空闲块,整个系统一张空闲块表。

OS学习-存储器管理

 

1.3.4 页式地址转换

为了在非连续的内存区域中正确地执行进程,OS完成逻辑地址到物理地址的转换

OS学习-存储器管理

OS学习-存储器管理

 

1.3.5 快表和页表构造

执行一次访问内存操作至少要访问内存两次,一次访问页表,以确定索取数据或指令的物理地址;另一次是根据物理地址取数据或指令。

为提高存取数据,通常设置存放在高速缓存寄存器在的页表来存放页表的一部分,这种页表称为快表。我们可以将当前经常访问的页面对应的页号和块号装入快表,其构造与页表一致。

在访问时先查找快表,若找不到所需页号,再找页表,并将该项写入快表。(快表的地址转换非常快)

OS学习-存储器管理

 

分页式存储管理的优缺点

OS学习-存储器管理

 

1.4段式存储管理

 

1.4.1 段的划分技术

由用户将程序按逻辑结果划分为若干个段;

每个程序段都有一个段名;

长度通常不定且不等。

 

1.4.2 逻辑地址结果

程序在编译,汇编,连接后,形成了相对独立的地址空间,得到逻辑地址。如下图所示:

OS学习-存储器管理

 

1.4.3 内存分配

1)以段为段位分配;

2)每个短单独占用连续的内存分区;

3)进程的各个段可以离散地装入内存的不同区域

 

1.4.4 段表和段表地址寄存器

1)每个进程有一张段表

2)段表寄存器存放运行进程的段表在内存起始地址和段表长度

3)在进程运行时,由系统将该进程的段表始址和段表长度送入控制寄存器中,当访问某段(S)时,其逻辑地址(S,W)中的段号S先与控制寄存器的段表长度相比较,若S>段表长度,则产生越界中断,停止作业运行;否则将段号S与控制寄存器的段表始址相加,形成访问段表的主存地址。

OS学习-存储器管理

 

总结

OS学习-存储器管理

 

1.5虚拟存储技术

1.5.1基本思想

上述内存管理方法的缺点:当进程所需内存空间大于内存的可用空间时,进程无法运行。实际上,进程在运行的某个阶段,只需占用存储空间的一部分,而那些已分配但未使用的区域就会被浪费掉。

所谓虚拟是指:

1)进程要求运行时不全部装入内存,而只装入一部分,另一部分留着外存;

2)当需要访问的信息不在内存时,发生中断,系统将暂不使用的信息调出内存,将需要的信息调入每次。

1.5.2 页式虚拟存储管理

在分页管理的基础上,在程序运行时,仅将部分页面装入内存,在执行过程中,若所需页面不在内存,则发生缺页中断,系统根据一定算法将所需页面调入内存。

1.页表的扩充

OS学习-存储器管理

2.地址重定位

访问页表时先检查状态位,为1:则使用页表中对应的内存块号,进程地址转换;为0:则发生硬件中断,CPU执行OS的中断处理程序,根据页表给出的外存地址将该页调入内存。

3.页面置换算法

为保证进程的运行,系统从主存中调出一页 程序或数据到磁盘的交换区,称为页面置换。

若页面置换算法选择不当,或造成频繁的页面调入和淘汰,并导致系统效率急速下降,此现象称为系统抖动。

缺页率 = 缺页次数 / 内存访问次数

(1)最佳页面淘汰算法

选择永不使用或随后很长时间不使用的页

OS学习-存储器管理

 

(2)先入先出法

选择在主存中停留时间最长的一页朱鹮。

OS学习-存储器管理

(3)最近最不常用淘汰算法

选择被访问次数少的页面调出。

(4)最久未使用算法

选择在最近一段时间里最久没有使用过的页面置换。

用一个队列存储访问的页面。若遇到队列里已有的,则替换掉原来的位置。

OS学习-存储器管理

 

1.5.3 段式虚拟存储管理

在分段管理的基础上,在程序运行时,仅将部分程序段装入内存,在执行过程中,若所需程序段不在内存,操作系统自动进行段的调入。

1.段表的扩充

OS学习-存储器管理

 

1.5.4 段页式存储管理

(1)分段结构的一个缺点是:每个段必须占据内存的连续区域,所以要装入一个分段时可能要移动已在主存中的信息。

(2)为了克服该缺点,可兼用分段和分页的方法,构成段页式存储管理。

(3)进程仍按逻辑分段,,但对每一个段不是按单一的连续整体存放在存储器中,而是把每段再成若干个页面,每段不必占据连续的内存空间,可把它按页放在不连续的主存块中。

1.段页的划分

用户将用户程序分为若干个段,赋予一个段名。再由系统将每个段独立划分为若干页,进程以页为单位进驻内存。

2.逻辑地址形式

OS学习-存储器管理

3.段表与页表

每个进程拥有一张段表,每个段有一张页表。

 

总结

OS学习-存储器管理

OS学习-存储器管理

OS学习-存储器管理