MIT 6.S081 lab4:traps | 陷入 lab4 - traps 前置准备 主要内容为探索陷阱处理机制。 根据课程官网的要求,需要阅读完教材的第四章\(Page \space tables\)。并且读懂下列源代码:kernel/memlayout.h, kernel/vm.c, kernel/kalloc.c, kernel/riscv.h, user/exec.c。 相关笔记参考: lecture 4 Notes 将pgtbl分支所有 2024-02-29 6.S081 #6.S081
MIT 6.S081 第四章笔记 | 陷入指令和中断 4.1 ISA & Assembly Language \(ISA\): \(Instruction \space Set\)。 \(workflow\): \(C \rightarrow Assembly(.S/.asm) \rightarrow binary(object.o)\) 汇编语言没有明确的工作流,只是一行一行的执行指令。汇编语言是基于寄存器进行操作的,而不是内存。 \(RI 2024-02-29 6.S081 #6.S081
MIT 6.S081 第五章笔记 | 页面故障 当视图访问 \(PTE_V\) 为 \(0\) 的页表, 或用户尝试访问 \(PTE_U\) 为 \(0\) / 内核尝试访问 $PTE_U 为 \(1\) 的页表, 或者是其他违反了 \(PTE_R\) 或 \(PTE_W\) 等 \(flag\) 的页表时就会出现 \(Page Faults\)。 一共有三种 \(Page Faults\): 1. \(load \space page \sp 2024-02-29 6.S081 #6.S081
MIT 6.S081 lab3:page tables | 页表 lab3 - page table 前置准备 主要内容为熟悉页表遍历以及地址转换。 根据课程官网的要求,需要阅读完教材的第三章\(Page \space tables\)。并且读懂下列源代码:kernel/memlayout.h, kernel/vm.c, kernel/kalloc.c, kernel/riscv.h, user/exec.c。 相关笔记参考: lecture 3 Notes 将 2024-02-28 6.S081 #6.S081
MIT 6.S081 第三章笔记 | 页表 页表让每个进程都拥有自己独立的虚拟内存,从而实现内存隔离。 3.1 Paging hardware 用户和内核都只能操作虚拟地址(\(virtual \space address\)),但是实际物理内存使用物理地址(\(physical \space address\))来索引。页表提供了虚拟地址到逻辑地址的转换。 xv6只使用了64位地址空间中的低39位,其中高\(27\)位为页面号,低\(12 2024-02-27 6.S081 #6.S081
MIT 6.S081 Lab2:System Calls | 系统调用 前置准备 主要内容为自己实现系统调用,或者优化已有的系统调用。 根据课程官网的要求,需要阅读完教材的第二章\(Operating \space system \space organization\)。并且读懂下列源代码:kernel/proc.h, kernel/defs.h, kernel/entry.S, kernel/main.c, user/initcode.S, user/init.c 2024-02-25 6.S081 #6.S081
MIT 6.S081 第二章笔记 | 操作系统结构 操作系统应该实现三个功能:并发、隔离、交互。即能保证多个程序都能分到硬件资源;各个进程之间的内存、指令、数据相互隔离,一个进程崩溃不会影响到其他进程;进程之间能通过受控的接口来进行通信。 操作系统提供了高级别的抽象,来管理硬件资源。例如,用文件描述符来抽象磁盘、内存、管道等资源,用户程序能通过简单的read、write、close来访问所有存储资源,而不用关心是和磁盘、内存、管道、还是标准输入输出 2024-02-25 6.S081 #6.S081
MIT 6.S081 Lab1 util:Unix utilities | UNIX 实用程序 前置准备 主要内容为如何使用已有的系统调用编写用户程序, 例如ls、xargs、find等常用命令的实现。 根据课程官网的要求,需要看完Lecture 1,阅读完教材第一章\(Operation \space System \space interfaces\)。 此外,实验手册中的Hints很重要,大多数实验跟着提示一步一步实现都能完成。 Sleep (easy) Statement 为xv6 2024-02-25 6.S081 #6.S081
MIT 6.S081 lab0:配置xv6环境+vscode调试 前言 系统为Archlinux物理机,环境如下: 使用的xv6版本为2021版,运行环境为vscode + clangd + gbd。 安装依赖 参考:https://pdos.csail.mit.edu/6.828/2021/tools.html 首先安装转义riscv64的包: 1sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux- 2024-02-08 6.S081 #6.S081
std::chrono时间库总结 基本概念 C++11中引入了一个新的关于时间的库,所有内容都包括在std::chrono中,使用时直接引用头文件#include<chrono>和命名空间std::chrono即可。 std::chrono库中主要有3个概念,时钟(Clocks)、时间段(Duration)、时间点(timePoint)。 时钟(Clocks) 顾名思义,就是和计时的相关类。主要就有3个,分别是: 系 2024-01-20 modern-cpp #modern-cpp