• 2024-05-27mit6.828笔记 - lab5(上)- Spawn and Shell
    SpawningProcess有了文件系统了,我们终于可以方便地读取磁盘中的文件了。到目前为止,我们创建进程的方法一直都是在编译内核的时候将程序链接到数据段,在i386_init通过ENV_CREATE宏创建。现在我们应该考虑通过文件系统直接将用户程序从硬盘中读取出来,spawn就是这样的东西。s
  • 2024-05-20mit6.828笔记 - lab4 Part C:抢占式多任务和进程间通信(IPC)
    PartC:抢占式多任务和进程间通信(IPClab4到目前为止,我们能够启动多个CPU,让多个CPU同时处理多个进程。实现了中断处理,并且实现了用户级页面故障机制以及写时复制fork。但是,我们的进程调度不是抢占式的,现在每个进程只有在发生中断的时候,才会被调度(调用shed_yeild),这样就有可能会有
  • 2024-05-20mit6.828笔记 - lab4 Part B:写时复制Fork
    PartBCopy-on-WriteForkUnix提供 fork() 系统调用作为主要的进程创建基元。fork()系统调用复制调用进程(父进程)的地址空间,创建一个新进程(子进程)。不过,在调用 fork() 之后,子进程往往会立即调用 exec(),用新程序替换子进程的内存。例如,shell通常就是这么做的。在这种情况
  • 2024-05-15mit6.828笔记 - lab3 Part A:用户进程和异常处理
    简单回顾在开始lab3的学习之前,我们先简单回顾下到目前为止,我们的内核能做了什么:lab1中,我们学习了PC启动的过程,看到BIOS将我们编写的bootloader载入内存,然后通过bootloader将内核载入内存。同时,使用了一个写死的临时页表(entry_pgdir)完成了简单的地址映射;我们的内核最后执
  • 2024-05-15mit6.828笔记 - lab3 Part B:页面故障、断点异常和系统调用
    PartB页面故障、断点异常和系统调用虽然说,我们故事的主线是让JOS能够加载、并运行user/hello.c编译出来的镜像文件。虽然说,经过PartA最后几节,我们初步实现了异常处理的基础设施。但是对于操作系统来说,还远远不够,比如说那个trap_dispatch还没完成。所以在回到故事主线之
  • 2024-05-07mit6.828 - lab2笔记
    目标:重点学习内存管理的相关知识,包括内存布局、页表结构、页映射任务:完成内存管理的相关代码lab2中,完全可以跟着实验手册的节奏走,逐步完善内存管理的代码。环境准备:实验2包含以下新的源文件:inc/memlayout.hkern/pmap.ckern/pmap.hkern/kclock.hkern/kclock.cmemlay
  • 2024-05-02mit6.828 - lab1笔记
    安装环境编译qemu1.PC启动打开两个窗口,在第一个窗口中makeqemu-gdb,会启动内核,但在执行第一个指令之前停下;在第二个窗口中makegdb,实时观察第一个窗口中的执行过程。从这里可以观察到:IBMPC在物理地址0x000ffff0开始执行,位于为ROMBIOS保留的64KB区域的最顶部。
  • 2024-01-10mit6.828 - lab5笔记(上)
    文件系统结构unix的文件系统相关知识unix将可用的磁盘空间划分为两种主要类型的区域:inode区域和数据区域。unix为每个文件分配一个inode,其中保存文件的关键元数据,如文件的stat属性和指向文件数据块的指针。数据区域中的空间会被分成大小相同的数据块(就像内存管理中的分页)。数
  • 2023-11-07Mit6.828 Lab2
    lab2​ 提交lab1代码的时候,出现了合并冲突的问题,使用gitstatus,发现问题出现在init.c文件与lab分支的文件产生冲突,修改后成功提交。​ lab2中多出来了以下几个文件inc/memlayout.hkern/pmap.ckern/pmap.hkern/kclock.hkern/kclock.c​ 另外lab2中还多了许多宏,在接下来的
  • 2023-11-05mit6.828 - lab3练习笔记
    PartAExercise1练习1.修改`kern/pmap.c`中的`mem_init()`,分配并映射`envs`数组。该数组由`Env`结构的`NENV`实例组成,分配方式与分配页面数组类似。与页面数组一样,支持`envs`的内存也应在`UENVS`(定义于`inc/mlayout.h`)处映射为用户只读,这样用户进程才能读取该
  • 2023-03-16MIT6.828_锁
    JOS中的锁JOS中只有自旋锁,用于大内核锁的实现:staticinlinevoidlock_kernel(void){ spin_lock(&kernel_lock);}自旋锁结构如下:structspinlock{ unsignedlock
  • 2023-03-15MIT6.828_进程切换和进程调度
    MIT6.828_JOS进程切换进程状态JOS共有5种进程状态:enum{ ENV_FREE=0, ENV_DYING, ENV_RUNNABLE, ENV_RUNNING, ENV_NOT_RUNNABLE}我个人觉得ENV_FREE这个状态
  • 2023-02-11MIT6.828_JOS启动流程
    JOS启动流程首先做个总览,JOS的启动流程主要分三步:BIOS检查内存、外设将启动盘中的0号扇区的512字节读入到物理内存的0x7c00处,这段内存就是bootloader使用jmp指令将
  • 2023-01-20mit risc-v 资料
    ​​risc-v版本xv6运行环境设置​​(新手友好!)Ubuntu20安装xv6-riscv​​MIT6.828准备—risc-v和xv6环境搭建​​​​mit-pdos-xv6-riscv​​
  • 2022-12-07MIT6.828学习笔记3(Lab3)
    Lab3:UserEnvironments在这个lab中我们需要创建一个用户环境(UNIX中的进程,它们的接口和实现不同),加载一个程序并运行,并使内核能够处理一些常用的中断请求。PartA:User
  • 2022-11-28MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping
    前置准备实现机器为VMWare的虚拟机,操作系统为Debian-11(无桌面版本),内核版本为5.10.0,指令集为AMD64(i79700K),编译器为GCC-10QEMU虚拟化支持理论上只需要qemu提
  • 2022-11-26MIT6.828 学习笔记2(Lab2)
    Lab2:MemoryManagement前置芝士:Intel80386ReferenceManual第五章内存管理和第六章保护机制是在做本次lab前需要详细了解的。Part1:PhysicalPageManagement