计算机操作系统——离散存储
来源:互联网 发布:mac好玩的联机游戏 编辑:程序博客网 时间:2024/06/10 22:28
固定分区,会产生页内碎片等缺点,为此引入了动态分区方式。但动态分区又产生了外部碎片,导致内存的利用率也不理想。为了进一步提高内存的利用率,所以就产生了离散的分配方式。(理论来源于实际问题,这很好的体现在计算机科学中)
离散分配首先要解决的是分配的基本单位问题。通常,分配的基本单位是页与段。
页:固定大小的片段。段:长度可变,它是用户可以自己定义的一段数据集合(即用户根据需要来划分程序:代码段,静态数据段,堆段,栈段)。
根据分配基本单位 的不同,离散分配管理 方式分为一下三种:
1、分页存储管理
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把物理内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也加以编号,如第0块,第1块等等。
用户空间的每个页面在需要载入系统时,都需要管理系统请求一个空闲的页框(即在内存中找到空闲的区域),并将该页面与该页框之间联系起来。一个进程的两个连续 页面也可以分配到不连续的两个页框中,这样就实现了离散分配。
在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块,为了描述进程的内存分布情况,引入一个单独的数据结构(页表)。系统又为每个进程建立了一张页面映像表,简称页表。(页号到块号的地址映射)
如上图,在一个32位机中,当页面大小为4kB时,它的页内偏移量(也称为页内地址)所占的位数最大为2的12次方,即需要12位,所以0~11位是页内偏移量,其余的12~31位存放页号。
地址转换是分页系统必须实现的功能。设置 一个寄存器来进行地址转换,即快表(也称为联想寄存器)。由于快表成本的原因,快表不能很大,通常在16~512个页表之间。快表中只存放当前使用频繁的页表。
2、分段存储管理
在分段式存储管理系统中,用户把自己的作业(进程)按照逻辑关系划分为若干个段,每个段都是从0开始编址,并有自己的名字和长度。因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。
为每个分段分配一个连续的分区,而进程中的各个段可以离散地装入内存中不同的分区中,因此也实现了离散存储。
为使程序能正常运行,即能从物理内存中找出每个逻辑段所对应的位置,应像分页系统那样,在系统中为每个进程建立一张段映射表,简称“段表”。
---- 每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(“基址”)和段长(字节)。段表一般放在内存中。在配置了段表后,
执行中的进程可通过查找段表找到每个段所对应的内存区。可见,段表是用于实现从逻辑段到物理内存区的映射。
3. 段页式存储管理
为了解决分段的外部碎片问题,再次将“页”引入,即把一个段划分为许多页,形成两者的集合体,称为段页式存储管理。这是现代操作系统采用的最多的方式,而单纯的分页存储,分段存储从来就没被采用过(哈哈)。同理,将页划分为段,就称为页段式存储。不过一般段比页要大得多,所以都用段页式。
现在逻辑地址就是如下状态:
由于进程的段不多,所以段的位数比较少。32位机上通常是8位,即256个段。如果页面大小为4KB,那么页内地址12位,段地址8位,段内页号32-8-12=12位,即一个段有4K大小的页。
一个段内的每个页都可以装入内存的页框(块)中去。所以与分页系统一样,这里也有一个页表,来记录段的页的内存驻留情况。进程的段也需要一个段表来记录,以实现分段保护和共享等功能。
地址转换这里也是用快表,利用硬件也完成地址转换。这里复杂一些,需要分别获取段表,页表。所以产生了额外的内存开销
总结:
在页式、段式存储管理中,为获得一条指令或数据,须两次访问内存(一次访问页表/段表,一次访问内存取真正的内存单元);
而段页式则须三次访问内存(第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。 第二次则是访问页表得到所要访问的物理地址。 第三次才能访问真正需要访问的物理单元)
- 计算机操作系统——离散存储
- 计算机操作系统之存储管理
- 【计算机操作系统】操作系统--分段存储管理方式
- 【计算机操作系统】操作系统--分页存储管理方式
- 操作系统——存储
- 操作系统——存储
- 操作系统—存储管理
- 计算机操作系统存储管理(分段与分页)
- 计算机操作系统存储管理(分段与分页)
- 计算机操作系统存储管理(分段与分页)
- 操作系统——存储管理
- 操作系统——存储管理
- 《操作系统》——存储管理
- 操作系统——存储管理
- 操作系统——存储管理
- 操作系统——存储管理
- 操作系统——存储管理
- 操作系统原理—存储管理
- 【牛客 题库】 重载函数||类中声明的变量||访问类私有成员变量||int 和 unsigned int||*p
- 【复赛模拟试题】寿司 中位数思想
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 c题 sum
- 【csf-201312-1】出现次数最多的数
- D Sigma Function
- 计算机操作系统——离散存储
- java同步锁synchronized的使用
- maven依赖jar包时版本冲突的解决
- hdu 1903 Exchange Rates(动态规划)
- Spark面对OOM问题的解决方法及优化总结
- 如何写SysV服务管理脚本
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Trig Function
- 快速可靠协议:KCP
- leetcode 476. Number Complement(C语言)