MINIX内存管理计算机内存管理概述_第1页
MINIX内存管理计算机内存管理概述_第2页
MINIX内存管理计算机内存管理概述_第3页
MINIX内存管理计算机内存管理概述_第4页
MINIX内存管理计算机内存管理概述_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MINIX内存管理计算机内存管理概 述 MINIX内存管理内存管理 MINIX内存管理计算机内存管理概 述 1内存管理概述内存管理概述 MINIX内存管理是由一个服务器进程,即进程管理 器完成的。 管理方式:段式动态(可变)分区分配方式+动 态(可变)分区分配方式, 不分页,书中也不讨论对换 分配算法:首次适应算法 分配内存的时机:fork()创建子进程时 或excel() 更换程序段的时候 MINIX内存管理计算机内存管理概 述 I、D空间结合空间结合 MINIX可使用结合的可使用结合的I和和D空间(即空间(即mproc中中 的的mp_flags标志的标志的SEPARATE置置0),此),此

2、 时,除进程控制块外的进程所有部分(正时,除进程控制块外的进程所有部分(正 文、数据和堆栈)共用一个内存块,它是文、数据和堆栈)共用一个内存块,它是 作为一个块申请和释放的。作为一个块申请和释放的。 MINIX内存管理计算机内存管理概 述 I、D空间相对独立空间相对独立 MINIX也可使用独立的也可使用独立的I和和D空间空间,而且这是而且这是MINIX3 的默认方式的默认方式. 此时此时,mproc中的中的mp_flags标志的标志的SEPARATE位位 置置1,进程间可以共享正文(即可重入的代码),进程间可以共享正文(即可重入的代码), 故进程的代码与其余的部分(数据和堆栈)可以故进程的代码

3、与其余的部分(数据和堆栈)可以 是分开的。是分开的。 创建子进程时,只需为子进程分配数据和堆栈的创建子进程时,只需为子进程分配数据和堆栈的 内存空间,子进程将共享父进程的代码。内存空间,子进程将共享父进程的代码。 执行执行exec系统调用时,系统也将查找进程表看它系统调用时,系统也将查找进程表看它 要执行的代码(通过要执行的代码(通过mproc中的中的mp_ino和和 mp_dev来找)是否已在内存,如果是,也只需来找)是否已在内存,如果是,也只需 要分配数据和栈的内存空间,否则还需分配代码要分配数据和栈的内存空间,否则还需分配代码 空间。空间。 MINIX内存管理计算机内存管理概 述 可执行

4、文件除了程序本身的内容外,还有可执行文件除了程序本身的内容外,还有 一头部信息,其中给出了一头部信息,其中给出了I/D空间是否独立、空间是否独立、 正文长度、已初始化数据段长度、正文长度、已初始化数据段长度、BSS长长 度、数据空间需要的内存总量(数据度、数据空间需要的内存总量(数据+数据数据 堆栈间的空隙堆栈间的空隙+堆栈的总长度)、堆栈长度、堆栈的总长度)、堆栈长度、 程序的入口点等信息。将它装入内存时,程序的入口点等信息。将它装入内存时, 系统将根据这些信息来为它申请内存空间系统将根据这些信息来为它申请内存空间 并安排内存布局。并安排内存布局。 MINIX内存管理计算机内存管理概 述 在

5、申请到的内存空间中,依次为正文、数在申请到的内存空间中,依次为正文、数 据(已初始化的数据和据(已初始化的数据和BSS)、数据和堆)、数据和堆 栈间的空隙、堆栈四部分。栈间的空隙、堆栈四部分。 头 正文 数据 符号* 磁盘可执行文件的格式 其中符号表仅用于调试,不装入内存 正文 数据+BSS 间隙 栈 进程在内存的布局 MINIX内存管理计算机内存管理概 述 虚地址空间 0 内存空间 0X32000 0X33C00 0X32C00 0X34800 0X34000 正文(3KB) 数据(4KB) 空隙(1KB) 堆栈(2KB) 0X2800 正文(3KB) 数据(4KB) 空隙(1KB) 堆栈(

6、2KB) 虚始址 栈 数据 正文 实始址 长度 0Xd00X80X2 0Xc800X7 0Xc800 I、D结合时进程虚、实地址空间的情况结合时进程虚、实地址空间的情况 MINIX内存管理计算机内存管理概 述 内存空间 0X32000 0X33C00 0X32C00 0X34800 0X34000 正文(3KB) 数据(4KB) 空隙(1KB) 堆栈(2KB) 虚始址 栈 数据 正文 实始址 长度 0Xd00X50X2 0Xcb00X4 0Xc800 x3 数据(4KB) 空隙(1KB) 堆栈(2KB) 正文(3KB) 虚地址空间 0 0 0 xC00 0 x1C00 I、D独立时进程虚、实地

7、址空间的情况独立时进程虚、实地址空间的情况 MINIX内存管理计算机内存管理概 述 I、D独立时进程两个进程共享内存正文段的情况独立时进程两个进程共享内存正文段的情况 进程1 0X3C000 0X3D000 0X3D400 0X3DC00 内存空间 0X32000 0X33C00 0X34800 0X32C00 0X34000 共享正文 (3KB) 数据(4KB) 空隙(1KB) 堆栈(2KB) 数据(4KB) 空隙(1KB) 堆栈(2KB) 进程2 进程2 进程1 虚始址 栈 数据 正文 实始址 长度 0Xd00X50X2 0Xcb00X4 0Xc800 x3 虚始址 栈 数据 正文 实始址

8、 长度 0Xf50X50X2 0Xf000X4 0Xc800 x3 MINIX内存管理计算机内存管理概 述 2 数据结构数据结构 一、进程表mproc (17608-17655) 17608EXTERN struct mproc 17609struct mem_map mp_segNR_LOCAL_SEGS; 17610 char mp_exitstatus; 17611 char mp_sigstatus; 17654 char mp_namePROC_NAME_LEN; 17655 mprocNR_PROCS; MINIX内存管理计算机内存管理概 述 系统中总共定义了NR_PROCS个mp

9、roc, 即系统中的任务进程只有proc,而不需要对 应的mproc;而驱动程序、服务器进程和用 户进程则不仅需要proc ,还需要对应的 mproc。 MINIX内存管理计算机内存管理概 述 mproc 的主要字段如下: mp_seg数组的含义与proc结构中的 p_memmap相同。用来记录对应进程正文 段、数据段、堆栈段的虚起始地址、实起 始地址和长度(单位为块:1024B)。 采用Intel 80 x86的MINIX中,由于数据 段、堆栈段的描述符是一样的,因此,当 MINIX的数据段或堆栈段在数据段内(包括 数据段、堆栈段和这两个段间的空隙)越 界时,硬件是无法提供越界保护的。 MI

10、NIX内存管理计算机内存管理概 述 进程标识数 pid_t mp_pid; 进程标识数 pid_t mp_procgrp; 进程组标识数, 用于信号系统 int mp_parent; 父进程标识数 进程的外部名称 mp_namePROC_NAME_LEN; MINIX内存管理计算机内存管理概 述 与进程对应的程序(即某可执行文件)相 关的信息: ino_t mp_ino; 可执行文件对应的I结点号 dev_t mp_dev; 存放可执行文件的设备的 设备号 time_t mp_ctime; 可执行文件的I结点修改 时间 MINIX内存管理计算机内存管理概 述 mproc的标志: 已分配出去的m

11、proc,其 mp_flags的IN_USE位(IN_USE=1)为1, 空闲mproc的相应位为0。 其余的标志见17658-17671。 MINIX内存管理计算机内存管理概 述 空洞表是一个用来描述空闲分区的单向 链,它按空闲分区地址递增的顺序排列, 它的头指针为hole_head。 另外,系统将 hole_NR_HOLES中没有 使用的数组元素拉成一个队列,队首指 针即free_slots。以后,要登记一个空洞 时,则必须从该队列中取得一个数组元 素。 MINIX内存管理计算机内存管理概 述 3 有关内存分配的函数 MINIX的内存分配采用动态分区管理方式,采用的 算法是首次适应算法。相

12、关的函数在 src/pm/alloc.c中。 函数alloc_mem(clicks):分配clicks块的内存空间。 成功,返回分配到的内存空间的起始地址(单位: 块);失败:返回NO_MEM(即0)。 del_slot(prev_ptr,hp)用来将hp所指的空洞从空洞 表中删去,并释放对应的表项到free_slots所指的 队列中。prev_ptr指向空洞表中位于hp所指的空 洞之前的空洞。 函数free_mem(base,clicks):释放基址为base, 大小为clicks的内存块(单位均为块)。释放时要 进行空闲分区的合并。 merge(hp)。如hp所指的空闲分区与后续分区相 邻

13、,则将它们合并成一个空闲分区。 MINIX内存管理计算机内存管理概 述 4 内存管理器的工作过程内存管理器的工作过程 进程管理器的主程序在18041行。像 MINIX所有其他部分一样,进程管理器是消 息驱动的。在系统初始化完成之后,进程 管理器就进入它的主循环,包括等待消息、 执行消息中包含的请求、发送应答。 MINIX内存管理计算机内存管理概 述 二、空洞表hole 相关的数据结构见src/include/minix/type.h: struct hole struct hole *h_next; /*连接指针 */ phys_clicks h_base; /*以块为单位的基址*/ phys

14、_clicks h_len; /*以块为单位的长度*/ ; src/pm/alloc.c : PRIVATE struct hole hole_NR_HOLES; PRIVATE struct hole *hole_head; PRIVATE struct hole *free_slots; MINIX内存管理计算机内存管理概 述 一、全程变量 mp。mp是指向mproc结构的指针。它是某 进程表的PM部分,而该进程的系统调用正 在被处理。 who。who是当前进程的索引,它与mp的关 系为:mp=&mprocwho。由于任务进程没 对应的mproc,因此一用户进程在proc中的 p_nr与其

15、mproc的下标是一致的。 call_nr。call_nr是系统调用的调用号,如进 程终止为1,创建进程为2等。 MINIX内存管理计算机内存管理概 述 procs_in_use。表示当前已被使用的mproc的 个数。 m_in 。为message类型的变量,用于接收来自 用户的请求。 core_name。在进程非正常结束时,MINIX把 进程的映像写到一个core文件中,core_name 定义了这个文件将取的名字。 core_sset。定义了哪些信号将产生core转储文 件的位图。 ign_sset。定义了哪些信号应该被忽略。 MINIX内存管理计算机内存管理概 述 二、初始化 首先在执行

16、ROM BIOS进行系统自检时,将获得 到机器内存的大小。 在系统初启动时,核心18041行的main()函数将调 用18136行的pm_init()进行初始化: (1)18182-18184:它将boot monitor传送到内 核的参数表复制到PM的数据空间中,并从中获得 可用的内存信息,暂存在mem_chunks 中; (2)18189-18192:获得系统任务(即核心)的 内存映像,将核心占用的空间从mem_chunks 扣除掉; MINIX内存管理计算机内存管理概 述 (3)18197-18250:获取核心的image 数 组内容,并根据其中的值为驱动程序、服 务器和用户任务分配mp

17、roc,并对它进行初 始化,再获取这些进程的内存映像,将这 些进程所占的内存从空闲内存 mem_chunks中扣除。并发消息请求FS为 它们分配fproc。 (4)18253-18257:最后根据临时数组 mem_chunks中的内容构建管理空闲内存 的空洞表,并打印系统总内存、系统使用 的内存、空闲内存的情况。 MINIX内存管理计算机内存管理概 述 三、主循环 在进程管理器的主循环中,处理来自用 户的有关内存管理的系统功能调用。它 的主要工作有: 18052:通过get_work()接收一个由系统调用 库发来的消息。 get_work(),18099行。接收由系统调用库发 来的消息到消息缓

18、冲m_in(17513行,全程变 量),消息源即请求系统调用的用户进程的 p_nr,消息类型即相应的系统功能调用号。 系统功能调用号的定义在3500-3550。 MINIX内存管理计算机内存管理概 述 03502#define EXIT 1 03503#define FORK 2 03504#define READ 3 03505#define WRITE 4 03506#define OPEN 5 03507#define CLOSE 6 03508#define WAIT 7 03509#define CREAT 8 03510#define LINK 9 03511#define UNL

19、INK 10 MINIX内存管理计算机内存管理概 述 18067:根据接收到的系统功能调用号, 调用相应的系统调用处理程序进行处理。 各系统调用处理程序的入口见17815行定 义的call_vecNCALLS,这是一个指向函 数的指针数组,数组下标即系统功能调用 号,数组元素的值为函数名,即相应系统 调用处理程序的入口地址。 MINIX内存管理计算机内存管理概 述 18071:如果系统调用处理程序的返回值 为SUSPEND,则不必向调用进程发应答 消息,否则则必须发应答,在这里,给调 用进程置上需发应答的标记,并把系统调 用处理程序的返回值放在相应进程的应答 消息mp_reply中。 1807

20、8-18092:逐个检查进程列表,向需 要发送应答的进程发送应答消息,该应答 消息中包含有系统调用执行的结果。(需 发应答的进程可能不只一个,如创建进程 时,父、子进程均要应答)。 MINIX内存管理计算机内存管理概 述 四、系统调用 进程管理器的主要工作是处理用户有关进程 控制的系统功能调用。MINIX的有关内存管理 的系统调用主要有: (1)FORK系统调用 系统功能调用号:2。 原形: pid_t fork(); 输入参数:无。 返回值: 父进程返回子进程标志数,子 进程返回0。 功能: 创建子进程。系统调用处理程 序:18430行do_fork()。 MINIX内存管理计算机内存管理概 述 (2)EXIT系统调用 系统功能调用号:1。 原形:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论