Minix内存管理(1)

本文介绍了Minix操作系统中内存管理的基本原理和实现,包括物理内存的分配、回收、最大空洞大小的获取以及空洞列表的数据结构。Minix采用简单的内存管理策略,通过首次适配算法分配内存,并使用链表维护空洞信息。文章详细解析了内存分配和释放的代码实现,以及空洞初始化的过程,展示了内存管理的核心功能。
摘要由CSDN通过智能技术生成

 

Minix内存管理

1概述

Minix 在设计时被分成了四层,如下图所示,第1层和第2层是进程管理和I/O任务,合称为Minix的核心(kernel), 内存管理(Memory Manager,下文简称MM) 并不是内核的一部分,它位于内核之上的第三层,主要处理的是FORK,EXEC,BRK等涉及到内存访问的系统调用。它和内核之间通过消息来通信。

 

本文首先介绍内存管理最基本的部分:物理内存的分配和回收,然后介绍和内存分配相关的系统调用,例如FORKEXECBRK、信号处理等,其中会涉及到进程管理和文件系统。通过本文的介绍,大家会对Minix的内存管理有大致的了解,并且能够清楚的看到一段可执行代码如何被装入内存,分配资源后执行的。

 

注:下文中程序的行号和《操作系统:设计与实现》一书中附录A保持一致

 

2物理内存的分配和回收

内存管理的策略有很多,比如交换、分页、分段、段页式等,Minix的内存管理非常简单:既不分页也不交换。存储管理器保存着一张按照内存地址排列的空洞列表。当由于执行系统调用FORKEXEC需要内存时,系统特用首次适配算法对空洞列表进行按索找出一个足够大的空洞。一旦一个程序被装入内存,它将一直保持在原来的位置直到运行结束,它永远不会被换出或移动到内存的其他位置去,为它分配的空间也不会增长或缩小。

物理内存管理主要包括下面几种功能:

1.       内存初始化:当MM启动时需要初始化内存空洞表

2.       分配指定大小的内存

3.       释放一块以前分配的内存

4.       返回当前最大空洞的大小

 

空洞列表的数据结构如下:

18820     #define NR_HOLES         128    /* max # entries in hole table */

18821     #define NIL_HOLE (struct hole *) 0

18822    

18823     PRIVATE struct hole {

18824       phys_clicks h_base;           /* 空洞的开始地址*/

18825       phys_clicks h_len;            /* 空洞的长度 */

18826       struct hole *h_next;          /* 指向下一个空洞 */

18827     } hole[NR_HOLES];

 

18830     PRIVATE struct hole *hole_head; /* pointer to first hole */

18831     PRIVATE struct hole *free_slots;        /* ptr to list of unused table slots */

上面的数据结构说明,空洞表中共有128个表项,各个表项之间通过指针连接成一个链表。

指针hole_head指向第一个空洞,free_slots的含义在下文会说明

 

由于MM采用了非常简单的策略,所以其数据结构也非常简单,操作无非是链表的遍历,增加,删除等,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值