操作系统学习之内存管理

逻辑地址寻址空间(计算机有多少位)

物理地址寻址空间:内存大小

进程访问内存:基地址+界限地址  如果超过界限地址那么就会报异常

程序执行三个阶段:编译阶段,加载阶段,运行阶段。

 程序可能在编译阶段就能获得物理地址,进而可以直接加载到内存执行。

MMU:内存管理单元,实现虚拟地址(逻辑地址)到物理地址的转换。

动态加载:程序只有需要被调用时才会被加载到内存,比如A程序需要调用B程序,但是A程序运行出错,那么B程序就不需要加载到内存了。

动态链接库:系统库,链接到用户程序以便用户程序能过运行;动态链接库只有在程序运行时才会被加载到内存。

共享库:实现库的兼容,因为库更新时,新库可能会导致新编译的程序(库更新之后编译程序)不兼容。

进程进入内存有三种分配方案:首次适配,最优适配,最坏适配。

内存分配:

①连续内存分配:两个进程所占用的内存之间是相连的

操作系统将内存分成块:块与块之间的叫做外部碎片,快内部没使用或者不能使用的内存为内部碎片。

使用连续内存分配会产生内部和外部碎片,因为在一个块内部可能有多个进程,这样会导致有一部分内存不能使用产生内部碎片

②非连续内存分配

分段,分页

分段是将内存分成多个段,将进程加载到对应段中

分页是将内存分成大小相同的页,在同一页的程序能共享数据

分页技术:分层,hash,倒置

分页技术是实现逻辑地址到物理地址映射,而且物理页和虚拟页大小一样  计算公式:页码*页大小+页内偏移

使用页表实现虚拟页码到物理页码的映射(指针)。

分层:因为计算机内存发展成32位,64位,导致页表非常大(页是表示偏移地址,页表是表示虚拟页码到物理页码之间的映射,页表存储的就是页码)

比如页大小位12位,使用32 位系统,页表大小位20位,可以分成10位页表,和10位页码,来表示以前20位的页码,而且因为采用了分层技术,一些用不到的逻辑地址页可以直接删除

不使用分层需要保留逻辑地址页(因为逻辑地址页必须是连续的),采用分层方法可以不需要标志位位0(用不到的地址页)的逻辑地址页。

hash技术:将物理内存地址映射为逻辑地址,所以一个逻辑地址就会对应多个物理地址(大大减小页表大小)(直接百度hash页表有详细的描述)

倒置页表:将物理地址映射为逻辑地址,可以保证美一个逻辑地址都是可用的

倒置

原文地址:https://www.cnblogs.com/guosai1500581464/p/13071539.html