riscv-xv6
文章平均质量分 87
MIT 6.S081 2020 操作系统
雪之鹰
你若盛开,清风自来!越努力,越幸运!
展开
-
xv6中的fork()和exec()
在明白了xv6调度器的工作原理后,我们知道进程在运行时会被定时器打断,流程类似于yield()->sched()->swtch()->scheduler()->swtch()->sched()->yield()。但对于一个还没有运行的进程,这样的流程显然是不行的,它需要一个初始化的程序,这个程序就是forkret(),forkret()会在allocproc()函数里被调用。这里部分的结构体变量是直接复制父进程的,包括sz,tf,ofile,cwd等,而改变的有parent,pid,context等。原创 2024-01-24 15:58:41 · 1022 阅读 · 0 评论 -
Traps and system calls
trap类型分为三类:interrupts、exception、system calltrap处理方式分为三类:user trap、kernel trap、system call。原创 2024-01-20 14:55:49 · 801 阅读 · 0 评论 -
Interrupts and device drivers
驱动程序的中断处理程序,作为底部的一半,计算出哪个操作已经完成,如果合适的话,唤醒一个等待的进程,并告诉硬件开始任何等待的下一个操作。bottom half是控制台驱动的下半部,由中断执行,一有数据接收到就把数据存进buffer,解除top half阻塞,为top half提供数据,作为生产者。在有键盘字符输入时,它会触发中断,将我们输入的字符在控制台里回显,同时把字符存在buffer缓冲区里,直到回车才会解除shell进程的阻塞,进而处理输入的指令。在"$ "打印完之后,就是控制台的输入部分了。原创 2024-01-20 14:09:54 · 857 阅读 · 0 评论 -
Locking
原子”是物质的最小组成,即原子是不可分割的。虽然到现在科学家已经发现在原子内部有更小的成分,但是在广义上原子仍然保持“不可分割”的语义。那么在芯片中的原子性是什么呢?它延续了“不可分割”这个含义,表示该系列指令的执行是不可分割的,完成的操作不会被其它外部事件打断,我们就说这系列指令遵循原子性。原创 2024-01-20 14:09:18 · 860 阅读 · 0 评论 -
Scheduling
xv6调度器的实现是非常巧妙的,当然也有很多晦涩的点。本节主要讲解调度器的原理和实现。原创 2024-01-20 14:07:23 · 1060 阅读 · 0 评论 -
File system
xv6构建的文件系统十分小巧并且功能齐全,虽然与现在的主流文件系统(FAT32、EXT4…)仍有差距,但文件系统实现的思想都大同小异,所以xv6的文件系统值得我们学习。文件系统使用分层的思想:每一层分别实现某一功能;下一层为上一层提供。文件系统在磁盘的组织形式也很简单。文件系统按照下图将各部分写入磁盘后,之后的读写都要按照下图的格式来进行。原创 2024-01-20 14:06:12 · 877 阅读 · 0 评论 -
6.S081 Copy-on-Write Fork for xv6
但它的整个过程都是在内核态进行的,也就是说,它使用的是内核页表,而内核对用户区的权限是很高的(可读可写,见kvminit())。但是我们还是避免不了在exec()前进行一些其他操作,比如它会调用父进程的函数,dup()也需要父进程里的文件信息,甚至有的fork()后面就不会跟exec()为了保证两个进程的隔离性,我们必须要把两个进程的权限都设为不可写,换句话说,出现的原因是我们还没有修改内存释放相关的代码,用的kfree()还是以前直接复制情况的代码,我们还没有进程结束,那么在哪里会调用kfree()呢?原创 2023-11-27 20:55:28 · 858 阅读 · 0 评论 -
6.S081 System calls
【代码】6.S081 System calls。原创 2023-10-16 17:07:06 · 27 阅读 · 0 评论 -
6.S081 Locks
看到这一段代码,多核会出现这样一种情况:两个进程同时运行到r = kmem[i].freelist,其中一个获得锁进入了if( r ) ,而另外一个再获得锁时,也可以进入if( r ) 里面,但此时该页已经被引用过了,所以出现了我们上面看到的bug。但是就像实验所说,kalloc()的实现更复杂了,因为它需要在内存不够的时候(freelist为空),去别的核心的freelist中去“偷”内存块,放入自己的freelist里为己所用。所以在这里是会出现自旋的,我们的锁也是在这里应用。原创 2023-12-05 14:58:54 · 857 阅读 · 0 评论