操作系统内存管理分页/分段/段页式管理

baiiu baiiu     2022-12-15     782

关键词:

前言

上篇介绍了内存管理的连续分配方式,本文介绍非连续分配方式。

非连续分配方式

  • 连续分配方式的缺点:
    固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。
    动态分区分配:会产生很多外部碎片,虽然可以用紧凑技术来处理,但是紧凑的时间代价很高。

  • 非连续分配
    如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存,而无需再进行紧凑。于是变产生了非连续分配方式。
    连续分配:为用户进程分配的是一个连续的内存空间;
    非连续分配:为用户进程分配的是一些分散的内存空间;

分页式存储管理方式

分页存储的基本概念

将内存空间分为一个个大小相等的分区(如每个分区4K),每个分区就是一个页框、或称页帧、内存块、物理块
每个页框有一个编号,即页框号、或称内存块号、页帧号、物理块号
页框号从0开始。

将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页、或称页面
每个页面也有一个编号,即页号,页号也是从0开始的。

可以这么理解,页框是物理地址,编号为页框号;页面是逻辑地址,编号为页号;

操作系统以页框为单位为各个进程分配内存空间;
进程的每个页面分别放入一个页框中,也就是说进程的页面与内存的页框有一对一的关系;
各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。

分页存储的地址转换


由上图看到,要进行逻辑地址到物理地址的转换,需要以下几步:

  1. 计算出逻辑地址对应的页号
  2. 计算出该页号对应对应页面在内存中的起始地址
  3. 计算出逻辑地址在页面内内的偏移量
  4. 物理地址 = 页面地址 + 页面偏移量

如何计算页号和页面偏移量

计算机中用二进制表示逻辑地址,如果一个页面大小为4k时,则分配如下图所示:

如何计算页号对应的页框号

操作系统会为每个进程建立一张页表,用来记录本进程内每个页面在内存中存放的位置;

  1. 一个进程对应一张页面
  2. 进程的每一页应用 一个页表项
  3. 每个页表项由页号和块号组成
  4. 页面记录进程页面和实际存放的内存的内存块之间的对应关系
  5. 每个页表项的长度是相同的,页号是隐含的

如下示例,用3个字节表示块号,则该进程的页表大小为3n个字节;当然,实际中计算机是用4个字节表示块号,是为了方便页表的查询,使得每个页面恰好可以装得下整数个页表项。

基本地址变换机构

基本地址变换机构是用于实现逻辑地址到物理地址转换的一组硬件机构。 基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。
通常会在系统中设置一个页表寄存器PTR,存放页表在内存中的起始地址F和页表长度M。其中页表长度是指这个页表中总共有几个页表项,即总共有多少页;页表项长度是指每个页表项占多大的存储空间;页面大小指一个页面占多大的存储空间;
进程未执行时,页表的起始地址和页表长度放在进程控制块PCB中;当进程被调度时,操作系统内核会把他们放到页表寄存器中。

  • 基本地址变换流程如下图所示:

具有快表的地址变换机构

它是基于基本地址变换机构的改进版本。

局部性原理

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

  • 时间局部性
    如果执行了程序中的某条指令,那么不久之后这条指令很有可能再次执行;
    如果某个数据被访问过,不就之后该数据很可能再次被访问(因为程序中存在大量的循环);

  • 空间局部性
    如果程序访问了某个存储单元,那么不就之后其附近的内存单元也很有可能被访问(因为很多程序在内存中都是连续存放的)。

基于局部性原理,在上文介绍的基本地址变换机构中,每次访问一个逻辑地址,都需要查下内存中的页表,可能连续很多次查到的都是同一个页表,于是便有了块表。

快表

快表,又称为联想寄存器TLB(Translation lookaside buffer),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。

  • 因为局部性原理,一般来说快表的命中率可以达到90%以上。

  • 基于快表的地址变换流程如下:

两种变换机构总结

两级页表

单级页表存在的问题

  1. 假设32位指令机器,4G内存,页面大小为4KB,则共划分为2^32 / 2^12 = 220个内存块,即该系统中用户进程最多将会有220个页表项,再假设页表项长度为4B,即一个页表最大需要 2^20 * 4B = 222B,则共需要222/212=210个页框存储该页表。
    所以第一个问题是需要专门给该进程分配2^10=1024个连续的页框来存储这个进程的页表。

  2. 由于局部性原理,进程在一段时间内可能只需要访问几个页面就可以正常运行了。因此没必要让整个页表都常驻内存。

解决问题一

可以将页表再进行分组,使每个内存块刚好刚好可以放入一个分组。如刚才的例子,可以让每1K个连续的页表为一组,1K * 4B = 4K,刚好可以占满一个内存块,再将各组离散的放到各个内存块中。
当然此时需要为离散分配的页表再建立一张页表,称为页目录表、或称外层页表、顶层页表

解决问题二

即使用虚拟存储技术。
可以在需要访问页面时才把页面调入内存,可以给每个页表项添加一个是否在内存中的标志位;
若想访问的页面不在内存中,则产生缺页中断,然后将目标页面从外存调入内存。

分段存储管理方式

进程的地址空间,按照程序程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址。
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻。

  • 段表

  • 地址变换流程

分段与分页的对比

  • 分页是系统行为,对用户不可见;
    分段是对用户可见的,用户编程时需要显式的给出段名。

  • 分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址;
    分段的用户进程地址空间是二维的,程序员在标识一个地址时,纪要给出段名,也要给出段内地址;

  • 分段比分页更容易实现信息的共享和保护。因为可以显式的按段进行共享。

  • 分段和分页访问一个逻辑地址都需要两次访存;分段存储中也可以引入快表;

  • 优缺点

段页式管理方式

综合了分页式和分段式的优缺点;
将进程按照逻辑模块分段,再将各段分页,再将内存空间分为大小相同的内存块,然后进程内各个分页装入各个内存块中。

  • 段表、页表

  • 地址变换流程
    其中也可以引入快表;

操作系统内存管理分页/分段/段页式管理

前言上篇介绍了内存管理的连续分配方式,本文介绍非连续分配方式。非连续分配方式连续分配方式的缺点:固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。动态分区分配:会产生... 查看详情

段页式存储管理思想

分页:解决内存利用效率问题。分段:解决进程安全、访问控制、数据一致性问题。http://blog.csdn.net/bupt_tinyfisher/article/details/89396891.基本思想:分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段... 查看详情

:内存管理--非连续分配管理方式:基本分段存储管理方式段页式管理方式

1.基本分段存储管理方式1.1知识总览1.2分段1.3段表1.4地址变换机构1.5段的共享与保护1.6分段/分页的对比2.段页式管理方式2.1分页、分段的优缺点分析段式管理产生外部碎片分析:2.2分段+分页=段页式管理2.3段表,页... 查看详情

(王道408考研操作系统)第三章内存管理-第一节8:非连续分配管理方式之段页式管理方式

文章目录一:分段和分页管理优缺点二:段页式管理基本概念(1)基本思想(2)逻辑地址结构(3)段表和页表三:段页式管理实现地址管理一:分段和分页管理优缺点经过前面几节的叙述,可以看到分段和分页管理方式有各自... 查看详情

(王道408考研操作系统)第三章内存管理-第一节8:非连续分配管理方式之段页式管理方式

文章目录一:分段和分页管理优缺点二:段页式管理基本概念(1)基本思想(2)逻辑地址结构(3)段表和页表三:段页式管理实现地址管理一:分段和分页管理优缺点经过前面几节的叙述,可以看到分段和分页管理方式有各自... 查看详情

操作系统王道考研p42段页式管理方式

段页式管理方式知识总览分段、分页管理方式中最大的优缺点关于段式管理会产生外部碎片:ps:分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价。分段+分页=段页式管理示意... 查看详情

基本分段存储管理方式以及段页式管理方式

...#xff0c;程序员使用段名来编程),每段从0开始编址内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。 查看详情

基本分段存储管理方式以及段页式管理方式

...#xff0c;程序员使用段名来编程),每段从0开始编址内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。 查看详情

分页式内存管理

原文:https://www.tomorrow.wiki/archives/334页式存储器管理是操作系统中十分重要的内容,这也正是虚拟存储关键技术之一。如果没有理解页式管理、段式管理和段页式管理,那么对操作系统中的虚拟内存理解也只有十之一二,因为操... 查看详情

操作系统--页式段式段页式内存管理的逻辑与物理地址对应关系

操作系统--页式、段式、段页式内存管理的逻辑与物理地址对应关系操作系统问题1--页式存储下的物理地址与逻辑地址对应关系问题某虚拟bai存储器的用du户编程空间共32个页面,每页为zhi1KB,内dao存为16KB。假定某时刻一用户页... 查看详情

王道操作系统笔记———非连续分配管理方式

...页面也有一个编号,即页号,页号也是从0开始。操作系统以页框为单位 查看详情

操作系统3(内存页表段表)

操作系统3内存的基础知识内存管理的概念覆盖与交换连续分配管理方式动态分区分配算法基本分配存储的基本概念基本地址变换机构具有快表的地址变换机构两级页表基本分段存储管理方式段页式管理方式虚拟内存请求分页管... 查看详情

操作系统内存管理单元mmutlb

前言在了解操作系统内存管理分页/分段/段页式管理、操作系统虚拟内存技术两篇文章后,接下来继续看看现代操作系统基本内存管理方式,本文详细介绍Linux操作系统下的内存管理单元MMU和TLB。内存管理子系统内存管理... 查看详情

操作系统段页结合的实际内存管理--13(代码片段)

操作系统段页结合的实际内存管理--13段、页结合:程序员希望用段,物理内存希望用页,所以…段、页同时存在:段面向用户/页面向硬件段、页同时存在是的重定位(地址翻译)一个实际的段、页式内存管理这个故事从... 查看详情

linux内存管理——段页式访问

1、早期的内存管理方式1.1、管理方式介绍(1)早期的程序都是直接运行在物理内存上,程序访问的都是物理地址,根本没有虚拟地址的概念;(2)如果计算机同时只运算一个程序,只要程序需要的内存空间不超过实际... 查看详情

(王道408考研操作系统)第三章内存管理-第二节2:请求分页管理方式

...存储管理方式相比,区别在于所访问信息不在内存时,由操作系统负责将信息从外存调入内存——请求调页功能如果内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存——页面置换功能本节以请求分页管理方式... 查看详情

(王道408考研操作系统)第三章内存管理-第二节2:请求分页管理方式

...存储管理方式相比,区别在于所访问信息不在内存时,由操作系统负责将信息从外存调入内存——请求调页功能如果内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存——页面置换功能本节以请求分页管理方式... 查看详情

操作系统——存储管理:分区分页分段请求式分页和虚拟内存

操作系统——存储管理:分区、分页、分段、请求式分页和虚拟内存1.综述  突然把这么多概念弄到一起,让人有点儿困惑。自己的一些理解:  分区式管理:最简单直观的方式,在内存中分配一个区,将整个进程放... 查看详情