• 2024-06-04MIT6.S081 Lab1
    写在开头6.S081/2021/Fall当刚开始做这个实验的时候,我好像又陷入了一个误区,在实现Sleep的时候,我想了解Sleep到底是怎么完成运行的,浪费了一些时间,也没搞懂。浪费了一段时间之后,我突然意识到:我并不熟悉MakeFile。不熟悉MakeFile,我不可能去理解这个xv6是怎么运行的。并且我的目
  • 2024-06-016.s081通关小结
    6.s081通关小结终于是完成6.s081的所有lab了,感慨万千。已经忘了第一次听说这个lab是在什么时候了,只是模模糊糊地感觉是大三。那时的我第一次找到了刷题之外的新方向。但囿于小镇做题家对计算机认识的滞后性,什么Linux、Ubuntu之类的新系统如同一座大山横亘在我于s081之间。又或
  • 2024-04-24MIT6.S081 Lab Traps
    本实验主要是关于如何使用陷阱实现系统调用的。RISC-Vassembly(easy)这个部分主要是回答一些问题。首先我们按照实验的指示,运行下面的命令得到一份容易读懂的汇编和C结合的代码,位于user/call.asm。makefs.imgQuestion1Whichregisterscontainargumentstofuncti
  • 2024-04-24MIT6.S081 Lab syscall
    这一个实验的主要内容就是给xv6添加两个系统调用:trace和sysinfo。Usinggdb(easy)这个部分我就不做了……M1的MacbookAir上的gdb太难安装了,所以暂时用不了gdb调试……Systemcalltracing(moderate)Inthisassignmentyouwilladdasystemcalltracingfe
  • 2024-04-24MIT6.S081 Lab Page Tables
    实验开始前的折腾突然发现2023版的和2020版的实验内容其实还不一样……因为我正在看的视频以及参考资料都是基于2020版的课程,因此我还是决定将之前的实验都迁移到2020版的xv6-lab-2020来。在自己的MacbookAir上折腾了好久……还是没能成功。因此还是用上了我在阿
  • 2024-04-23MIT6.S081 - Lab2: system calls
    Lab2:systemcalls预备知识执行一次系统调用的流程:USERMODEstep1:系统调用声明user/user.h:系统调用函数(如intfork(void))step2:ecall进入内核态user/usys.S(该文件由user/usys.pl生成,后续添加函数可以在这里添加):执行如下命令.globalforkfork:lia7,SYS_f
  • 2024-04-02MIT 6.S081入门lab10 mmap
    MIT6.S081入门lab10mmap一、参考资料阅读与总结1.JournalingtheLinuxext2fsFilesystem文件系统可靠性:磁盘崩溃前数据的稳定性;故障模式的可预测性;操作的原子性-论文核心:将日志事务系统加入Linux的文件系统中;事务系统的要求:元数据的更新;事务系统的顺序性;数据块写入磁
  • 2024-03-22MIT 6.S081入门lab8 锁
    #MIT6.S081入门lab8锁一、参考资料阅读与总结1.xv6book书籍阅读(Chapter7:Scheduling:7.5toend)5.sleep与wakeupxv6使用了sleep-wake的机制,实现了进程交互的抽象(序列协调/条件同步机制)这一机制的核心是防止丢失唤醒(生产者还未睡眠时,资源更新并唤醒):如果贸然在睡眠中加
  • 2024-03-15MIT 6.S081入门lab7 多线程
    MIT6.S081入门lab7多线程一、参考资料阅读与总结1.xv6book书籍阅读(Chapter7:SchedulingthroughSection7.4)1.概述:由于操作系统往往运行比CPU数量更多的进程,因此需要对CPU进行虚拟化,使多个进程能够分时复用CPU资源2.多路复用:xv6中多路复用有2种方式:sleep和wakeup机制
  • 2024-03-14MIT 6.S081入门lab6 cow
    MIT6.S081入门lab6cow由于本实验的前置课程包括2部分Interrupts和Multiprocessorsandlocking,因此本次实验记录也分为2部分一、参考资料阅读与总结1.xv6book书籍阅读(chapter5Interruptsanddevicedrivers)1.概述设备驱动程序:位置:操作系统;作用:配置设备,执行操作,处
  • 2024-03-04MIT 6.S081入门lab5 懒惰分配
    MIT6.S081入门lab5懒分配一、参考资料阅读与总结1.xv6book书籍阅读(Chapter4Section4.6)4.6Page-faultExceptionsxv6对异常情况的处理:用户空间终止进程;内核空间停止内核执行。缺页错误常常被用于写时复制方法,例如COW-fork。缺页错误的类型:LoadPageFaults:
  • 2024-02-29MIT 6.S081入门lab4.5 Q&A(lec7)
    MIT6.S081入门lab4.5Q&A(lec7)、这部分主要是Q&A部分课程的观看笔记,因此这一部分只有课程观看笔记一、课程视频观看笔记pagtbl实验:基础知识回顾:0x800以上是DRAM,以下是DEVICE;CPU通过MMU获取地址;注意:页表自身也是存在于内存中可以从init打印出来的页表中观测到,0-0三级页表
  • 2024-02-27MIT 6.S081入门lab3 页表
    MIT6.S081入门lab3页表一、参考资料阅读与总结1.xv6book书籍阅读(页表)a.总览页表:操作系统为每一个进程提供私有空间和内存的机制,使每一个进程有着自己的虚拟地址空间。本质上是基于分页的内存空间管理方法。页表存储:其实就是MMU,其存储了从虚拟地址VA到物理地址PA的映射
  • 2024-02-23[MIT 6.S081] Lab: mmap
    Lab:mmap在本次实验中,我们要实现的是一个比较简简单的mmap实现,将文件映射到内存中的某个块,并根据权限设置这块内存的行为,以及为其提供延迟分配策略。mmap对于将文件映射到内存,其实是先规划好一块区域给文件使用,为什么要提供延迟分配,是因为如果需要映射一个文件时,就规划好一
  • 2024-02-20[MIT 6.S081] Lab: file system
    Lab:filesystem在这个实现中我们将为xv6的文件系统实现二级间接块以支持大文件,与实现文件的软链接。Largefiles在该任务中,我们将为xv6的文件系统实现二级间接块,以支持大文件。对于这个功能,我们需要修改structinode中addr字段的功能。在实现功能之前,xv6的struct
  • 2024-02-17[MIT 6.S081] Lab: locks
    Lab:locks在本次实验中依然是承接上次的实验,继续多线程编程的实践。Memoryallocator在该任务中,要为每个CPU实现单独的内存空闲队列分配,在该分配方式下,若单个CPU的空闲队列内存不够,则需要从其他CPU拿走一些空闲内存。转到kernel/kalloc.c,我们首先为“每个CPU的空闲
  • 2024-02-14[MIT 6.S081] Lab7: Multithreading
    Lab7:Multithreading在这个实验中主要是要熟悉一下多线程的一些东西,比如实现一个用户态线程,还有使用一些api。Uthread:switchingbetweenthreads这个任务的主要目的是实现用户态线程的调度,不过这个用户态线程个人认为是有栈协程。在这个任务中,需要实现在一个CPU资源的情
  • 2024-01-30[MIT 6.S081] Lab: traps
    Lab:trapsRISC-Vassembly在这个任务中我们需要观察call.asm汇编。intg(intx){0: 1141 addi sp,sp,-162: e422 sd s0,8(sp)4: 0800 addi s0,sp,16returnx+3;}6: 250d addiw a0,a0
  • 2024-01-25MIT 6.S081入门lab1 操作系统及其接口
    MIT6.S081入门lab1操作系统及其接口一、参考资料阅读与总结1.xv6book书籍阅读(操作系统接口)a.总览操作系统的任务:多个程序之间共享计算机(计算机的硬件管理+任务调度)操作系统接口:使用系统调用,调用内核服务为用户端程序提供给服务(即实现对进程的调度和硬件的管理)操作系统
  • 2024-01-22[MIT 6.S081] Lab: system calls
    Lab:systemcalls前言这次实验是实现内核中的两个syscall:trace和sysinfo。回顾一下第三节课,用户态的进程想要执行某个系统调用,例如exex(init,argv),首先会将init和argv的地址分别存放在a0和a1寄存器中,然后a7存放所要调用的系统调用,最后执行ecall。之后要结
  • 2024-01-16MIT 6.S081入门 lab0 操作系统环境及其配置
    MIT6.S081入门lab0操作系统环境及其配置闲话由于不是正经计算机专业出身,但是又想做Linux内核/驱动开发,因此赶在暑假实习开始前把操作系统的课程补习一下。之前自学的linux的驱动系统入门的笔记在这个寒假也会整理并发布(包括U-boot移植和驱动/应用开发入门)。实验环境Ubuntu-
  • 2023-08-10MIT6.s081/6.828 lectrue2:OS design 以及 Lab2 心得
    这节课主要介绍OS的顶层设计以及OS启动流程和系统调用流程前置知识:要求阅读xv6bookchapter2和xv6源码:kernel/proc.h,kernel/defs.h,kernel/entry.S,kernel/main.c,user/initcode.S,user/init.c,andskimkernel/proc.candkernel/exec.c一、课程内容课程主要
  • 2023-07-30MIT 6.S081 Lec14: File system
    Overview文件系统的设计目标就是组织和存储数据,文件系统一个比较重要功能是持久化,即重启之后,数据不会丢失。xv6通过把数据存储在virtiodisk上来实现持久化。文件系统设计的几大挑战:Thefilesystemneedson-diskdatastructurestorepresentthetreeofnameddirecto
  • 2023-07-26Mit6.s081 Lec14
    Logginglayerfilesystem设计的一大重要问题就是crashrecovery。这是因为文件系统操作往往涉及向磁盘多次写入,而几次写入之后的crash可能导致磁盘上的文件系统处于一个不一致的状态。Forexample,supposeacrashoccursduringfiletruncation(settingthelengthof
  • 2023-07-25MIT 6.S081 Lec13: File system
    Overview文件系统的设计目标就是组织和存储数据,文件系统一个比较重要功能是持久化,即重启之后,数据不会丢失。xv6通过把数据存储在virtiodisk上来实现持久化。文件系统设计的几大挑战:Thefilesystemneedson-diskdatastructurestorepresentthetreeofnameddirecto