- 2024-11-11Mit6.S081笔记:知识点记录
课程地址翻译程序到汇编的转换 任何一个处理器都有一个关联的ISA(InstructionSetsArchitecture,指令集架构),ISA就是处理器能够理解的指令集。每一条指令都有一个对应的二进制编码或者一个Opcode。当处理器在运行时,如果看见了这些编码,那么处理器就知道该做什么样的操作。 写
- 2024-11-10Mit6.S081-实验环境搭建
Mit6.S081-实验环境搭建注:大家每次做一些操作的时候觉得不太保险就先把虚拟机克隆一份前言qemu(quickemulator):这是一个模拟硬件环境的软件,利用它可以运行我们编译好的操作系统。准备一个Linux系统,安装qemu以及其他依赖,通过git克隆下github的xv6源码,利用gcc编译源码得到
- 2024-11-05Mit6.S081笔记:页表笔记
xv6手册:https://pdos.csail.mit.edu/6.S081/2020/xv6/book-riscv-rev1.pdf相关翻译:http://xv6.dgs.zone/labs/requirements/lab5.html感觉页表很多地方没理解,学习的时候把一些关键地方记录起来,如有错误恳请各位大佬指正。页表笔记 页表是操作系统为每个进程提供私有地址
- 2024-09-07用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录
用户态调用了sysinfo()后,系统会从user/user.h里找到相关声明。用户空间的系统调用函数(如sysinfo())是通过链接到usys.S中的汇编代码来实现的。usys.S文件定义了所有系统调用的入口点,这些入口点使用.global指令使函数名在链接时可见。当用户程序中调用sysinfo()时,链接器会
- 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-