前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >操作系统之存储器管理

操作系统之存储器管理

原创
作者头像
_咯噔_
发布2022-03-22 01:56:04
8290
发布2022-03-22 01:56:04
举报
文章被收录于专栏:CS学习笔记CS学习笔记

一、逻辑地址如何转换为物理地址

  • 由MMU(存储器管理单元)实现

(一)分页式管理:硬件地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。

(1)把进程的页表起始地址页表长度(在进程控制块中)装入CPU控制寄存器

(2)把程序计数器中存放的逻辑地址中的页号部分与控制寄存器中的页表长度比较,检查地址越界

(3)将页号与页表起始地址相加,得到访问的所在页在页表的入口地址

(页表的入口地址 = 页表起始地址 +页号 x 页表项占用字节)

(4)访问该地址,得到该页对应的主存块号,与程序计数器中的页内地址拼接就得到了对应的物理地址。

  • 具有快表的地址变换

在基本地址变换机构中,每次想访问一个物理地址,都需要到内存中去先查一下页表,再去访问物理地址

快表(联想存储器,TLB),是一种访问速度比内存快很多的硬件高速缓冲寄存器组,用来存放最近访问过的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常被称为慢表。块表中每一项:页号、块号、状态位(该项是否被占用)、访问位

硬件地址变换机构进行转换时,同时开始两个变换过程,一个是利用主存页表进行正常变换,另一个是利用快表,一旦快表中找到页号,将立即停止访问主存页表过程,若没找到,则继续正常的地址转换,把页号和页表中的块号写入快表中状态位为0或访问位为0的一行,将状态位和访问位置1。

(二)分段式管理:

与页式基本相同,段表项:段的起始地址、段的长度、段的访问方式,转换时对三项都要进行检查。

二、分页和分段的区别?

在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的块,程序加载时,可以将任意一页放入内存中任意一个块,不必连续,用页表记录逻辑页和主存块的映射关系。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。页式不易进行共享。  

在段式存储管理中,将程序的地址空间按照程序的自身逻辑划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间。分配以段为单位,为进程的每一个分段分配一个连续的主存,各段之间不用连续。用段表来记录每个段的主存起始地址、段的长度、允许的访问方法。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片),容易实现对各段的保护和信息共享。

  

两者的不同点:

  • 目的不同:分页是方便系统管理由系统硬件划分的,对用户透明,它是信息的物理单位;分段它是信息的逻辑单位,它含有一组其意义相对完整的信息,对用户可见;
  • 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;
  • 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;(页号和页内地址是机器硬件的功能)
  • 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;
  • 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。
  • 段式管理便于实现动态链接,而页式只能进行静态链接

三、虚拟内存

局部性原理

主要分为时间局部性和空间局部性。

  • 时间局部性: 如果程序中某个数据被访问,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)
  • 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据结构在内存中都是连续存储的)

虚拟内存

虚拟内存的基本思想是:为每个进程构造一个独立的足够大的地址空间,允许进程的地址空间不必全部进入主存就可以运行,只需要把运行时用到的部分信息装入。

以请求分页式为例,当程序引用到一部分在内存中的页时,由硬件进行正常地址的映射;当程序引用到一部分不在内存中的页时,操作系统将产生缺页中断,进行缺页处理,从磁盘中取得缺的页放入内存,如果内存已满,还会根据页面淘汰算法将主存中的页换出。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应内存上的一块,还有一些没加载在内存中的对应在硬盘上。

注意,请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。

页式虚拟存储器管理

页表会增加有效位和修改位

页面淘汰算法

  • FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到);
  • LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断;
  • LFU(Least frequently use)最少使用次数算法:根据使用次数来判断;
  • OPT(Optimal replacement)最优置换算法:理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。

当页交换算法不合理时,如果一个页刚被调出内存,下面又要访问它,这样如果频繁地发生这种情况,那么处理器大部分时间都消耗在内存与外存之间的页交换上了,而不是执行指令。这种情况叫做“系统抖动”。

段式虚拟存储器管理

段表增加有效位,修改位,采用段的动态链接,即在程序运行或装入时进行链接,节省时间,便于进行段的共享。

段页式虚拟存储器管理

段的逻辑地址转换位一维的线性地址(虚地址),再转换为主存物理地址

进程的虚拟地址空间

在Linux下为4GB,进程私有部分占3GB,进程共享的操作系统部分占1GB。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、逻辑地址如何转换为物理地址
  • 二、分页和分段的区别?
  • 三、虚拟内存
    • 局部性原理
      • 虚拟内存
        • 页式虚拟存储器管理
          • 页面淘汰算法
            • 段式虚拟存储器管理
              • 段页式虚拟存储器管理
                • 进程的虚拟地址空间
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档