随笔分类 - 操作系统
[MIT 6.S081] Lab: mmap
摘要:Lab: mmap 在本次实验中,我们要实现的是一个比较简简单的 mmap 实现,将文件映射到内存中的某个块,并根据权限设置这块内存的行为,以及为其提供延迟分配策略。 mmap 对于将文件映射到内存,其实是先规划好一块区域给文件使用,为什么要提供延迟分配,是因为如果需要映射一个文件时,就规划好一块内
[MIT 6.S081] Lab: file system
摘要:Lab: file system 在这个实现中我们将为 xv6 的文件系统实现二级间接块以支持大文件,与实现文件的软链接。 Large files 在该任务中,我们将为 xv6 的文件系统实现二级间接块,以支持大文件。对于这个功能,我们需要修改 struct inode 中 addr 字段的功能。
[MIT 6.S081] Lab: locks
摘要:Lab: locks 在本次实验中依然是承接上次的实验,继续多线程编程的实践。 Memory allocator 在该任务中,要为每个 CPU 实现单独的内存空闲队列分配,在该分配方式下,若单个 CPU 的空闲队列内存不够,则需要从其他 CPU 拿走一些空闲内存。 转到 kernel/kalloc.
[MIT 6.S081] Lab: Multithreading
摘要:Lab: Multithreading 在这个实验中主要是要熟悉一下多线程的一些东西,比如实现一个用户态线程,还有使用一些 api 。 Uthread: switching between threads 这个任务的主要目的是实现用户态线程的调度,不过这个用户态线程个人认为是有栈协程。在这个任务中,
[MIT 6.S081] Lab: Copy-on-Write Fork for xv6
摘要:Lab: Copy-on-Write Fork for xv6 在这个实验中,我们要为 xv6 实现 cow fork 。 Implement copy-on write 根据写时复制的方式,我们在复制页面的时候应该采用的是将父级的物理页面映射到子级的页面,因此我们需要修改 kernel/vm.c
[MIT 6.S081] Lab: xv6 lazy page allocation
摘要:Lab: xv6 lazy page allocation Eliminate allocation from sbrk() 这一步比较简单,直接在 sys_sbrk 中将分配内存改为对内存大小进行修改而不分配内存即可。 uint64 sys_sbrk(void) { int addr; int n
[MIT 6.S081] Lab: traps
摘要:Lab: traps RISC-V assembly 在这个任务中我们需要观察 call.asm 汇编。 int g(int x) { 0: 1141 addi sp,sp,-16 2: e422 sd s0,8(sp) 4: 0800 addi s0,sp,16 return x+3; } 6:
[MIT 6.S081] Lab: page tables
摘要:Lab: page tables 前言 这个实验比较困难(指单纯上机 22 个小时,还不断重复看一遍和调 bug ,以及重新配置环境等等),其中的第一个小实验是带一遍理解 RISC-V 中的 page table ,而第二个小实验则是为每个进程附加一个 kernel page table ,并为第三
[MIT 6.S081] Lab: system calls
摘要:Lab: system calls 前言 这次实验是实现内核中的两个 syscall :trace 和 sysinfo 。 回顾一下第三节课,用户态的进程想要执行某个系统调用,例如 exex(init, argv) ,首先会将 init 和 argv 的地址分别存放在 a0 和 a1 寄存器中,然后
[MIT 6.S081] Lab: Xv6 and Unix utilities
摘要:Lab: Xv6 and Unix utilities Grade sleep sleep 格式如下 sleep 5 这边需要使用 kernal/stat.h 中的 sleep 系统调用,并将参数转化为传入。 #include "kernel/types.h" #include "kernel/st
[操作系统] 打印进程树 pstree
摘要:打印进程树 简介 这是 jyy 老师的操作系统课程的 M1 实验,为了弥补一些欠缺的操作系统相关的知识。在这里实现的的 pstree 并不是严格的按照实验要求而设计的(一个原因是按要求实现的代码不可以公开),这里会看到一些不一样的简单实现,比如直接运行,没有命令行可选参数,输出格式会有所不同,编程语