![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 87
HarunaP
这个作者很懒,什么都没留下…
展开
-
XV6 RISCV源码阅读报告之中断
一、xv6中断异常在操作系统运行用户进程时处于用户态,当发生异常、中断或陷入时,需要从用户态进入内核态调用处理机制。陷入内核之前需要保存上下文,而在处理完成,回到用户态时需要恢复上下文。代码包括trap.c,proc.h,syscall.c, sysproc.c, plic.c, trampoline.S等。1.1代码阅读与分析1.1.1trampoline.S与kernelvec.Sriscv为处理trap提供了scause(记录发生trap原因)、stvec(记录trapwrapp...原创 2021-12-25 00:48:17 · 1299 阅读 · 1 评论 -
XV6 RISCV源码阅读报告之 锁
二、xv6的锁为了在多处理器上防止多个CPU操作同一片地址空间互相干扰引起的错误,以及即使是在单个处理器上防止中断处理程序与非中断代码之间互相干扰,xv6使用锁来实现互斥。2.1代码阅读与分析xv6定义锁的代码非常明确,即spinlock和sleeplock。spinlock会在无法获得锁时不断循环获取;而sleeplock为了防止长时间的等待循环,在获取不到锁时让进程陷入睡眠,锁释放时对睡眠进程进行唤醒。2.1.1spinlock.hspinlock.h定义了spinlock的数据原创 2021-12-25 00:50:25 · 946 阅读 · 0 评论 -
XV6 RISC-V 源码阅读报告之进程模型
xv6代码阅读第三部分,进程线程模型原创 2021-12-24 01:24:36 · 994 阅读 · 0 评论 -
XV6 RISCV 源码阅读报告之 进程调度
xv6阅读之进程调度四、进程调度在计算机资源不足以同时运行所有进程时,就需要操作系统考虑如何分配有限的资源,如CPU时间和内存。xv6通过切换每个CPU上的进程实现多路复用。当进程等待设备或管道IO,或等待子进程退出,或等待sleep系统调用完成时,通过睡眠和唤醒进行进程调度;或者当某个进程长期持有CPU进行计算时,也会被强制切换以运行其他进程。4.1代码阅读proc.c和proc.h的代码在上一节中已经描述过,这里对与调度相关的几个函数再进行详细说明。4.1.1 swtch.S函数原创 2021-12-25 00:53:35 · 892 阅读 · 0 评论 -
XV6 RISCV 源码阅读之文件系统
六、文件系统xv6的文件系统分为七层,由低到高如下所示。磁盘层读取和写入virtio硬盘上的块。 BufferCache层缓存磁盘块,同步对他们的访问。 日志层允许更高层在一次事务中将更新包装到多个块,并在崩溃时自动更新这些块。 i节点层提供单独的文件,每个文件表示为一个i节点,包含索引号和一些保存数据的块。 目录层将每个目录实现为一种特殊的i节点,包含一系列目录项。 路径名层提供分层路径名,并且可以递归查找。 文件描述符通过文件系统抽象接口简化了对资源的操作。6.1代码阅读和机制原创 2021-12-25 00:56:22 · 995 阅读 · 0 评论 -
XV6 RISCV源码阅读之 虚拟内存
五、内存管理通过进程线程模型,xv6为每个程序提供了独占处理器的错觉,而通过虚拟内存,xv6为程序提供了统一的0-MAXVA地址的虚拟内存,并通过页表进行内存的管理。RISCV页表通过将每个虚拟地址映射到物理地址来为二者建立联系。5.1代码阅读在kalloc.c中实现了对物理内存的管理,包括分配和释放,而对虚拟内存的管理在vm.c中。在memlayout.h中,定义了内存布局的一些常量。5.1.1 memlayout.h在kvmmake()初始化内核页表添加映射时会用到其中的参数,从低到原创 2021-12-25 00:54:54 · 1229 阅读 · 0 评论