xv6 book risc-v 第七章 调度 任何操作系统都希望运行比计算机所拥有的CPU数量更多的进程,所以,我们需要一个在进程之间时分CPU的计划,理想状态下,这种共享对用户进程透明。给每一个进程提供它拥有自己的虚拟CPU的通用方式是在多个硬件CPU上多路复用进程。这一章解释了xv6如何实现多路复用。 7.1. 多路复用# xv6会在...
RISC-V的页表硬件通过将每个虚拟地址映射到一个物理地址将这两种地址联系起来。 xv6运行在Sv39 RISC-V上,这意味着只会使用64位虚拟地址的低39位,高25位没有被使用。在这种Sv39配置中,一个RISC-V页表在逻辑上是一个由2²⁷(134,217,728)个页表项(Page Table Entry, PTE)组成的数组。每个PTE包含一个44...
xv6 book risc-v 第八章 文件系统 文件系统的一个目标是组织和存储数据。文件系统通常支持在用户和应用之间共享数据,以及持久化它们以让重启后数据仍然可用。 xv6文件系统提供Unix风格的文件、目录以及路径名(查看第一章)并且将它的数据存储在virtio磁盘上以持久化(查看第四章)。文件系统面临多种挑战: 文件系统需要...
P在sleep时保持着锁,所以V将永远阻塞在等待锁的过程中。 我们将通过改变sleep的接口来修正前面的方案:调用者必须将条件锁(condition lock)传递给sleep,这样在调用进程被标记为SLEEPING并在chan上等待后,它就可以释放锁。锁将强制并发的V等待直到P将自己置于SLEEPING状态,这样wakeup就会发现SLEEPING**的消费者并将其唤醒...
4.1 RISC-V的trap机制 每个RISC-V的CPU都有一些控制寄存器,内核可以通过写寄存器告诉CPU怎么处理trap,内核也可以通过读相应的控制寄存器来判断发生了哪种trap。 stvec(supervisor trap vector):内核将trap处理程序的地址写到此寄存器,RISC-V就会跳转到此处来处理trap ...
->RISC-V发出中断 ->trap handler ->调用devintr ->检查状态 ->调用uartintr处理输入 查看uartintr的源码, 可以看到它会循环不断的从UART硬件中读取等待的输入字符,并传递给consoleintr, 一旦读取完,uartgetc返回-1, 立刻退出循环, 结束这次中断的处理.并再次响应下一个像上面这样的流程产生的中断. void uartin...
OpenSCA CLI 是一款开源的软件成分分析工具,用来扫描项目的第三方开源组件依赖及漏洞信息。如何使用 了解详情 下载安装 OpenSCA-CLI: 访问https://gitee.com/XmirrorSecurity/OpenSCA-cli,通过发行版(Release)下载对应系统架构最新的OpenSCA-Cli工具。 使用说明: ...
xv6是由麻省理工学院(MIT)开发的一个教学目的的操作系统,它是在x86处理器上用ANSI标准C重新实现的Unix第六版(即v6), 课程编号为6.828。2019年被移植到RISC-V之上,并设置了6.S081。 xv6的主要特征: 开源,精简,代码仅两万行左右; 功能完善,可全面理解操作系统的原理及实现; ...
江湖小小白/xv6-riscv-book 代码 Issues 0 Pull Requests 0 Wiki 统计 流水线 服务 Gitee Pages JavaDoc PHPDoc 质量分析 Jenkins for Gitee 腾讯云托管 腾讯云 Serverless 悬镜安全 阿里云 SAE Codeblitz 我知道了,不再自动展开 Issues / 看板 欢迎使用看板! 看板提供了一种简略直观的展示方式,用于追踪待办事项、...
/* kernel/riscv.h */ ... // one beyond the highest possible virtual address. // MAXVA is actually one bit less than the max allowed by // Sv39, to avoid having to sign-extend virtual addresses // that have the high bit set. ...