![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深大操作系统(xv6)
文章平均质量分 91
深大操作系统(xv6)
归忆_AC
for dream in szu...会看消息,欢迎交流,若有错误可以私信反馈。
实验报告仅供参考!
github:https://github.com/guiyi886
展开
-
【深圳大学操作系统】综合实验二
时,会触发一个中断,进入内核态。Nyuichi的xv6版本上还包含更多有趣的小程序,比如一个迷你的vi,一个扫雷游戏等。这段代码会创建一个子进程,如果 fork() 返回值是 0,则表示当前进程是子进程,子进程会执行 sleep(5) 和 exit(0)。一个在xv6-riscv上的游戏实例(xv6-riscv-2048.zip,a, d, w, s 分别代表左,右,上,下。通过此次实验,加深了对操作系统的理解,以及对xv6内部操作实现的理解,学会了如何在xv6中移植小游戏以及编写自己的小游戏。原创 2024-01-30 15:13:38 · 1832 阅读 · 0 评论 -
【深圳大学操作系统】综合实验一
在这个shell中,每个命令都需要在子进程中执行,在一个shell中,当用户输入一个命令时,如果在父进程中直接执行该命令,会导致原shell进程的状态被改变,而且如果该命令出现错误导致进程崩溃,也会导致整个shell崩溃。对于ls | wc命令,它包含两个命令,分别是ls和wc,它们通过管道连接在一起,因此它对应的是PIPE类型,表示管道。由于命令的执行需要创建新的进程,因此通常在Unix系统中,shell会通过fork()系统调用创建一个新的子进程来执行命令,而在父进程中则等待子进程的执行结果。原创 2024-01-30 15:13:23 · 1686 阅读 · 0 评论 -
【深圳大学操作系统】实验四 文件管理
英文翻译如下:磁盘上的inode结构struct-dinode包含一个大小和一个块号列表。索引节点数据位于索引节点的addrs数组中列出的块中。第一个NDIRECT数据块被列在阵列中的第一个NDIRECT条目中;这些区块被称为“直接区块”。下一个NINDDIRECT数据块不在索引节点中列出,而是在一个称为“间接块”的数据块中列出。addrs数组中的最后一个条目给出了间接块的地址。原创 2024-01-30 15:12:54 · 1313 阅读 · 0 评论 -
【深圳大学操作系统】实验三 内存分配与回收
阅读xv6代码后,对操作系统的页表相关操作的底层实现有了更为清晰的印象和深刻的理解,明白了内存空间的分配与回收的基本原理。在xv6中,kmem中的freelist指针指向空闲物理块链表,链表中每个节点都是一个struct run结构体,表示一个空闲的物理内存块。因此,空闲物理块并没有被保存在一个特定的数据结构中,而是作为一个物理内存块的一部分,通过链表的指针链接在一起,形成一个空闲物理块链表。oldsz:一个uint64类型的值,表示进程已经占用的虚拟内存的末尾地址,函数会从这个地址继续往后分配新的内存。原创 2024-01-29 14:18:31 · 1791 阅读 · 0 评论 -
【深圳大学操作系统】实验二 处理机调度
其中我们可以在proc.c文件中找到procdump()函数,故我们仿照其在proc.c文件中添加procdump_sleeping函数,遍历整个进程表,找到所有state为SLEEPING的进程,并将它们的信息打印出来。不会,由前面for循环部分的代码可知,在执行完第一个进程后,并不会跳出for循环,而是接着遍历完整个进程表,寻找下一个RUNAABLE状态,故不会出现这种情况。当找到一个RUNNABLE的进程时,首先获得该进程的锁,以确保它的状态不会在此期间被其他进程修改。原创 2024-01-29 14:12:15 · 1755 阅读 · 0 评论 -
【深圳大学操作系统】实验一 并发程序设计
在main (kernel/main.c:11)函数初始化几个设备和子系统后,通过调用userinit (kernel/proc.c:233)创建第一个进程,第一个进程执行一个用 RISC-V 汇编编写的小程序 initcode.S(user/initcode.S:1),它通过调用 exec 系统调用重新进入内核。阅读了xv6系统的代码,对xv6系统的工作原理有了基本的认识,了解了xv6是如何支持多核cpu,阅读了xv6中文文档,加深了对xv6系统的了解。(2)、了解进程的创建、撤消和运行,进程并发执行;原创 2024-01-29 14:06:02 · 1996 阅读 · 0 评论