操作系统的学习(3)——物理内存管理:非连续内存分配
来源:互联网 发布:js获取选中的radio 编辑:程序博客网 时间:2024/05/23 22:49
连续分配内存的缺点:内存必须连续比较难达到,存在外碎片和内碎片,内存分配的动态修改困难以及内存的利用率较低。
非连续内存分配的设计目标:提高内存的利用效率和管理灵活性。
非连续内存分配允许一个程序使用非连续的物理地址空间,允许共享代码和数据并且支持动态加载以及动态链接。
非连续内存分配需要解决的问题:
1)如何实现虚拟地址和物理地址的转换(软件实现和硬件实现)。
2)如何选择非连续内存空间的大小(段式管理和页式管理)。
段式存储管理
段地址空间
主代码段、子模块代码段、公用库代码段、堆栈段、堆数据。初始化数据段、符号表等
段访问机制
段表示访问方式和存储数据等属性相同的一段地址空间。
每一个段对应一个连续的内存块,若干个段组成进程逻辑地址空间。
段访问:逻辑地址由二元组(s,addr)表示 s——段号 addr——段内偏移
当程序在CPU上执行,要访问一个存储单元时,首先找到逻辑地址(段号和段内偏移),先用段号查找进程的段表,段表中每一项对应一个段描述符,段表中每一项的基本内容是段的起始地址和长度,段表中的内容可以用操作系统的软件去控制。得到段的长度后,由硬件存储管理单元mmu就会把段的长度和偏移取出来作比较,看是否越界,如果越界就抛出异常,如果没有越界,就在MMU里利用段基址以及段的偏移就可以找到访问的内容。
页式存储管理:将物理地址空间分成的基本单位叫做页帧(大小为2^n),逻辑地址空间的基本单位为页面。帧和页的大小必须相同。
页面到页帧的转换
将物理地址组成一个二元组(f,o),f表示帧号,o为偏移量,s代表o偏移的位数。f位共有2^f个帧,s位,每帧有2^s字节。
物理地址 = f*2^s+o
页
页内偏移=帧内偏移 但通常 页号大小不等于帧号大小
将物理地址组成一个二元组(p,o),p表示页号,o为偏移量,s代表o偏移的位数。p位共有2^p个帧,s位,每帧有2^s字节。
页表:保存了逻辑地址到物理地址的对应关系
程序在CPU执行,执行时在逻辑地址里得到的地址表示为p o,用p去页表里去寻找与之对应的f,由于页面偏移与帧面偏移相同,这样就可以找到逻辑地址对应的物理地址。
快表(TLB):利用缓存机制来减少对内存的访问。
将近期访问的页表项缓存到CPU里,未使用快表的时候,逻辑页号在内存中去查找页表,找到物理页号,然后就可以得到物理地址;如果使用块表缓存后,在CPU里加上一组关联存储器,关联存储器拥有一个key值来查找所有同行的表项,类似于字典,通过key值匹配来找到物理地址,不需要去访问内存,但是如果没找到相应的key值,就还得去查找页表,然后才得到物理页号。
多级页表:通过间接引用的方式将页号分成若干级,来减少页表的长度来减少页表占用存储空间。
反置页表:减少页表占用存储空间的一种做法。
页寄存器和反置页面的思路:不让页表和逻辑地址空间大小对应而是让页表和物理地址空间大小对应,这样的话不论是进程数量增加和虚拟内存的增加都对页表占用空间没有影响。
页寄存器:每个帧与一个页寄存器关联,通过hash映射值查找对应页表项中的帧号。
寄存器内容包括 使用位(此帧是否被进程占用),占用页号(对应的页号p),保护位(约定页的访问方式(可读可写等))
好处:页表大小相对于物理内存而言很小。页表大小与逻辑地址空间大小无关。
缺点:页表信息对调后,需要依据帧号查找页号。在页寄存器中搜索逻辑地址中的页号,比较繁琐。
段页式存储管理:段式和页式的结合,在段式存储管理的基础上,给每个段加一级页表。
可以在段表的基址上加一个共享段,俩个不同的段表通过指向相同的页表基址,实现进程间段的共享
- 操作系统的学习(3)——物理内存管理:非连续内存分配
- 操作系统的学习(2)——物理内存管理:连续内存分配
- 物理内存连续内存分配
- 操作系统-内存管理-内存空间的连续分配方式
- 4.内存非连续分配管理方式
- 内存管理---非连续存储分配
- 分配连续物理内存的原因
- 分配连续物理内存的原因
- 分配连续物理内存的原因
- 操作系统 笔记(三)计算机体系结构,地址空间、连续内存分配(四)非连续内存分配:分段,分页
- 操作系统--内存管理之连续分配管理方式
- 内核非连续内存分配(Vmalloc)
- 内存管理之非连续分配管理方式
- 物理内存非连续性分配
- linux高端内存管理之非连续内存区(分配和释放)
- Linux内存管理学习笔记--物理内存分配
- 深入探讨操作系统的内存管理——虚拟内存与物理内存
- linux内存管理之非连续物理地址分配(vmalloc
- 使用eclipse搭建Spring框架
- 直播协议 HTTP-FLV 详解
- in和exists的区别
- 多态,虚函数,纯虚函数 , 虚析构函数 ,抽象类
- 深度学习与文本分类总结第二篇--大规模多标签文本分类
- 操作系统的学习(3)——物理内存管理:非连续内存分配
- kaldi 安装
- ButterKnife解析
- Android自定义ViewGroup常用知识点归类
- ffmpeg 交叉编译 make install: strip: Unable to recognise the format of the input file
- 【Python】numpy学习总结2
- QT学习笔记—.pro变量解析
- 程序员读书之三毛传
- 访问图像像素信息方式的优化