加入收藏
举报
02-05 21:00
#0
文件名称:
第五章_存储管理.md
所在目录:
专业核心课 / 操作系统 / Notes 笔记
文件大小:
4.96 KB
下载地址:
SincereXIA/XidianCS
   
免责声明:本网站仅提供指向 GitHub 上的文件的链接,所有文件的版权归原作者所有,本网站不对文件内容的合法性、准确性或安全性承担任何责任。
文本预览:
# 第五章 存储管理
> 存储管理的主要管理对象是 **内存**
>
> #### 程序如何运行
>
> ​ 在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一件事,便是将程序和数据装入内存。如何将一个用户源程序变为一个可在内存中执行的程序,通常都要经过以下几个步骤:
>
> ​ 首先是要编译,由编译程序(Compiler)将用户源代码编译成cpu可执行的目标代码,产生了若干个目标模块(Object Module)(即若干程序段),
>
> ​ 其次是链接,由链接程序(Linker)将编译后形成的一组目标模块(程序段),以及它们所需要的库函数链接在一起,形成一个完整的装入模块(Load Module);
>
> ​ 最后是装入,由装入程序(Loader)将装入模块装入内存。图示出了这样的三步过程。
>
> ![mark](http://7xjpym.com1.z0.glb.clouddn.com/blog/180702/1hjeGmL7ec.png?imageslim)
>
>
## 地址重定位 (程序的装入)
```mermaid
graph LR;
源程序--编译链接-->相对地址
相对地址 --地址再定位--> 绝对地址
```
**地址重定位的方式:**
1. **绝对装入**:在可执行文件中记录物理内存地址
> 地址重定位在编译链接时确定
2. **可重定位装入**:可执行文件中列出 **需要重定位的地址单元** 以及 **相对地址**
- **静态再定位**:程序执行(装入内存时)完成重定位
- **动态再定位**:程序执行期间,在存储访问之前进行,装入内存的仍然是程序的逻辑地址值
3. **动态运行期装入**
## 链接
1. 静态链接:再生成可执行文件时进行
2. 动态链接:在装入或运行可执行文件时执行
## 存储管理方案
**需要一次性全部装入内存的方案:**
1. **分区存储:**
- 单一连续分区:作业运行时占用整个内存的地址空间
- 固定分区:在系统初始化时将内存空间分为若干个不等大的分区 **有内外碎片**
- 可变分区:装入或执行过程中,动态创建分区 **没有内碎片,有外碎片**
- 采用空闲存储区表进行管理
- 分区分配算法
- 最先适应
- 最佳适应
- 最差适应
- 循环最先适应
2. **段式存储:**
段之间可以不连续
- 可以实现共享、分段保护、动态链接、段可以动态增长
3. **页式存储:**
作业的虚拟地址空间划分为若干个 **长度相等的页(虚页)**,主存划分为与虚页长度相等的 **页框(实业、块)**
- 系统在内存中开辟 **页面变换表(进程页表)** 页表中的内容有 **页号、块号、页内偏移量**
- 记录内存中哪些页面是空闲的数据结构是 **内存页表(物理页面表、空闲内存页表)**
- 描述系统内进程页表的位置和大小:**请求表**
**硬件支持:**
- 页表基地址寄存器
- 页表长度寄存器
- **快表(联想寄存器)** 加速地址变换过程
**页式存储优点:**
- 没有外碎片
- 程序不必连续存放
**缺点:**
- 程序全部装入内存
- 不利于共享和动态链接
> 段式和页式的比较:
>
> | | 目的 | 大小 | 逻辑地址 | 表的长度 | 内存共享 |
> | -------- | -------------- | ---------- | -------------------------- | -------- | -------- |
> | **段式** | 用户应用的需要 | 大小不固定 | 二维,每段一个逻辑地址空间 | 段表短 | 能 |
> | **页式** | 系统管理的需要 | 大小固定 | 一维,同一个地址空间 | 页表长 | 不能 |
>
>
4. **段页式:**
**用户程序按段式划分,物理内存按页式划分**
- 系统需要同时配置段表和页表
- 获取数据需要三次访问内存
**不需要一次性装入:**
- 交换技术和覆盖技术
- **虚拟存储**
- 虚拟存储管理的基础是 **程序的局部性原理**,程序在执行过程中的一个较短时期内,所执行的指令地址和指令的操作数地址分别局限于一定的区域
表现为: **时间局部性、空间局部性**
- 分类:**请求分页、请求分段、请求段页式存储管理**
- 如果要访问的 页(段) 不在内存,**引发 缺页(段)中断**
- 页面调度的策略:
- 页面调度策略
- 置页策略
- 页面置换策略
- **页面淘汰算法:**
- 最佳算法
- **先进先出 FIFO**:会产生 **Belady** 现象,原因是算法的置换特征与进程访问内存的动态特征相矛盾
- 第二次机会
- 页面缓冲算法
- **最近最少使用 LRU**
- 硬件实现
- 软件实现
- 最不经常使用 NFU
- 最近未使用 NRU
点赞 回复
回帖
支持markdown部分语法 ?