计算机模型
内存空间分配
固定分区
Fixed Partitioning
进程只能被加载到与其大小匹配的分区中,适用于单用户、单任务的环境。
分区的大小需要根据系统的需求和性能考虑来确定
动态分区
内存碎片化
内存数据结构
位图
Bit Map,每个内存块都对应一个位,其中1表示已分配,0表示未分配。
- 使用位图进行内存分配时,每个分配单元都有两个可能的状态:已分配或未分配
如果一个内存空间的大小为 ,并以字节的分配单元进行分配,那么每个位图的大小将需要 ,共有个单元。
- 分配单元的大小是一个重要的设计考虑因素。
- 如果分配单元太大,位图的大小会较小,但我们只能按照分配单元的倍数分配内存空间,这意味着最后一个分配的单元中可能有更多的空间不会被进程使用。即可分配的内存空间可能会存在浪费。
链表
Linked List,可以是单向链表或双向链表,每个内存块都包含一个指针,指向下一个内存块。
伙伴系统
Buddy System
分页
Paged Architecture,将内存分割为多个页面,每个页面具有相同的大小。当进程访问某个逻辑地址时,通过页表查找对应的物理页,并将逻辑地址转换为物理地址进行访问。
缺点
- 增加访问延迟:For every logical memory access, two real memory accesses may be needed.
- 导致更大额外开销:Page tables can be large and need to be kept in main memory.
- 产生较多内部碎片:A process may not require all of the memory space of the last page assigned to it.
页面置换算法
Page Replacement Algorithms,当物理内存中没有足够的空间来容纳所有需要驻留在内存中的页面时,操作系统必须选择要从内存中移除的页面,以便为新的页面提供空间。
- 先进先出(First-In-First-Out,FIFO):按照页面进入内存的顺序,选择最早进入的页面进行置换。
- 最近最久未使用(Least Recently Used,LRU):最久未使用的页面被认为是最有可能在近期不再被访问的页面。这个算法需要维护一个页面访问历史记录,相对于 FIFO 算法来说,它更好地反映了页面的访问模式。
- 最不经常使用(Least Frequently Used,LFU):页面访问频率最低的页面被认为是最不重要的页面,可以优先进行置换。