
MIT 6.1810 Operating System
文章平均质量分 94
MIT 操作系统课程
Patarw_Li
在读小白一枚
展开
-
6.1810: Operating System Engineering 2023 <Lab9: mmap>
mmap(2) 系统调用能将文件或者设备映射到内存中,返回映射区域的起始地址。原创 2024-02-07 15:23:12 · 1164 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab8 fs: File system>
在这一节,我们将为 xv6 的文件系统加入大文件和符号链接。原创 2024-01-22 17:05:09 · 1009 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab7 lock: Parallelism/locking>
xv6 文件系统软件层次如下:通过路径树我们可以找到相应的文件:fd(文件描述符)是进程用来标识其打开的文件的手段,每个进程有自己的文件打开表,并且系统会维护一个全局文件打开表(系统中所有打开的文件都保存在这个全局文件打开表中)。原创 2024-01-16 19:28:51 · 982 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab6: Multithreading>
在多 CPU 或者单 CPU 多线程并发的场景中,对临界资源(或者说共享资源)的访问如果不加以限制,可能会引发一些严重的问题,比如当两个线程同时对一个共享数据写的时候,这个共享数据的值就会变为最后一个写的内容,并且会覆盖前一个写的内容。这时候,就有人引入了一些并发控制(concurrency control)技术来避免并发场景中的这些问题。,锁提供了互斥性,保证了在任何时刻只能有一个线程持有它。原创 2024-01-04 20:48:55 · 980 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab5: cow: Copy-on-write fork>
当用户键入一个字符时,UART 硬件会引发一个中断,从而激活 xv6 的陷阱处理程序(trap handler)。上半部分是通过系统调用调用的,如 read 和 write 希望设备执行I/O,然后程序会等待操作(如 read 和 write 操作)执行完成;最终设备执行完 I/O 后会发起一个中断,然后执行中断处理程序,中断处理程序可以唤醒等待 I/O 操作的进程,这部分就是中断下半部。来自设备的中断也是 trap 的一种,内核陷阱处理程序识别设备引发的中断并调用驱动程序的中断处理程序;原创 2023-12-26 18:31:58 · 221 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab3: page tables>
一些系统调用将数据放到用户空间和内核空间之间的只读区域(即内核和用户都可以访问,但是用户只能读页面),从而绕过内核实现加速。第三个参数为一个地址,用来返回结果,将结果存储到位中(每页使用一位,其中第一页对应于最低有效位)。在 rv32 和 rv64 中,int 类型都是 32 位,而 long 和 指针类型在 rv32 中是 32 位,在 rv64 则是 64 位。这是打印 pid = 1 的进程的页表,首先打印页表地址,然后递归打印页表项和对应的物理地址。首先我们需要定义 PTE_A,即访问位,查阅。原创 2023-12-06 22:35:12 · 456 阅读 · 1 评论 -
6.1810: Operating System Engineering 2023 <Lab4 traps: Traps>
trap 的一般流程为:首先 trap 会使控制转移到内核,内核保存寄存器和一些其他状态信息;然后内核执行适当的处理程序(如系统调用的实现或设备驱动程序);最后内核恢复保存的状态,并且从 trap 返回到原来执行的位置继续执行。在 xv6 中,这三种情况被统称为 trap,系统调用、异常、设备中断以同样的方式进入内核。原创 2023-12-06 22:34:48 · 400 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab2 syscall: System calls>
这部分也要实现一个系统调用,可以返回一个结构体给用户,结构体里面包含了正在使用的进程个数,以及当前的空闲内存,这部分主要注意的地方就是内核空间的内存用户是访问不了的,所以需要使用 copyout 函数将用户空间的结构体拷贝到用户空间上,然后把结构体在用户空间上的地址返回即可。当机器上电,它会运行一个存储在只读内存中的引导程序(boot loader),引导程序会把 xv6 内核搬运到内存中,然后,在机器模式下,cpu 执行 xv6 的。一个进程最重要的内核状态包括它的页表,它的内核栈,和它的运行状态。原创 2023-12-01 22:27:38 · 510 阅读 · 0 评论 -
6.1810: Operating System Engineering 2023 <Lab1 util: Unix utilities>
使用 pipe() 系统调用初始化一个管道,两个文件描述符放到数组里面,第一个文件描述符用于读,第二个用于写。这里先关掉了标准输出描述符 1,然后使用 open 打开 out 文件,因为 open 会选择最小的可使用的文件描述符,所以文件 out 对应的文件描述符为 1,再使用 exec 执行 echo程序,echo 程序就会把写到到标准输出上的内容写到文件 out 里。close() 系统调用会关闭对应的文件描述符,而 dup() 会复制一个文件描述符,被复制的文件描述符和原来的描述符指向相同的文件。原创 2023-11-15 22:30:05 · 335 阅读 · 0 评论