操作系统大作业-二级页表

简介: 操作系统大作业-二级页表

1.作业内容

假设某系统的进程虚拟地址为32位,使用12位=4KB长度的页面,页表也是分页存储管理,每个页表表目占4 Bytes。请你:

1)设计一个页表管理的数据结构

2) 根据用户进程要访问的虚拟空间地址x xx,同时假设要访问的页面已在内存,设计一个查找该虚拟地址对应的内存物理页框号b bb和物理地址y yy的算法,并试分析算法的复杂度。要求页表结构尽量简洁,查找算法开销小。

2.解答

1)设计一个页表管理的数据结构

页号 物理块号 状态位P 访问字段A 修改位M 外存地址

状态位P:指示该页是否已经调入内存。

访问字段A:记录本页在一段时间内的访问次数,供置换算法换出页面时参考。

修改位M:标识该页在调入内存后是否被修改过。如果应淘汰的页在执行中没有被修改过,不必调出,直接装入一个新页覆盖。若修改过,则需要调出到外存。

外存地址:指出该页在外存上的地址,通常是物理块号。


image.png

一级页号 二级页号 页内偏移量
31 3131~22 2222 21 2121~12 1212 11 1111~0 00

2)算法

image.png


算法时间复杂度分析:需要访问三次主存,一次访问页目录,一次访问页表,最后访问数据所在的物理地址,时间复杂度为O(1)

算法空间复杂度分析:以空间换时间。虚拟地址本身为32位,为4GB。根据一级页号查找页框号,这个页框号为20位,为1MB。

算法正确性、有效性分析:算法会检测越界中断与缺页中断,在没有越界和缺页的错误时能正常运行。

伪代码

int x31_22=x>>22;//位运算,右移22位
if (flag[x31_22]==1){//要访问的页是否在主存
  b1←x31_22地址内容;
  x21_12=(x>>12)/(1<<22);//位运算,取x的21~12位
  addr=x21_12+b1;
  if (addr<(1<<20)-1);{//判断是否越界
    b←addr地址内容;
    y=(b<<12)+x%(1<<12);//拼接b与x的低12位
  }
  else 越界中断
}
else 缺页中断


目录
相关文章
|
4月前
|
算法 调度
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
902 0
|
7月前
|
存储 算法
操作系统作业三
操作系统作业三
389 0
|
7月前
|
Unix Linux C语言
操作系统作业一
操作系统作业一
37 0
|
7月前
|
算法 调度 语音技术
操作系统(3.1)--处理机调度和作业
对于大、中型多用户系统,由于CPU价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标。尽量选择计算量大的作业运行。
54 0
|
7月前
|
存储 算法 调度
操作系统作业四
操作系统作业四
64 0
|
7月前
|
算法 安全 API
操作系统作业二
操作系统作业二
72 0
|
11月前
|
存储 资源调度 算法
【操作系统--页面置换算法】C语言详解--大作业版(附代码)
该实验为作者OS课程大作业,内容若有问题,望指出,多多交流
257 0
【操作系统作业】哲学家就餐问题
【操作系统作业】哲学家就餐问题
【操作系统作业】哲学家就餐问题
|
Java Linux C语言
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
|
Java 索引 Windows
【操作系统作业】数独解决方案验证器(利用多线程解决)
【操作系统作业】数独解决方案验证器(利用多线程解决)