摘要:
OS复盘 OS课设已经结课一段时间了,我也从其他课程中抽身出来,有了一段能够好好反思的时光。 说实话,完成OS课设的过程是很痛苦的,指导书蜻蜓点水、注释模棱两可、各种函数和文件调用杂乱无章。每次在完成的时候都是向auser的博客(目前已经失效了)和github学习,之前的lab2和lab3都还比较清 阅读全文
摘要:
OS-lab6 管道 在lab5的时候我们实现了文件类设备的读写操作,而在fd.c中,我们定义了3种设备:文件类设备、管道、终端,其中终端已经被完成了,剩下的就是管道了。 管道是一种父子进程间通信的设备,这样的通信是单向的。建立一个匿名管道的流程首先是建立一个缓冲文件,接着 user/pipe.c 阅读全文
摘要:
OS-lab5 磁盘管理 完成文件系统的第一步就是要能够处理磁盘等外设的信息。 lib/syscall_all.c 处理磁盘的信息,最基本的就是对磁盘进行读写操作。 sys_write_dev函数用于对外设进行写操作。首先是检查地址的合法性,写入的这段地址需要在规定地址范围之内,接着使用bcopy把 阅读全文
摘要:
OS-lab4 系统调用 系统调用的流程 按照上述的流程逐个分析。 user/syscall_lib.c 这个文件位于user文件夹下,也就是用户程序可以调用的函数,相当于操作系统提供给用户程序的一些库函数。里面定义了一系列系统调用函数如syscall_putchar、syscall_yeild等, 阅读全文
摘要:
OS-lab3 lab2之后,我们能够通过MMU访问内存了,不过操作系统最重要的是能够让进程运行。 include env.h 定义了进程控制相关的变量,如进程数量NENV、进程状态ENV_FREE等、进程控制块Env、创建进程的宏函数ENV_CREATE、ENV_CREATE_PRIORITY等, 阅读全文
摘要:
OS-lab2 启动之后,我们的操作系统要能运行,需要一个载体,就是内存。内存的访问不是直接的,而是通过MMU完成。在完成MMU之前,我们先看看一些需要用到的宏定义和函数。 include pmap.h 定义了内存控制块Page结构体,用于记录页面的分配和使用情况。其中pp_link有两个成员,*l 阅读全文
摘要:
OS-lab1 boot boot文件夹中只有start.S文件,这个文件用于初始化内核。关掉中断,设置内核栈,并跳转到main函数。 init init.c 执行初始化操作。 main.c 主函数,调用init.c完成初始化等任务。 lib print.c lp_Print函数主要是解析字符串,完 阅读全文