[操做系统]存储器管理

存储管理的功能

内存分配、回收算法

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

多道:用户进程不容许访问OS的程序和数据;并且用户进程不容许访问其余用户进程的程序和数据空间。3d

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

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

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

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

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

程序的装入

绝对装入方式 :bfc

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

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

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

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

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

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

程序的内存划分

单一连续分配

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

 系统区仅提供给OS使用,一般放在内存的低址部分;用户区是指除系统区之外的所有内存空间,提供给用户使用。

 动态分区:

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

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

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

分区分配算法

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

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

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

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

举例:

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

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

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

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

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

解:

 首次适应算法:

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

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

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

循环首次适应:

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

知足100k的是区号为3的空闲分区,大小-100k,起始地址+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