分页存储管理中内存的分配与回收

419 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

数据结构(Data Structer)

(1)进程页表/页表(Page Table)

作用:描述进程页面存放在内存中所对应的物理块。 内容:页表中主要包括页号、物理块号。还可有存取控制字段,实现对存储块中内容的保护。 注意:每个进程一个页表。全部页表集中存放在内存的系统专用区中,只有系统有权访问页表,保证安全。

3183bc3fc9f04dad975dabb5723ec13e_tplv-k3u1fbpfcp-watermark.png

(2)主存分配表

作用:记录主存空间的使用情况。 内容:主存分配表也称为虚空间表或进程请求表。它记录主存中各进程的进程号、页表始址和页表长度,页表长度为页表中页号的最大序号值。整个系统设置一个主存分配表,一个进程占用一个表项。它主要用于进行内存分配和地址变换。

image.png

(3)空闲块表

定义:记录内存当前空闲块,全系统1张。描述物理内存空间的分配使用状况。整个系统有一个物理块号表。其数据结构是位示图和空闲页面链表,用来记录内存中每个块的使用情况和当前空闲页的总数。

image.png

位示图

image.png

内存分配过程

image.png

物理块(盘块)的分配

Var Map: array [1..m, 1..n] of bit;

顺序扫描位示图,找出一个或一组其值均为空闲的二进制位 将所找到的一个或一组二进制位Map[i, j]的行/列号转换为与之对应的物理块(盘块)号b:b = n(i-1) + j-1 按物理块(或盘块)号分配物理块(或盘块) ,同时修改位示图

主存空间的回收

当一个作业执行结束,则应收回该作业所占用的主存块。

根据进程请求分配表中的记录,取出该作业的页表。从该作业的页表中取出每一个归还的块号计算出该块在位示图中的位置,将占用标志位清为“0”;

最后,把归还的块数加入到空闲块数中,删除该作业的页表,并把分区分配表中该作业的记录删除。

主存空间的分配过程为:

首先,系统要初始化位示图,即把位示图中的标志位全部置为“0”,空闲块数置为主存的块数。 其次,在进行主存分配时,从作业队列中取出队首作业,计算该作业的页数,然后,与位示图中的空闲块数比较,若不能满足作业的要求,则作业不能装入,显示主存不足的信息,把该作业放到队尾或删除该作业;若能满足作业的空间要求,则为该作业建立页表,并根据位示图中主存块的状态标志,找出标志为“0”的那些位,置上占用标志“1”,根据该位在位示图中的字号和位号,利用下列公式可以计算住该页所对应的块号 把作业页装入对应的主存块,并在页表中填入对应的块号。直到所有作业页全部装入。 最后,修改位示图中空闲块数,即原有空闲块数减去本次占用的块数(页数),并在主存分配表中增加一条记录,登记该作业的作业名、页表始址和页表的长度。

物理块(盘块)的回收

将回收物理块(或盘块)的物理块(或盘块)号b转换为位示图中的行号i和列号j: i = b DIV n + 1; j = b MOD n + 1; 按物理块(或盘块)号回收物理块(或盘块) 根据回收物理块(或盘块)对应二进制位的行/列号修改位示图