逻辑地址寻址空间(计算机有多少位)
物理地址寻址空间:内存大小
进程访问内存:基地址+界限地址 如果超过界限地址那么就会报异常
程序执行三个阶段:编译阶段,加载阶段,运行阶段。
程序可能在编译阶段就能获得物理地址,进而可以直接加载到内存执行。
MMU:内存管理单元,实现虚拟地址(逻辑地址)到物理地址的转换。
动态加载:程序只有需要被调用时才会被加载到内存,比如A程序需要调用B程序,但是A程序运行出错,那么B程序就不需要加载到内存了。
动态链接库:系统库,链接到用户程序以便用户程序能过运行;动态链接库只有在程序运行时才会被加载到内存。
共享库:实现库的兼容,因为库更新时,新库可能会导致新编译的程序(库更新之后编译程序)不兼容。
进程进入内存有三种分配方案:首次适配,最优适配,最坏适配。
内存分配:
①连续内存分配:两个进程所占用的内存之间是相连的
操作系统将内存分成块:块与块之间的叫做外部碎片,快内部没使用或者不能使用的内存为内部碎片。
使用连续内存分配会产生内部和外部碎片,因为在一个块内部可能有多个进程,这样会导致有一部分内存不能使用产生内部碎片
②非连续内存分配
分段,分页
分段是将内存分成多个段,将进程加载到对应段中
分页是将内存分成大小相同的页,在同一页的程序能共享数据
分页技术:分层,hash,倒置
分页技术是实现逻辑地址到物理地址映射,而且物理页和虚拟页大小一样 计算公式:页码*页大小+页内偏移
使用页表实现虚拟页码到物理页码的映射(指针)。
分层:因为计算机内存发展成32位,64位,导致页表非常大(页是表示偏移地址,页表是表示虚拟页码到物理页码之间的映射,页表存储的就是页码)
比如页大小位12位,使用32 位系统,页表大小位20位,可以分成10位页表,和10位页码,来表示以前20位的页码,而且因为采用了分层技术,一些用不到的逻辑地址页可以直接删除
不使用分层需要保留逻辑地址页(因为逻辑地址页必须是连续的),采用分层方法可以不需要标志位位0(用不到的地址页)的逻辑地址页。
hash技术:将物理内存地址映射为逻辑地址,所以一个逻辑地址就会对应多个物理地址(大大减小页表大小)(直接百度hash页表有详细的描述)
倒置页表:将物理地址映射为逻辑地址,可以保证美一个逻辑地址都是可用的
倒置