
mit6.s081学习笔记
文章平均质量分 92
binary~
所有的努力最终都会绕个大圈回报给你。
展开
-
xv6源码阅读——文件系统
buffe catch 的两个任务1.同步对磁盘块的访问,以确保磁盘块在内存中只有一个副本,并且一次只有一个内核线程使用该副本2.缓存常用块,以便不需要从慢速磁盘重新读取它们对上提供的接口bread() ,获取一个磁盘块,拷贝到缓存中bwrite(),将缓存中的数据写回磁盘brelse(),用完需要释放缓存快通过给每一个 buffer 分配一个 sleeplock 的方式实现一个磁盘块的拷贝只能被一个内核线程使用。原创 2022-09-27 20:37:02 · 2275 阅读 · 1 评论 -
xv6源码阅读——进程切换
通过中断机制,从trap机制进入内核线程调用swtch从该进程进行上下文切换,切换到到调度进程通过调度进程切换到新进程的内核线程在通过trap机制返回到新进程用户线程上面过程就简单阐述,是怎样进行进程切换的当然,里面会有很多细节,后面会详细介绍。原创 2022-09-22 01:34:55 · 993 阅读 · 0 评论 -
[mit6.s081] 笔记 Lab7: Multithreading
本实验将使您熟悉多线程。您将在用户级线程包中实现线程之间的切换,使用多个线程来加速程序,并实现一个屏障。Attention在编写代码之前,您应该确保已经阅读了xv6手册中的“第7章: 调度”,并研究了相应的代码。原创 2022-09-20 18:39:01 · 654 阅读 · 1 评论 -
xv6源码阅读——中断与异常
每个RISC-V CPU都有一组控制寄存器,内核通过向这些寄存器写入内容来告诉CPU如何处理陷阱,内核可以读取这些寄存器来明确已经发生的陷阱。RISC-V文档包含了完整的内容。riscv.h(kernel/riscv.h:1)包含在xv6中使用到的内容的定义。stvec:内核在这里写入其陷阱处理程序的地址;RISC-V跳转到这里处理陷阱。sepc:当发生陷阱时,RISC-V会在这里保存程序计数器pc(因为pc会被stvec覆盖)sret(从陷阱返回)指令会将sepc复制到pc。原创 2022-09-19 17:05:15 · 1456 阅读 · 0 评论 -
xv6源码阅读——虚拟内存
我们在这里看到了一些使用页表的很好的例子。首先,不同进程的页表将用户地址转换为物理内存的不同页面,这样每个进程都拥有私有内存。第二,每个进程看到的自己的内存空间都是以0地址起始的连续虚拟地址,而进程的物理内存可以是非连续的。第三,内核在用户地址空间的顶部映射一个带有蹦床(trampoline)代码的页面,这样在所有地址空间都可以看到一个单独的物理内存页面。Xv6为每个进程维护一个页表,用以描述每个进程的用户地址空间,外加一个单独描述内核地址空间的页表。然后,它将PTE添加到进程的页表中,指向新的物理页面。原创 2022-09-07 20:35:27 · 1725 阅读 · 1 评论 -
[mit6.s081] 笔记 Lab3: page tables
这个实验,我们可以了解page table的实现机制,理解源码后,做起来还是相对容易的。原创 2022-09-07 01:50:58 · 2523 阅读 · 0 评论 -
xv6源码阅读——xv6的启动,进程初识
注意由于只有一个内核栈,内核栈部分的地址空间可以是固定,因此 xv6 启动的时候并没有开启硬件支持的 paging 策略,也就是说,对于内核栈而言,它的物理地址和虚拟地址是一样的。当 xv6 的系统启动的时候,首先会启动一个引导加载程序(存在 ROM 里面),之后装载内核程序进内存。在xv6中进程会有5中状态。在机器模式下,CPU是从。寄存器mstatus。寄存器mstatus。...原创 2022-09-01 16:57:47 · 1281 阅读 · 1 评论 -
[mit6.s081] 笔记 Lab2:system calls
这个实验相较于上一个实验,难度加大了好多,主要难点就在于阅读源码。刚开始做lab1时很蒙,不知道要干哈。在看了相关的xv6文档,视频课程,阅读部分源码和查阅资料后,才有头绪完成了该实验,收货还是很大的。后面实验肯定会越来越难,要继续坚持下去。...原创 2022-08-31 20:45:08 · 1094 阅读 · 0 评论 -
[mit6.s081] 笔记 Lab1: Unix utilities | Unix 实用工具
准备环境,编译编译器、QEMU,克隆仓库,略过。原创 2022-08-29 18:00:02 · 775 阅读 · 0 评论