页式管理

内存管理:页式虚拟内存管理

笑着哭i 提交于 2019-12-17 23:16:26
页式存储管理——虚拟内存——缺页中断,页面替换算法 开章明意 : 创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页4KB),内存中有对应的页框(设定同页)。通过页表(记录页和页框的对应关系),将最需要的页调入内存,其他页留在磁盘中。根据CPU的需要动态的更新页表,并调入调出页,实现对内存的充分利用。 本质就是:内存局部读入进程,其余的存储在磁盘中 内存不够用的问题—— 现阶段通常使用8G内存,但一个大型游戏就要10G+内存,如何解决? 虚拟内存 :给每个进程分配一个独立的地址空间(本质在磁盘上),每个进程独立的地址空间就叫虚拟内存。 虚拟内存中的页是连续的,但可以对应到内存中不连续的页框,这样就实现了对内存的充分利用。(不要求内存提供连续的存储空间) 当进程建立时, 数据储存于磁盘内的虚拟内存空间,也不需要为该进程去配置主内存空间,只有当该进程的页被调用的时候才会被加载到实际内存中。 操作系统为了管理内存,给每个进程都分配独立的地址空间,对32位的系统而言,这个空间的大小是4GB。这4GB并不是实际的物理内存,实际上并不存在,因此有虚拟内存这一名称。 建立映射关系: 页(page),页框(frame),页表 分为大小相等的多个块,称为页(Page).每个页都是虚拟内存中一段连续的地址(一般一页为4Kb),其中一部分对应物理内存上的一块(称为页框

对内存对齐模式的理解

社会主义新天地 提交于 2019-12-09 13:44:52
对内存对齐模式的理解 在学习结构体的时候,我们在定义一个结构体,例如, typedef struct STI { char id[9]; char name[15]; int age; char sex; int score; }STI; STI stu = {“123456”, “zhangke”, 18, 0, 90}; 经过上机验证会发现,sizeof(STI)的结果是36,而并不是33.而之所以会多出3个字节的原因就在于,内存对齐模式! 其实,内存对齐模式就是说,在内存中的所有变量的字节分配是按照1B,2B,4B或8B的倍数来分配存储空间的,而内存对齐的需要是基于“内存的页式管理”。内存的页式管理就是以页面的方式实现对内存的分配与回收,理解页式管理模式之前,需要了解“连续存储空间分配管理”模式。 “连续存储空间分配管理模式”,简单的说就是,操作系统基于“已分配空间表”和“未分配空间表”对内存空间的分配管理。我们可以通过C语言中的malloc函数和free函数来理解,malloc函数申请空间,需要提供申请的空间的大小,函数返回值是一个地址值,也就是说,我们不需要关心申请的空间的具体位置,只要提供大小即可,由操作系统为我们分配(空间足够就分配),而free函数需要我们提供首地址,不需要提供大小,因为操作系统会根据首地址在“已分配空间表”中就可以找到其对应的位置以及所占空间大小

存储管理-页式管理

匆匆过客 提交于 2019-12-05 07:30:55
存储管理-页式管理 页式管理解决什么问题 分区式管理,存在着严重的碎片问题使得内存的利用率不高 1.固定分区,因为每一个分区只能分配给某一个进程使用,而该进程可能占不满这个分区,就会有 内部碎片 2.动态分区,会产生大量的 外部碎片 ,虽然可以使用紧凑技术,但是这样时间成本过高了 出现这种情况的原因是分区管理必须要求进程占用一块连续的内存区域,如果让一个进程分散的装入到不同的内存分区当中的话,这样就可以充分的利用内存,并且不需要紧凑这种技术了。比如把一个进程离散的拆分放到零散的内存碎片中去,这样就可以更为高效的利用内存。也就是产生了非连续的管理方式。 比如就是把一个进程拆分为若干部分,分别放到不同的分区中,比如一个进程23M,可以拆分为10M,10M,3M放到不同的分区中 如果分区分的更小,23M拆分为11个2M的,和一个1M的,每个分区是2M,那么总共会装满11个分区,剩下一个分区装不满,也仅仅浪费1M的空间,也就是分区越小的话,那么就是内存利用率就会越高。 分区式管理时,进程的大小受分区大小或内存可用空间的限制 分区式管理也不利于程序段和数据的共享 页式管理的改进 页式管理只在内存存放反复执行或即将执行的程序段与数据部分 不经常执行的程序段和数据存放于外存待执行时调入。 页式管理的基本概念 页框(页帧):将内存空间分成一个个大小相等的分区,每个分区就是一个页框。 页框号