6.S081|Lab5-Copy-on-Write Fork for xv6
Implement copy-on write (hard) cow(写时复制)机制不难,但是细节真的很容易出错TwT。不过做完这个lab也是收获满满,对虚拟内存的认识直接跨了一大步。 首先来介绍一下写时复制(copy on write)技术,懒得自己写了,直接摘抄大佬们的文章。 以下来自tzyt 在没有写时复制的系统中,调用 fork() 时,我们会把父进程的所有的内存都拷...
Implement copy-on write (hard) cow(写时复制)机制不难,但是细节真的很容易出错TwT。不过做完这个lab也是收获满满,对虚拟内存的认识直接跨了一大步。 首先来介绍一下写时复制(copy on write)技术,懒得自己写了,直接摘抄大佬们的文章。 以下来自tzyt 在没有写时复制的系统中,调用 fork() 时,我们会把父进程的所有的内存都拷...
RISC-V assembly 以下内容摘自知乎用户rocketeerli 首先,执行 make fs.img 指令,进行编译。然后查看生成的 user/call.asm 文件,其中的 main 函数如下: 这部分没有需要写的代码,主要根据这个编译生成的代码,回答几个问题。 这里直接按照中文翻译了。 问题一 Q: 哪些寄存器存储了函数调用的参数?举个例子,main 调...
参考这篇文章,并结合自身经验进行配置 首先安装Xcode Command Line Tools xcode-select --install 配置brew 此时还没有代理,装不了一些国外源的软件,所以我们先来配置brew,安装一些必备的软件 # 使用国内源安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewC...
Speed up system calls (easy) 目标是在用户空间和内核间共享一块只读的区域,这样内核执行SYSCALL的时候就不需要来回跑。当每个进程被创立的时候,都会在USYSCALL区域映射一块只读的分页,这里面存了一个结构体usyscall用来存储当前进程的pid。 提示让我们先看kernel/proc里的proc_pagetable()函数,那么先去看看。 proc_...
页式硬件 RISCV里执行的指令中的地址都是使用的虚拟地址(Q:为什么要用虚拟地址?A:为了隔离性和保护性),但是机器的物理内存是由物理地址索引的,所以我们需要一种映射机制来完成由虚拟地址到物理地址的转换。 虚拟地址空间是概念,页表是实现这个概念的数据结构。 在开始下面内容之前,我们需要知道xv6的内存管理机制是Sv39 RISC-V,这意味着我们只使用底部的39位,尽管虚拟地...
环境介绍,本人使用M1Pro芯片的Macbook,采用orbstack运行x86的Ubuntu22.04容器。 工具链 根据官网介绍(一般在顶部导航栏的Labs下面的tools里面),选择Ubuntu的安装命令,一键安装。要注意一下,这门课有两版不同的工具链,2020年的工具链体积很大,但是可以step in进ecall,2021年以后的好像就是体积比较小的工具链,想进入ecall必须先...
System call tracing(moderate) 没有特别卡住,可以参考网上别人的实现 Sysinfo(moderate) memory part 阅读题目可知,我们需要知道空闲内存和进程数量,并且提示我们前往kernel/kalloc.c添加一个获取空闲内存量的函数,于是推断关于内存分配的代码在kalloc.c中,于是去查看。 //kerlnel/kalloc.c /...
关于clangd 系统官方的介绍可以看网上别的博客,按我个人理解,clangd就是给你提供代码补全,函数跳转之类的功能。 开始配置 我是MacOS,所以先直接brew install llvm,如果你是Debian系Linux,用apt install clang clangd clangd-tidy llvm即可 macOS brew的时候会出现 CLANG_CONFIG_FIL...
CPU与外界交互的方式是通过I/O接口 如何实现I/O接口呢 方法一: 使用特殊的输入输出指令和对应的硬件设计 方法二: 内存映射I/O(Memory-Mapped I/O) 定义:将I/O设备的寄存器映射到处理器的地址空间中,形成一个特定的地址范围用于I/O操作。 操作方式: 使用普通的加载(lo...
虚拟内存的主要功能: 大内存的幻觉:虚拟内存使得程序看起来可以访问一个非常大的主存。程序的工作集(即正在活跃使用的内存页面)保存在物理内存中,而不常用的页面则保存在磁盘上。 请求分页(Demand Paging):虚拟内存通过请求分页技术,让程序运行的内存可以超过物理内存的大小。当程序需要访问某个不在主存中的页面时,会触发页面调度,将所需页面从磁盘加载到...