Xv6为每个CPU维护了一个cpu结构体(kernel/proc.h:22),它记录了当前在该CPU上运行的进程(如果有的话),为CPU的调度线程保存的寄存器,以及管理中断禁用所需的嵌套自旋锁的计数。函数mycpu(kernel/proc.c:60)返回一个指向当前CPU结构体cpu的指针。RISC-V对CPU进行编号,给每个CPU一个hartid。Xv6确保每个CPU的hartid...
如图 2.3 所示,一个进程的用户内存从虚拟地址 0 开始,可以增长到MAXVA(kernel/riscv.h:348),原则上允许一个进程寻址 256GB 的内存。 当一个进程要求 xv6 提供更多的用户内存时,xv6 首先使用kalloc来分配物理页,然后将指向新物理页的 PTE 添加到进程的页表中。Xv6 设置这些 PTE 的PTE_W、PTE_X、PTE_R、PT...
如果xv6支持多用户,这个情况将会是一个安全问题,因为老文件的拥有者可以读写被其它用户拥有的新文件的块。 xv6通过一个简单形式的日志来解决在文件系统操作期间崩溃的问题。一个xv6的系统调用不直接写磁盘上的文件系统数据结构,而是对于所有它想做的磁盘写,都在磁盘上的一个日志中放置一个描述,一旦系统调用记录了它...
xv6 book risc-v 第六章 锁 包括xv6在内的大多数内核都会交错的执行多个活动,一个原因来自于多处理器硬件:计算机有多个独立运行的CPU,比如xv6的RISC-V,这些CPU共享物理内存,并且xv6利用这一点来维护被所有CPU共同读写的数据结构。这种共享提高了在一个CPU正在更新数据结构的过程中另一个CPU读取该数据结构的可能,...
xv6-riscv-book中译版. Contribute to shzhxh/xv6-riscv-book-CN development by creating an account on GitHub.
xv6-riscv-book-Chinese 本项目是MIT 6.S081与6.828课程用书xv6-riscv-book的中文翻译。此版翻译基于xv6-book-2020-Chinese修改与校对完成,全部内容转为Markdown格式。如果您在阅读过程中发现翻译中有任何错误或可以改进的地方,欢迎提出issue或pull request。目录...
操作系统接口 – 阅读 xv6-riscv-book Xv6的时钟周期:定时器芯片两次中断之间的时间 xv6作为一个简单的操作系统,利用一个“内核kernel”向其他运行中的程序提供服务的特殊程序,这个内核相当于连接了硬件和运行程序。 每一个正在运行的程序可以称为进程,都拥有子集的包含指令、数据、栈的内存空间。 指令实现程序的运算...
在trampoline页面,usertrapret保存了tp,因为用户进程可能修改tp。最后,当从用户空间进入内核时(kernel/trampoline.S:70)uservec恢复保存的tp。编译器保证永远不会使用tp寄存器。如果RISC-V允许xv6直接读取当前的hartid将会更加方便,但是这只在机器模式下被允许,在supervisor模式下则不行。
Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Cancel Create saved search Sign in Sign up Reseting focus {{ message }} mit-pdos / xv6-riscv-book Public Notifications You must be signed in to change notification settings Fork 134 ...
Breadcrumbs xv6-riscv-book-Chinese / Chapter-6.mdTop File metadata and controls Preview Code Blame 180 lines (117 loc) · 23.7 KB Raw 第六章:锁 大多数内核,包括xv6,都会交错执行多个任务。一种实现交错执行任务的方式是多处理器架构:硬件系统具有多个CPU独立执行,如xv6的RISC-V。这些CPU共享物理RAM...