清华大学操作系统OS学习(五)——物理内存管理:非连续内存分配
非连续内存分配
分配给一个程序的物理地址空间是非连续的。
优点:更好的内存利用和管理、允许共享代码与数据、支持动态加载和动态链接。
缺点:带来额外的管理开销:如何建立虚拟地址和物理地址之间的转换。两种实现:软件方案和硬件方案。
两种硬件方案:分段、分页。
一、段式存储管理
段表示访问方式和存储数据等属性相同的一段地址空间。
1、分段机制:程序的分段地址空间设计,寻址方案。
把逻辑地址空间分散到多个物理地址空间,堆-→堆,运行栈-→运行栈,程序数据-→数据,运行exe—>代码和库
2、寻址方案:
一维连续逻辑地址,把一个段看成一个内存块。程序访问内存地址分为两部分,段的寻址(段号segment number)+ 段内偏移的寻址(addr)
段寄存器+地址寄存器实现方案(x86)
单地址实现方案(s+addr合在一起)
3、硬件实现方案
二、页式存储管理
1、划分物理内存至固定大小的帧(frame,物理帧),逻辑地址空间也要到相同大小的页(page,逻辑页)。
两者大小要相等,为2的幂数,如512,4096,8192。
建立方案,change pages to frames,需要页表和MMU/TLB(快表,完成对MMU的缓存)。
2、过程:首先CPU得到逻辑地址,逻辑地址分成两块,一块表示页号,一块表示页内偏移地址。有一个页表,页表的索引就是页号,内容是帧号。我们可以通过页号查找到对应的帧号,帧号加上偏移,就能得到物理地址,找到物理地址对应的内存空间。
3、特点:页内偏移大小一定,不需要考虑不同段大小不一致,硬件更易管理;PAGE的地址空间大小和FRAME的地址空间大小是不同的,一般前者更大,页是虚拟内存,连续,帧是不连续的物理内存,不是所有的页都有对应的帧,装不下时会用虚拟内存(以后会讲)。有助于减少碎片。
三、页表概述(TLB)
1、页表结构
大数组,索引是page number,内容frame number
每个运行的程序都有一个页表,属于程序运行状态,会动态变化,PTBR(页表基址寄存器)。
页表项中除了frame number 还有标志位flags检查是否存在地址, including dirty bit(修改位), resident bit (是否存在该对应的物理地址)and clock/reference bit(引用位).
2、性能问题:
①时间开销:页表太大不能放到CPU中,只能放内存,每次寻址一个内存单元需要2次内存访问,获取页表项和访问数据
②空间开销:1个页表可能非常大,64位机器,寻址空间是2的64次幂,一个页size如果只有1024 1k,要建立一个极大的页表=254,存不下。○2n个程序对应n个页表,页表个数非常大。
③两种解决方法:缓存(caching)和间接(indrection)访问
四、快表和多级页表
1、快表(TLB)
在CPU的MMU中,存在一个cache叫TLB(translation look-aside Buffer ),缓存近期访问的页帧转换表项。首先CPU根据逻辑地址查快表TLB(key=p, value=f,由于使用关联内存(associate memory)实现,具备快速访问性能,很少超过64个表项,每个对应一个页面的相关信息。)如果命中,FRAME很快被获取,如果未命中MISS,则去查页表并更新对应的表项到TLB中。
TLB的缺失不会很大,32位一个页4K,访问4K次miss一次,可以接受。写程序时注意具有局部性,把频繁的访问集中在一个区域。以避免对内存的访问。另外,还需要注意,miss后,更新是硬件完成(x86),还是OS完成(现代机器,MIPS, SPARC, HP PA)。
TLB可以让寻址的时间开销得到极大的降低。
2、二级/多级页表
将逻辑地址的页号分成多个部分,如下图,分成一级页表的页号p1和二级页表的页号p2,使得将对一个大地址范围的寻址拆分为对几个小的页表的寻址。
3、为什么说二级/多级页表可以节省空间?
第一,如果一级页表中的第一个PTE(分页)是空的,那么相应的二级页表就根本不会存在,这代表着一种巨大的潜在节约,因为对于一个典型的程序,比如4GB,8GB的虚拟地址空间的大部分都将是未匹配的。
第二,只有一级页表才需要总是在主存中;虚拟存储器系统可以在需要时创建,页面掉入或调出二级页表,这就减少了主存的压力;只有最经常使用的二级页表才需要缓存在主存中,这种离散的存储方式是非常便利的。这就是多级页表的一个根本性的优点:可以离散存储。(单级页表为了随机访问必须连续存储,如果虚拟内存空间很大,就需要很多页表项,就需要很大的连续内存空间,但是多级页表不需要)
二级表只是从进程的角度来看,为进程节省了页表项(其实所有的页表存储空间增大了)。二级模式通过只为进程实际使用的那些虚拟内存区请求页表来减少页表,就是进程未使用的页暂时可以不用为其建立页表,因为如果使用一级页表的话,你就必须为所有的4G范围内分配页表,不能细分。每个活动进程必须有一个分配给它的页目录,不过没必要马上为进程的所有页表都分配ram,只有在进程实际需要一个页表时才给该页表分配ram,这样就提高了效率。
五、反置页表
1、折中方案——-哈希表
用硬件加速,建立哈希表来实现反向页表。
对页号做哈希计算,页i放在表中funchash(i)的位置,求得f(i)作为页寄存器表的索引获取对应的页寄存器再检查标签是否有i。
2、页寄存器方案的特征
优点:本身物理存址小省空间,不再是每个应用程序都要page table了,整个系统只用一个。
缺点:需求高,有高效哈希函数和解决冲突的机制,要硬件软件配合
六、段页式存储管理
1、段页式存储管理
在段式存储管理基础上,给每个段加一级页表
逻辑地址:段号+若干个页号+页内偏移
物理地址:帧号+页内偏移
2、段页式存储管理中的内存共享
通过指向相同的页表基址,实现进程间的段共享
清华大学操作系统OS学习(五)——物理内存管理:非连续内存分配相关推荐
- 【清华大学】操作系统 陈渝 Part3 ——物理内存管理 之 连续内存分配
[清华大学]操作系统 陈渝 Part3 --物理内存管理 之 连续内存分配 3.1计算机体系结构及内存分层 计算机体系机构 内存体系层次 管理内存方法 3.2地址空间 & 地址生成 地址空间定 ...
- 清华大学《操作系统》(六):非连续内存分配 段式、页式、段页式存储管理
背景 连续内存分配给内存分配带来了很多不便,可能所有空闲片区大小都无法满足需求大小,这个分配就会失败.基于这种现状,就有了非连续内存分配的需求.非连续分配成功的几率更高,但也面对更多的问题,比如分配时 ...
- OS学习笔记-6(清华大学慕课) 非连续内存分配管理
非连续内存分配的需求 有可能找不到连续的一块内存空间满足进程需求 连续分配存在内碎片,外碎片,内存利用率比较低 非连续内存分配目标:提高内存利用效率以及管理灵活性 于是由于非连续内存块的大小分成了:段 ...
- 【操作系统/OS笔记05】非连续内存分配:分段、分页、页表
本次笔记内容: 4.1 非连续内存分配:分段 4.2 非连续内存分配:分页 4.3 非连续内存分配:页表 文章目录 为什么需要非连续内存分配 非连续分配的优劣 分段(segment) 分段寻址方案 分 ...
- 操作系统 非连续分配_操作系统中的连续和非连续内存分配
操作系统 非连续分配 In this article, we will learn about the different types of memory management techniques ...
- 操作系统-- 连续内存分配、非连续内存分配
文章目录 一.连续内存分配 1.内存碎片的问题 (1)外部碎片 (2)内部碎片 2.连续内存分配算法 (1)首次适配 (2)最优适配 (3)最差适配 3.碎片整理方法 4.连续内存分配的缺点 二.非连 ...
- 连续内存分配与非连续内存分配
连续内存分配 首次适配:空闲分区以地址递增的次序链接.分配内存时顺序查找,找到大小能满足要求的第一个空闲分区. 最优适配:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区. 最坏适配:空闲 ...
- 操作系统【三】内存管理基础+连续内存分配
内存的基础知识 内存分为按字节编址(8位)和字编制(不同计算机不一样,64位计算机就是64位,即8个字节) 相对地址=逻辑地址 绝对地址=物理地址 从逻辑地址到物理地址的转换由装入解决. 装入的三种方 ...
- 操作系统五: 非连续内存分配
如何建立虚拟地址和物理地址之间的转换? 分段(Segmentation) 程序的分段地址空间 分段寻址方案 分页(Paging) 逻辑地址空间被划分为页 页表(Page Table)
- 《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统
内存碎片 在没有其他方式辅助的情况下,我们分配给一个进程的内存是连续的.在分配时候我们需要有动态分配与碎片处理.如何理解呢?就是每个进程需要一块内存,我们要选取合适的位置的内存分配给它.当有的进程先结 ...
最新文章
- [JAVA EE] Thymeleaf 高级用法:模板布局,带参数的引用片段,表单验证,常用校验注解
- 核试验计算机模拟,随着信息技术的发展,包括核试验在内的许多科学研究都可以用计算机模拟...
- 原生js删除html,原生js模拟v-for增加删除.html
- 蓝桥杯 - 序列计数(记忆化搜索)
- 封装的ExtGrid 实现增、删、改、查等功能
- EL表达式的11隐含对象
- 程序员有哪些可以写博客的网站?
- 跨平台开发框架 Lynx 初探
- 互联网日报 | 6月23日 星期三 | 苏宁置业否认破产及相关传闻;满帮集团正式登陆纽交所;百度公布2030碳中和目标...
- Python基本操作(五) 标准数据类型(不可变类型)
- socket编程(四)
- 记一次MySQL中Waiting for table metadata lock的解决方法
- 一个成功企业家立下的22条规矩
- CnPack源码模板功能快速添加注释
- 【Python游戏】Python实现一个简易版本的阴阳师游戏 | 附带源码
- 关于power apps
- ftp上传软件,推荐5款好用的ftp上传软件
- 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
- 超快自旋电子学为电子信息新材料开辟了道路
- React的核心概念—— Jsx、 Component、 Props、 Refs、 State
热门文章
- 无法打开登录所请求的数据库 xxxx。登录失败。 用户 'NT AUTHORITY\SYSTEM' 登录失败。...
- 测试代码耗时的时间段(.net)
- 下载安装tomcat和jdk,配置运行环境,与Intellij idea 2017关联
- itext poi 学习之旅 (3)读取数据库信息并由excel展现出来
- STL(multiset) UVA 11020 Efficient Solutions
- 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行。
- Hyper-V 之04 SCVMM 2012 R2安装
- 3.2制作双绞线跳线
- 4.4系统,拍照-裁剪,resultCode返回0
- JavaScript 代码收集