[操作系统]存储器管理

存储管理的功能

内存分配、回收

存储保护 确保每道用户进程都在自己的内存空间中运行,互不干扰,冲突和破坏;

多道:用户进程不允许访问OS的程序和数据;而且用户进程不允许访问其他用户进程的程序和数据空间。

[操作系统]存储器管理

每个进程都分别有一个上界限地址寄存器和一个下界限地址寄存器,每次访问内存时都与这两个界限寄存器比较,判断是否越界。

地址变换 将逻辑地址转化为物理地址

存储共享 多个进程共用同一系统软件,如编译程序,存放编译程序的内存区即为共享内存区;

存储扩充 在逻辑上扩充内存容量,采用虚拟存储器技术。

一个用户源程序变为可在内存中执行的程序

[操作系统]存储器管理

程序的装入

绝对装入方式 :

由装入程序根据装入模块中的地址,将程序和数据装入内存。

可重定位装入方式:移动进程,将零散空闲的分区连成一片

静态:物理地址=逻辑地址+本程序在内存中的起始地址

在程序执行之前进行的重定位,在程序装入内存时一次性完成指令中地址的修改。

动态:装入主存的程序仍然保持原来的逻辑地址,由逻辑地址到物理地址的转换在程序真正执行时进行。装入内存后,代码可以移动

动态装入优势:便于修改和更新。 便于实现对目标模块的共享。 

程序的内存划分

单一连续分配

内存分为两个区域:系统区,用户区

 系统区仅提供给OS使用,通常放在内存的低址部分;用户区是指除系统区以外的全部内存空间,提供给用户使用。

[操作系统]存储器管理

[操作系统]存储器管理

 动态分区:

分区的个数和大小不是固定不变的,而是可变的,   随装入的作业动态划分;且不会产生内部碎片。

外部碎片:----剩余部分很长一段时间都不可分配给其他程序

若存储块长度为n,在该系统所采用的调度算法下较长时间内无法选出一道长度不超过该块的进程,则称该块为外部碎片。--------克服外部碎片的一种技术是压缩(紧凑)。移动进程,   使零散的小空闲空间连成一片。     必须采用动态重定位—可重定位分区分配

分区分配算法

首次适应算法:空闲分区链以地址递增的次序链接;进行内存分配时,从链首开始顺序查找。

循环首次适应算法:空闲分区链以地址递增的次序链接;进行内存分配时,从上次找到的空闲分区的下一个空闲分区开始查找。

最佳适应算法:每次为作业分配内存时,总是把满足要求的、最小的空闲分区分配给作业。空闲分区由小到大形成空闲分区链,每次从链首找,找到的第一个,必然是最小的;

最坏适应算法:空闲分区由大到小分区,满足的容量最大

举例:

系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。

(1)给出按首次适应算法的内存分配情况及分配后空闲分区表。

(2)给出按循环首次适应算法的内存分配情况及分配后空闲分区表。

(3)给出按最佳适应算法的内存分配情况及分配后空闲分区表。

(4)给出按最坏适应算法的内存分配情况及分配后空闲分区表。

[操作系统]存储器管理

解:

 首次适应算法:

每次都从链首开始找起,满足100k的是区号为3的空闲分区,大小-100l,起始地址+100k

满足30k的是区号为3的空分区,大小-30k,起始地址+30k

满足7k的是区号为2的空闲分区,大小-7k,起始地址+7k

循环首次适应:

从本次找的下一个开始找起,第一个从链首找

满足100k的是区号为3的空闲分区,大小-100l,起始地址+100k

下一个分区为区号4的空闲分区,满足30k的是区号为4的空分区,大小-30k,起始地址+30k

满足7k的是区号为1的空闲分区,大小-7k,起始地址+7k

最佳适应算法:

满足要求的、最小的空闲分区分配给作业

本题和首次适应算法结果一致

最坏适应算法:

全部分配给区号为4的空闲分区

分页

页面:将一个进程的逻辑地址空间划分成若干个大小相等的片

物理块:将内存空间划分成与页面大小相等的物理块

分页存储的基本思想:

为进程分配内存时,以块为单位将进程的若干页分别装入到不相临接的物理块中

地址结构:

给定逻辑地址空间,地址为A,页面大小为L

 

[操作系统]存储器管理

页号:逻辑地址对页面大小取整

页内偏移:逻辑地址对页面大小取余 

[操作系统]存储器管理

 

[操作系统]存储器管理

页面大小由机器的地址结构所决定

页表的功能可以由一组专门寄存器实现;页表大多驻留在内存中;

[操作系统]存储器管理

 页表项地址=页表始址+页号*页表项长度

基本的地址变换过程

a.将物理块号与页内偏移拼接得到物理地址

页号检索快表->判断是否有对应的页表项

1若有,执行a

2若没有,判断页号是否大于页表长度(越界判定),1若大于,地址变换失败

                                                                                2若不大于,检索页表,1若页表不满,执行a

                                                                                                                    2若页表满,淘汰最先进入的页表项,将本次访问页表项写入快表

图解:

[操作系统]存储器管理

例题:

设有一单纯分页系统,页的大小为1KB。假定一进程的代码段长度为10页,页表如表一所示,快表如表二所示:

[操作系统]存储器管理

现进程有如下访问序列:其逻辑地址为:0AC5H、0EC3H、12C5H、62C3H。试问给定的这些地址能否进行转换?若能,请说明转换过程及相应的物理地址;若不能,则说明理由。

解:  

页面大小为1KB,页内偏移为低10位,逻辑地址为十六进制,转换为二进制,右边10位即为页内偏移d,其余左边高位为页号P。

OAC5H=0000101011000101B  

 p=2, d=02C5H,查快表,得物理地址(4)2C5H 0EC3H=0000111011000011B  

 p=3, d=02C3H,查快表,得物理地址(A)2C3H 12C5H=0001001011000101B  

 p=4, d=02C5H,该页号不在快表,需到主存页表项中     寻找对应物理块号,得内存物理块号

P=9,d=02C5H,得   物理地址(9)2C5H 62C3H=0110001011000011B    

p=24, d=02C3H,页号超出页表范围,不可转换,作越界处理。

分段存储:

作业的地址空间被划分成若干个段,离散的   分配在内存中不相邻接的分区中;

每个段有自己的名字,都从0开始编址,定   义了一组逻辑信息;放在连续的存储区域上;

由于每个段的长度可以不同,因而每个段的内   存分配和回收类似于动态分区的分配和回收   办法。会产生外部碎片。

[操作系统]存储器管理

地址变换:

[操作系统]存储器管理

 1.页是信息的物理单位,分页是为提高内存的利用率引入的。

  段则是信息的逻辑单位,分段的目的是为了能更好地满足用户的需要

段页式:

将用户程序分为若干个段,再把每个段划分成若干页,并为每个段赋予一个段名;

[操作系统]存储器管理

 设有一单纯分页系统,某作业的逻辑地址空间为4页(每页2048字节),且已知该作业的页面映像(即页表)见下表。

试借助地址变换图(即要求画出地址变换图),求逻辑地址4865所对应的物理地址。

[操作系统]存储器管理

p=4865/2048=2

d=4865%2048=769