操作系统-3.5-内存(基本分段存储管理&&段页式管理)
Posted LL.LEBRON
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统-3.5-内存(基本分段存储管理&&段页式管理)相关的知识,希望对你有一定的参考价值。
文章目录
操作系统-3.5-内存
10.基本分段存储管理
10.1什么是分段?
-
分段:进程的地址空间按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0编址。
-
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。
分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。如:
- 段号的位数决定了每个进程最多可以分几个段。
- 段内地址位数决定了每个段的最大长度是多少。
10.2什么是段表?
程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表,简称“段表”。
- 每个段对应一个段表项,其中记录了该段在内存中的起始位置(又称“基址”)和段的长度。
- 各个段表项的长度是相同的。
10.3分段存储管理实现地址变换过程
10.4分段,分页管理的对比
- 页:是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
段:是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。 - 页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序。
- 分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。
分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。
-
分段比分页更容易实现信息的共享和保护。
不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的(比如,有一个代码段中有很多变量,各进程并发地同时访问可能造成数据不一致)。
分段,分页两者实现信息的共享和保护对比:
访问一个逻辑地址需要几次访存
- 分页(单级页表)∶第一次访存――查内存中的页表,第二次访存――访问目标内存单元。总共两次访存。
- 分段:第一次访存――查内存中的段表,第二次访存――访问目标内存单元。总共两次访存。
与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的段表项放到快表中,这样可以少一次访问,加快地址变换速度。
10.5总结
11.段页式管理方式
11.1分页,分段的优缺点
有了分页管理和分段管理,为什么我们还要引入段页式管理呢?
我们先来看看前两者各自的不足及优点。
优点 | 缺点 | |
---|---|---|
分页管理 | 内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片。 | 不方便按照逻辑模块实现信息的共享和保护。 |
分段管理 | 很方便按照逻辑模块实现信息的共享和保护。 | 如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片。(分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价) |
11.2段页式管理
段页式管理:将进程按逻辑模块分段,再将各段分页(如每个页面4KB)再将内存空间分为大小相同的内存块/页框/页帧/物理块进程前将各页面分别装入各内存块中。
11.3段页式管理的逻辑地址结构
段页式系统的逻辑地址结构由段号,页号,**页内地址(页内偏移量)**组成。如:
- 段号的位数决定了每个进程最多可以分几个段。
- 页号位数决定了每个段最大有多少页。
- 页内偏移量决定了页面大小、内存块大小是多少。
11.4段表,页表
- 每个段对应一个段表项,每个段表项由段号、页表长度、页表存放块号(页表起始地址)组成。每个段表项长度相等,段号是隐含的。
- 每个页面对应一个页表项,每个页表项由页号、页面存放的内存块号组成。每个页表项长度相等,页号是隐含的。
11.5段页式管理实现地址变换过程
11.6总结
以上是关于操作系统-3.5-内存(基本分段存储管理&&段页式管理)的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研操作系统)第三章内存管理-第一节7:非连续分配管理方式之基本分段管理方式
(王道408考研操作系统)第三章内存管理-第一节7:非连续分配管理方式之基本分段管理方式
:内存管理 -- 非连续分配管理方式:基本分段存储管理方式段页式管理方式
操作系统| 存储器管理(基本分页和基本分段的逻辑地址结构变换连续分配方式分区分配算法首次适应循环首次适应最佳适应分页和分段的比较程序装入方式和链接方式)