操作系统之——存储器管理

来源:互联网 发布:linux etc 编辑:程序博客网 时间:2024/05/18 04:22

存储器的层次结构

1.cpu寄存器

2.主存

{
高速缓存
主存储器
磁盘缓存
}

3.辅存

{
固定硬盘
可移动存储介质
}

程序的装入和链接

主要步骤

1.编译

由编译程序对源程序进行编译,行成若干个目标模块。

2.链接

由链接程序将一组目标模块一起所需的库函数链接在一起,形成一个完整的装入模块。

3.装入

由装入程序将装入模块装入内存

程序的装入

绝对装入方式

将目标模块装入内存中的指定位置(实际物理地址),适用于单道程度环境。

可重定位装入方式

动态运行装入方式

程序的链接

静态链接

程序运行前,将目标模块及其所需库函数链接成一个完成的装配模块,以后不再打开。

装入时动态链接

装入内存时,边装入边链接。

运行时动态链接

程序运行时链接

连续分配存储管理

单一连续分配

将内存分为系统区和用户区,用户区内存仅装一道程序,整个用户区内存由该程序独占,适用于早期单道程序环境。

固定分区分配

划分方法

1.分区等大小 2.分区不等大小

内存分配

将分区按大小排队,建立分区使用表,用户程序装入时检索该表,找出能满足且尚未分配的分区分给该程序。分区号大小(KB)起始地址状态11220已分配23232已分配36464未分配4128128已分配


动态分区分配

基于顺序搜索的动态分区分配

首次适应(FF)算法

按地址递增次序,找到一个大小能满足的分区,将其分给程序。

循环首次适应(NF)算法

在FF基础上,每次不从低地址链首找,而是从上一次找到空闲分区的下一个分区开始。

最佳适应(BF)算法

找到能满足且剩余空间最小的分区,将其分给程序。

最坏适应(WF)算法

找到能满足且剩余空间最大的分区,将其分给程序。

基于索引搜索的动态分区分配

快速适应(quick fit)算法

将空闲分区根据其容量大小分类,为每一类分区设立空闲分区链表。
设立一张管理索引表,每一个索引表项对应一种空闲分区类型,并记录该区链表表头指针。

伙伴系统(buddy system)

将每块分区的大小定位2的k次幂(1<=k<=m)
装入的程序大小在2的i-1次幂到2的i次幂之间,则从大小为2的i次幂的链表中选一块给该程序。
若大小为2的i次幂分区全部被使用,则将2的i+1次幂的分区等分为两块,一块给该程序,一块加入2的i次幂的链表。
若2的i+1次幂的分区块仍无剩余,则继续找更大的,重复该操作。

哈希算法

以哈希值代替索引表项

动态可重定位分区分配

紧凑

内存空间因被分配,产生许多小的内存碎片,将这些内存碎片整合为一个连续的空间。

动态重定位

碎片紧凑之后,原来程序的存储实际位置发生了变化,应进行修改。

动态重定位分区分配算法

无法找到足够大的分区给程序,但碎片空间之和足够时,将内存空间进行紧凑、重定位其他程序,再将空间分给新程序。

对换

对换的引入

把内存中暂时不能运行的进程或暂时不用的程序和数据换出到外存上,腾出足够内存空间,再把已具备运行条件的进程或进程所需的程序和数据换入到内存。

对换的类型

1.整体对换:以进程为单位
2.页面(分段)对换:以页面或分段为单位

对换空间的管理

主要目标

文件区:提高存储空间利用率
对换区:提高换入换出速度,空间一般连续分配,较少考虑碎片问题。

进程的换入换出

换出:优先选择阻塞或睡眠状态、优先级最低的进程。只能换出非共享的程序和数据(只要还有未换出的进程需要它)。
换入:找出就绪状态的进程,从中选择在对换区中等待最久的换入到内存中。

离散分配方式

允许进程直接分散地装入到许多不相邻的分区中,充分利用内存空间。无需连续存储方式的紧凑。
分为:1.分页存储 2.分段存储3.段页结合存储

分页存储管理

将进程的逻辑地址分为若干个页(最后一页通常装不满)

结构分为:1.页号(31-12位)偏移量(页内地址11-0位)
逻辑地址A,页面大小L,页号P,页内地址d
有 P=[A/P] d=A mod L

分页系统中允许进程的各个页离散的存储在内存中,系统为每个进程建立页面映像表(页表),来对应每一个页和物理块。

快表:

一个高速缓冲寄存器,CPU查询页表找出一个页的物理地址,将页号送入寄存器,寄存器与自己存储的页号进行匹配,若找到则读取该页所对应物理块号

多级页表

页表的页表,外页表存页表的序号及所在物理地址。

反置页表

为物理块设置页表而不是进程,页表项中记录物理块的所属进程。

分段存储管理

优点

1.方便编程:将自己的作业按逻辑分段,每个段从0开始编址。
2.信息共享:段可以以信息为单位。
3.信息保护:同上
4.动态增长:为每一段分配额外的空间(如果需要的话)
5.动态链接:以段作为链接的基本单位。

与分页的区别

1.页时信息的物理单位,段是信息的逻辑单位。
2.页大小固定由系统决定,由硬件实现。段长度不固定,由编译程序在对源程序编译时按照信息性质划分。
3.分页地址空间是一维的,是系统的行为。分段是二维的,既有段名又有段内地址。

段页式存储管理

将程序分为若干段,再将每个段分为若干页。
段号段内页号页内地址

















0 0