《操作系统》课程笔记(Ch08-内存管理策略)

摘要:
从虚拟地址到物理地址的映射是内存管理单元MMU完成的,基地址寄存器内容加上逻辑地址即为物理地址。这使得所有进程总的物理地址空间可以超过真实系统的物理地址空间。现在多采用可变分区方案,操作系统维护一个表,记录哪些内存可用。通过该二元组,结合段表,就能定位物理内存。这样,整个系统只有一个页表,并且每个物理内存的页只有一个相应的条目。

背景知识

  • 基地址寄存器含有最小的合法物理内存地址,界限地址寄存器指定了范围的大小,两者共同定义了逻辑地址空间,即进程可以合法访问的地址范围。

  • CPU生成的地址是逻辑地址,内存单元看到的地址是物理地址。从虚拟地址(逻辑地址)到物理地址的映射是内存管理单元MMU完成的,基地址寄存器(在这称为重定位寄存器)内容加上逻辑地址即为物理地址

  • 用户只生成逻辑地址,逻辑地址在真正使用时会映射到物理地址,这之间的映射对内存管理至关重要

  • 进程可以暂时交换到后备存储,再次执行时调回内存。这使得所有进程总的物理地址空间可以超过真实系统的物理地址空间

连续内存分配

每个进程位于一个连续的内存区域,与包含下一个进程的内存相连。以前用固定分区方案,每个分区大小一致,可运行一个进程。现在多采用可变分区方案,操作系统维护一个表,记录哪些内存可用。在运行一段时间后,会出现大小不一的孔。

《操作系统》课程笔记(Ch08-内存管理策略)第1张

如何选择合适的孔分配给进程?主要有下面三种方法:

  • 首次适应:分配首个足够大的孔
  • 最优适应:分配尽量小的孔
  • 最差适应:分配最大的孔

通常,前两者的性能更好。

碎片问题

  • 外部碎片:存储被分成了大量在外部的、可分配的小孔,但各自又不足以支持一个进程的运行
  • 内部碎片:进程分配到的内存可能比所需的大,多出的这部分在分区内部,但又不能再用

紧缩可以解决外部碎片问题,它将小块进行移动和重组,但重定位不是一定可行的;分段和分页技术可以解决外部碎片问题,它们允许逻辑地址空间不连续。

分段

程序员通常将内存看作一组不同长度的、之间没有特定顺序的段,而不是一个线性数组。为了进行定位,逻辑地址由一个二元组<段号s,偏移d>构成。通过该二元组,结合段表(段号-基地址-段长界限),就能定位物理内存。

  • 通过段号查出基地址和界限
  • 基地址+偏移得到物理地址
  • 注意检查偏移小于等于段长界限,否则非法

分页

提供了访问物理内存的另一种方式,能彻底消除外部碎片。

物理内存分为固定大小的块,称为逻辑内存分为同样大小的块,称为。当执行一个进程时,它的页从文件系统中加载到内存中的可用帧

一些性质

  • 页大小等于帧大小(物理块大小)

  • 如果逻辑地址空间有m位,页大小为2^n字节,则逻辑地址可以表示为:

    <页码p(m-n位),页偏移d(n位)>

  • 虚拟地址空间为2^m*1Byte(假设按字节编址)

  • 通常每个进程都有一张页表,建立了页码-物理块号的映射

查表过程

《操作系统》课程笔记(Ch08-内存管理策略)第2张

快表TLB

TLB是关联的高速内存,访问速度非常快。TLB包含少数的页表条目,可用于存储经常访问的页表项目。先查TLB,当页码不在TLB中时(未命中),才访问内存中的页表。

有效内存访问时间EAT

表示进行一次内存访问的期望用时,通过概率进行加权求得。

《操作系统》课程笔记(Ch08-内存管理策略)第3张

其他

  • 保护

    在页表中增加有效-无效位,用于控制能否对某些帧进行访问

  • 共享页

    分页的优点之一是可以共享公共的可重入代码(不能自我修改的代码、纯代码,即在执行期间不会改变)

页表的组织

  • 分层分页

    现代操作系统支持很大的逻辑地址空间,这将使得页表非常大(页大小和之前基本相同,则m-n变大)。为了解决这个问题,使用分层页表,即将页表再分页。

    《操作系统》课程笔记(Ch08-内存管理策略)第4张

  • 哈希页表

    处理大于32位地址空间的常用方法是哈希页表。

    用页码通过H函数获得哈希表Entry,哈希表项是帧号的拉链。

    《操作系统》课程笔记(Ch08-内存管理策略)第5张

  • 倒置页表

    对于每个真正的内存页或帧,才有一个条目。这样,整个系统只有一个页表,并且每个物理内存的页只有一个相应的条目。

    减少了存储空间,但查找时间增加了,最坏需要遍历页表。

分页和分段的主要区别

  • 页是信息的物理单位

    段是信息的逻辑单位

  • 页的大小是由系统确定的

    段的长度因段而异

  • 分页的进程地址空间是一维的

    分段的进程地址空间是二维的

  • 分页系统很难实现过程和数据的分离

    分段系统却可以很容易实现这些功能

免责声明:文章转载自《《操作系统》课程笔记(Ch08-内存管理策略)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LaTeX的tasks宏包MyBatis的SQL语句映射文件详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux free 命令

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 如果加上 -h 选项,输出的结果会友好很多: 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数: $ free -h -s 3 上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。(Ubuntu 16.04 中...

navicat和 plsql 连接oracle数据库 总结

打开 navicat  -->工具-->选项-->oci   右侧选择oci.dll 的路径 默认 在 navicat的安装目录下有一个 instantclient 的文件夹 直接选择这个里面的 oci.ll 就可以了 我的 navicat 是 11.1.10 64-bit   instantclient 是 instantclient_...

sgdisk基本用法

简介 sgdisk是Linux下操作GPT分区的工具,就像fdisk是操作MBR分区的工具。关于GPT和MBR的区别请参考: http://www.anchor.com.au/blog/2012/10/the-difference-between-booting-mbr-and-gpt-with-grub/ 使用 新建分区 root@ceph1:~...

[转]TCP/IP 协议基础(一)

参考书籍为《图解tcp/ip》-第五版。这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述)、OSI参考模型、网络概念的本质、网络构建的设备等 下面是协议层从底层至顶层的一个模型图: 一、计算机网络的背景 1.1 计算机的发展 有人说:“20世纪最伟大的发明就是计算机”,自诞生伊始,计算机经历了一系列发展,从...

mongodb研究(mongodb 内存数据库)

本日志大部分都不是原创的转载复制的会带链接保持版权 工作中使用mongodb已经好久了,讽刺的是到了最后快离职的时候才有时间好好研究下源码。   印象:mongodb是一个内存数据库,数据都是放到内存里面的,所以速度上不比redis慢。   想法: mongodb对数据的操作大部分都在内存中。但mongodb并不是单纯的内存数据库。甚至个人认为不属于内存数...

第一篇-ubuntu18.04访问共享文件夹

1. 在访问Windows共享资料之前,请确保Windows共享是可用的。Linux访问Windows共享或者LInux共享资料给Windows时,都使用Samba软件 rpm -qa | grep samba-client查看samba-client是否安装。如果没有, sudo apt-get install smbclient安装 2. 查看该用户共...