操作系统概念第九版_《操作系统概念》第九版 第九章课后习题 编程项目 简答...

这篇博客主要解析了操作系统第二次大作业的第一小题,涉及虚拟地址到物理地址的转换过程。通过理解虚拟地址的页码和偏移量,建立页表映射关系,并在遇到未分配的页面时进行分配。利用map存储页表,当找不到映射时,读取bin文件填充物理内存。最终输出结果为value值,仅包含对应偏移的字符。
摘要由CSDN通过智能技术生成

******

因为map空间申请的不够,少了一位,过不了diff,要申请256

*****

大家好,这里写一下我对操作系统第二次大作业,第一小题的个人理解。

首先搞明白一个程序,要先明白,输入和输出。

输入是虚拟地址,输出是物理地址和对应的存放在物理地址上的值。

那么核心的问题就是如何进行思路的转换。

虚拟地址,有课本上给出的定义我们知道,虽然他是一个整数,但是你可以将他进行转化成为16位的二进制码,然后取前八位和后八位,就是我们想要的页码和偏移量,下文均称为page和offSet。

代码方面要注意,c语言是要对数组进行初始化的,否则会出问题

        int temp = addresses[i];
        int count = 0;
        int binary[100];
        int l;
        for(l = 0; l < 100; l++){
            binary[l] = 0;
        }
        while(temp != 0){
            binary[count] = temp & 1;
            //这里相当于temp对000000001按位和,那么只有第一位为1的时候,才会是1,正好是我们想要的结果。
            temp = (temp>>1);
            count++;
            //右移一位,相当于不要了,这里最好注意一下运算符优先级
        }
        //我们得到了二进制的数组,但是是反过来的,不过刚刚好,因为我们运算回去,也是要反过来运算。
        //前8位不用关心,我们直接从第8位开始算,思路上文已经说了
        int page = 0;//页号
        page = binary_to_int(binary,8,16);

在上文中,我们获得了page和offSet,那么我们要得到frame和offSet,首先我们要知道在该题中,我们的offSet是不变的,那么我们解决了一半的问题。接下来就是page和frame这两者的关系。

重点来了,在第一问中,我们的虚拟地址和物理地址也就是page对frame是256对256的,也就是说没有说内存条(物理内存)不够用,需要进行置换的情况存在。

那么我们就直接可以用一个数据结构,记录下目前已经构建好的page-frame的对应关系,

然后如果说我们得到一个的page进行处理,那么我们要先去看刚才的数据结构,也就是页表。有没有对应关系,(之前有没有出现过),

  1. 如果之前出现过,好,那么我们就得到了frame
  2. 如果没有出现过,好,我们就从上到下,把还没有分配的frame分配给他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值