内核页表机制:低地址一般为外围硬件的寄存器和低地址物理内存对应,其地址映射图示为,其中PLIC( platform-level interrupt controller (PLIC) ),UART0定义为UART的寄存器对应的物理内存地址。VIRTIO为 virtio mmio interface,其中KERNBASE(0x80000000)到PHYSTOP(0x88000000=PHYSTOP (KERNBASE + 128*1024*1024))为xv6所...
1、入口_entry的汇编代码见entry.S[2],_entry的代码会加载在kernel加载到内存的起始位置0x80000000,每个hart(hart 的全称是 Hardware Thread,即硬件线程。在 xv6 操作系统中,hart 通常用于表示一个 CPU 核心)会调用start.c的代码执行。在 xv6 操作系统中,stack0 是一个用作临时工作栈的区域(其为全局变量,在内...
在os中,物理内存一般以页(一页,一般为4096字节)进行分配和管理。 在riscv-xv6中实现了三级页表机制:level2,level1,level0。sv39的寻址方式中,virtual address由9+9+9(三级页表项,每一级页表的directory有2^9=512项PTE条目,PTE的组成为(reserved(10bit)+PPN(44bit)+flags(10bit))。其中标记位为PTE_R,PT...
1、入口_entry的汇编代码见entry.S[2],_entry的代码会加载在kernel加载到内存的起始位置0x80000000,每个hart(hart 的全称是 Hardware Thread,即硬件线程。在 xv6 操作系统中,hart 通常用于表示一个 CPU 核心)会调用start.c的代码执行。在 xv6 操作系统中,stack0 是一个用作临时工作栈的区域(其为全局变量,在内...
本章的余下部分解释xv6如何解决这些困难。 8.1. 概览# 如图8.1所示,xv6文件系统实现由很多个层构成。磁盘层在virtio硬盘驱动之上读取和写入块;buffer cache层缓存磁盘块以及维护它们的同步访问,确保在任一特定块中,在同一时间只有一个内核进程可以修改存储在其中的数据;日志层允许更高的层次将多个块的更新封装到一个...
包括xv6在内的大多数内核都会交错的执行多个活动,一个原因来自于多处理器硬件:计算机有多个独立运行的CPU,比如xv6的RISC-V,这些CPU共享物理内存,并且xv6利用这一点来维护被所有CPU共同读写的数据结构。这种共享提高了在一个CPU正在更新数据结构的过程中另一个CPU读取该数据结构的可能,或者只是多个CPU在同时更新相同的...
这个系列的目的还是以讲解xv6-riscv的代码以及记录我在做的事情为主,也会掺杂许多mini-riscv-os的代码介绍(关于xv6-riscv和mini-riscv-os的链接请看参考),并非教程倾向(但也会尽可能讲解一些基础知识),很多细节不会讲到。如果想要更详细的教程我建议你查看参考资料中引用的内容,在这一期我会列出一部参考的项目。
git clone git://github.com/mit-pdos/xv6-riscv.git 进入xv6目录下进行编译,并启动qemu仿真运行: make qemu 运行结果如下图: 在xv6命令行下,输入ls,看到正确回应,那么恭喜你,至此运行环境已经设置成功。 如果要退出qemu, 按下Ctrl 键和A键, 然后释放这两个键,再按X键即可退出 ...
gitclone https://github.com/mit-pdos/xv6-riscv.git 编译 代码语言:shell AI代码解释 cdxv6-riscvmake 使用qemu 运行 代码语言:shell AI代码解释 makeqemu 显示如下代表运行成功 mit-make-qemu 使用qemu-gdb 对 xv6进行调试 需要2个窗口(终端)
xv6源码:xv6操作系统源码 一、RISC-V toolchain risc-v工具链安装是坑最多的一步,如果按照官网教程来安装,大概率会因为下载过慢而失败,即使我把命令行翻了墙效果也并不好。教程中的安装命令是brew install riscv-tools,但我发现riscv-tools由几个部分组成,我们其实只需要riscv-gnu-toolchain。