做第一遍:

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相关推荐

  1. MIT 6.s081学习笔记

    MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...

  2. 「实验记录」MIT 6.S081 Lab7 multithreading

    #Lab7: multithreading I. Source II. My Code III. Motivation IV. Uthread: switching between threads ( ...

  3. MIT 6.S081 Lab4 traps

    #Lab4: traps #Source #My Code #Motivation #Backtrace (moderate) #Motivation #Solution #S0 - RISC-V 栈 ...

  4. MIT 6.S081 lab 11:Networking

    ​ 背景 在你开始写代码前,你可能会发现xv6 book中的第五章:中断和设备驱动是很有帮助的. 你将使用一个叫做E1000的网络设备来处理网络通信.对于xv6(以及你写的驱动),E1000看起来像一 ...

  5. 2020 MIT6.s081 os Lab: page tables

    文章目录 实验链接 Print a page table A kernel page table per process Simplify 实验结果 提交实验 查看结果 参考链接 github地址 友 ...

  6. MIT 6.S081 实验5 笔记与心得

    Lab 5:Lazy 文章目录 Lab 5:Lazy 前期准备 Eliminate allocation from sbrk() ([easy](https://pdos.csail.mit.edu/ ...

  7. mit 6.s081

    简介 xv6-book chapter1 Operating system interfaces chapter2 Operating system organization Code:startin ...

  8. 操作系统实验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 模拟器启 ...

  9. MIT 6.S081 聊聊xv6中的文件系统(上)

    Lab一做一晚上,blog一写能写两天,比做Lab的时间还长( 这篇博文是半夜才写完的,本来打算写完后立刻发出来,但由于今天发现白天发博点击量会高点,就睡了一觉后才发(几十的点击量也是点击量啊T_T) ...

最新文章

  1. mysql 清空row_MySQL_TRUNCATE_清空table里的记录
  2. java consumer.poll_kafka消费者API consumer.poll()没有错误,没有异常,只是阻止
  3. Android studio | From Zero To One ——初级控件(屏幕显示)
  4. 算法导论-装配线调度问题
  5. matlab的数学函数,matlab中常见数学函数的使用
  6. java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件
  7. 设计模式学习笔记——原型(Prototype)框架
  8. 《深入理解Linux内核》 读书笔记
  9. Dialog是逻辑字体,实际绘制时会选择不同字体
  10. Pyside2中嵌入Matplotlib的绘图并保存(指定Graphics View)
  11. 力扣14最长公共子串
  12. Excel POI 导入导出(支持大数据量快速导出)
  13. 涉密计算机设备保密管理系统,保密室设备——涉密计算机及移动存储介质保密管理系统(三合一)...
  14. Cobalt Strike小技巧——后台挂起CS服务端
  15. PHP俄罗斯方块游戏代码,俄罗斯方块游戏,俄罗斯方块游戏编程代码
  16. 第二篇:关键点检测的两类方法及区别(短文)
  17. android模拟器字体,真正免root的ifont字体软件详细使用教程
  18. SWOT分析法——进行项目管理的高效方法
  19. 国庆假期看了一系列图像分割Unet、DeepLabv3+改进期刊论文,总结了一些改进创新的技巧
  20. 【JAVA】(实训1)EL表达式编码问题

热门文章

  1. 5G Capital一年,“首都标准”初现
  2. 基础30讲 线性代数第1讲 行列式
  3. 数据类型及其存储方式(C语言详解)
  4. PC端、移动端响应式布局的常用解决方案对比(媒体查询、百分比、rem和vw/vh)
  5. zotero突然不能翻译了
  6. js 获取本月、本周、本年年初
  7. RHEL 8.*配置 yum / dnf 源
  8. 原生Mysql之 join和inst优化r
  9. python读取微信消息_Python实现微信消息同步!
  10. ReNamer Pro v7.3 文件批量重命名工具中文便携版