局部性通常被描述为有两种不同的形式:时间局部性和空间局部性。在具有良好时间局部性的程序中,被引用一次的内存位置很可能在不久的将来被再次引用多次。在具有良好空间局部性的程序中,如果一个内存位置被引用一次,那么该程序很可能在不久的将来引用附近的内存位置。
细分内存支持多进程;内存管理需要有适当数目的就绪进程以消耗可用的处理器时间。
程序员事先并不知道某个程序执行期间会有其他哪些程序驻留在内存中,程序换出到磁盘再换入时地址会不一样。
基址寄存器+相对地址=物理地址/绝对地址
该进程以外的其他进程不能未经授权的访问该进程的内存单元,内存保护需求必须由处理器(硬件)来满足。
多个进程执行同一个程序时,允许每个进程访问该程序的同一个副本。
程序是用模块编写的(比如目标文件)
模块可以独立编写和编译
为模块提供不同程度的保护(只读、仅执行)
相关问题:进程之间共享模块
如dll,库文件
内存和外存之间移动信息的任务由系统负责
提前将内存进行区域划分
等大小内存分段:
内存分配:小于或等于此内存段就将此内存分配给该进程
内存交替:如果所有内存都是满的,操作系统可以把进程从内存里换出来
内存使用效率不高,进程需求与内存大小不匹配,会存在内部碎片,使用不等大小的内存分段可以减少上面的问题,但是不一定能解决(使用放置算法之后仍然会有内部碎片)
会存在外部碎片,可以使用压缩技术(操作系统不时地移动进程,使得进程占用的空间连续,使空闲空间连成一片),但是非常费时,重定位的代价很大
放置算法:最佳适配(遍历所有内存空间,大小最适合,速度慢碎片少),首次适配(第一个满足条件的,前面碎片多),临近适配(从上一次分配的内存往后找,后面碎片多)
仅当程序请求分配的空间大小大于空闲空间的一半时,才做分配;【二分法】
随时对空闲空间进行分裂和合并。
进程被分成页,内存被分成帧或页帧,页和页帧大小一样。操作系统为每个进程保持页表,页表记录页在哪个页帧上。每页的大小是固定的。
寻找地址时,只要把页号换成页帧号就可以了,偏移量不变。
所有程序的的所有段不要求是同样大小,由段号+偏移量(物理地址)组成,有段最大长度的限制。
绝对地址:段号+偏移量。段的大小是动态变化的。
宏观上分成段,每段里面分成页