MIT-6.s081-OS mid-term quiz 2019
做第一遍:
1 |
√ |
|
2 |
乄 |
理论上可以把用户进程映射到内核地址空间低于0x20000000的位置,但是配套工作呢? |
3 |
× |
没懂可以把io设备移到above 2g是什么操作 |
4 |
乄 |
对正在运行的内核线程指什么理解不足 |
5 |
√ |
|
6 |
√ |
|
7 |
乄 |
可以修改自己的页表,就能读写其他进程的地址空间?理解不是很足 |
8 |
× |
修改页表,但是和原来的pte一样,区别在哪? |
9 |
√ |
|
10 |
√ |
|
11 |
√ |
|
12 |
√ |
经答案提醒,要注意给出的代码做了什么,以及和我的版本的区别 |
13 |
√ |
|
14 |
乄 |
关于多线程下的锁,我提交的没注意到多处理器下的问题,测试也没测出来 |
1
背景:修改free和bd_free,增加一个参数size,size是p指向的内存块的字节数。修改之后,buddy allocator的调用者要负责在返回块的时候指明块的大小。假设程序员调用free时传入的size始终是正确的
问:修改后,还需要保留split数组吗
我:如果有了对应块的字节数,那么log2(x),就能得到对应size,那就不需要通过split找到对应size,所以也就不需要split数组
补充:在buddy.c中,搜索split可以发现,除了size函数,其余全都是在设置split,因此,如果提供了size,那么就不需要split
2
背景:copyout函数是用来从内核内存复制到用户内存,A说只要巧妙地设置内核的页表项,就能将copyout简化为如上图,A还说每次内核在用户程序中切换后都需要更新页表
问:应该怎样设置页表,才能才能让上述copyout对于小于0x2000000的程序正确运行呢
分析:和原版的区别,首先在于,这里没有获取dstva对应的物理地址,而是直接使用虚拟地址作为物理地址,分析,虚拟地址用作物理地址,可以联想到内核地址空间的direct map,如下图:
”size小于0x02000000“,图中内核地址空间里小于0x02000000确实是未使用,所以可以将该程序映射到内核空间的小于0x02000000处?update:
几个点:
1.内核地址空间确实有没有使用的区域(最底下
2.物理内存映射到哪里,是由程序员或者说os设计者决定的,那么在创建一个进程时,比如fork,其中执行uvmcopy,即将父进程的内存内容复制到子进程时,在mappages时,完全可以设置页表为内核页表,va为0(但是我尝试的时候,发现报错,明天再看!
init: starting sh
usertrap(): unexpected scause 0x000000000000000c (instruction page fault) pid=2
sepc=0x0000000000000354 stval=0x0000000000000354
PANIC: uvmunmap: walk
update:
上述修改,理论上可行,但是配套还要做哪些工作呢?
3
MIT-6.s081-OS mid-term quiz 2019相关推荐
- MIT 6.s081学习笔记
MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...
- 「实验记录」MIT 6.S081 Lab7 multithreading
#Lab7: multithreading I. Source II. My Code III. Motivation IV. Uthread: switching between threads ( ...
- MIT 6.S081 Lab4 traps
#Lab4: traps #Source #My Code #Motivation #Backtrace (moderate) #Motivation #Solution #S0 - RISC-V 栈 ...
- MIT 6.S081 lab 11:Networking
背景 在你开始写代码前,你可能会发现xv6 book中的第五章:中断和设备驱动是很有帮助的. 你将使用一个叫做E1000的网络设备来处理网络通信.对于xv6(以及你写的驱动),E1000看起来像一 ...
- 2020 MIT6.s081 os Lab: page tables
文章目录 实验链接 Print a page table A kernel page table per process Simplify 实验结果 提交实验 查看结果 参考链接 github地址 友 ...
- MIT 6.S081 实验5 笔记与心得
Lab 5:Lazy 文章目录 Lab 5:Lazy 前期准备 Eliminate allocation from sbrk() ([easy](https://pdos.csail.mit.edu/ ...
- mit 6.s081
简介 xv6-book chapter1 Operating system interfaces chapter2 Operating system organization Code:startin ...
- 操作系统实验Lab 1:Xv6 and Unix utilities(MIT 6.S081 FALL 2020)
Lab 1 Xv6 and Unix utilities 实验要求链接 Boot xv6 (easy) 实验目的 切换到 xv6-labs-2020 代码的 util 分支,并利用 QEMU 模拟器启 ...
- MIT 6.S081 聊聊xv6中的文件系统(上)
Lab一做一晚上,blog一写能写两天,比做Lab的时间还长( 这篇博文是半夜才写完的,本来打算写完后立刻发出来,但由于今天发现白天发博点击量会高点,就睡了一觉后才发(几十的点击量也是点击量啊T_T) ...
最新文章
- mysql 清空row_MySQL_TRUNCATE_清空table里的记录
- java consumer.poll_kafka消费者API consumer.poll()没有错误,没有异常,只是阻止
- Android studio | From Zero To One ——初级控件(屏幕显示)
- 算法导论-装配线调度问题
- matlab的数学函数,matlab中常见数学函数的使用
- java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件
- 设计模式学习笔记——原型(Prototype)框架
- 《深入理解Linux内核》 读书笔记
- Dialog是逻辑字体,实际绘制时会选择不同字体
- Pyside2中嵌入Matplotlib的绘图并保存(指定Graphics View)
- 力扣14最长公共子串
- Excel POI 导入导出(支持大数据量快速导出)
- 涉密计算机设备保密管理系统,保密室设备——涉密计算机及移动存储介质保密管理系统(三合一)...
- Cobalt Strike小技巧——后台挂起CS服务端
- PHP俄罗斯方块游戏代码,俄罗斯方块游戏,俄罗斯方块游戏编程代码
- 第二篇:关键点检测的两类方法及区别(短文)
- android模拟器字体,真正免root的ifont字体软件详细使用教程
- SWOT分析法——进行项目管理的高效方法
- 国庆假期看了一系列图像分割Unet、DeepLabv3+改进期刊论文,总结了一些改进创新的技巧
- 【JAVA】(实训1)EL表达式编码问题