04 2024 档案

摘要:一.基础 用户线程状态 RUNNING,线程当前正在某个CPU上运行 RUNABLE,线程还没有在某个CPU上运行,但是一旦有空闲的CPU就可以运行 SLEEPING,这节课不介绍, 一. 定时器中断线程切换 防止个别程序长时间占有线程导致其他线程饿死,通过定时器中断定时释放线程资源 定时器中断是由 阅读全文
posted @ 2024-04-21 00:20 INnoVation-V2 阅读(14) 评论(0) 推荐(0) 编辑
摘要:一.寄存器 1.通用寄存器 2.特殊寄存器 stvec(Supervisor Trap Vector) 内核在这里写入trap处理程序的地址;RISC-V会跳转到stvec中的地址来处理trap,xv6的stvec就是trampoline page的起始地址 sepc 发生trap时,RISC-V将 阅读全文
posted @ 2024-04-21 00:19 INnoVation-V2 阅读(236) 评论(0) 推荐(0) 编辑
摘要:一.设置中断 1.start.c\start() // 默认所有trap在机器模式下处理 // 这里将trap的处理托管给Supervisor mode w_medeleg(0xffff); w_mideleg(0xffff); // 设置SIE寄存器接收外部,软件和定时器中断, w_sie(r_s 阅读全文
posted @ 2024-04-21 00:18 INnoVation-V2 阅读(47) 评论(0) 推荐(0) 编辑
摘要:5.系统调用如何安全地获取参数 直接传递给kernel数据的地址(指针)?, 内核和用户的页表不同,不能直接访问用户地址 可能会传递内核内存地址,直接访问就是安全漏洞 因此内核不能使用普通指令从用户提供的地址加载或存储。 内核实现了一些函数,可以安全地在用户提供的地址之间传输数据。 fetchstr 阅读全文
posted @ 2024-04-21 00:18 INnoVation-V2 阅读(14) 评论(0) 推荐(0) 编辑
摘要:系统调用跳转流程 以write()系统调用为例 1. 用户态 调用write() 跳转到usys.s\write #include "kernel/syscall.h" write: li a7, SYS_write ecall ret SYS_write的定义在kernel/syscall.h中 阅读全文
posted @ 2024-04-21 00:18 INnoVation-V2 阅读(26) 评论(0) 推荐(0) 编辑
摘要:xv6启动流程 xv6内核地址空间 1 Riscv开机 riscv在启动时,pc被默认设置为0X1000,之后经过以下几条指令,跳转到0x80000000 在第一个shell,打开xv6 gdb模式make qemu-gdb 打开第二个shell,进行调试riscv64-unknown-elf-gd 阅读全文
posted @ 2024-04-21 00:18 INnoVation-V2 阅读(215) 评论(0) 推荐(0) 编辑
摘要:第二章 2.1、xv6代码结构 代码主要有三个部分组成: kernel: 我们可以ls kernel,里面包含了所有的内核文件。因为XV6是一个宏内核结构,这里所有的文件会被编译成一个叫做kernel的二进制文件,然后这个二进制文件会被运行在kernel mode中。 use: 基本上是运行在use 阅读全文
posted @ 2024-04-21 00:17 INnoVation-V2 阅读(13) 评论(0) 推荐(0) 编辑
摘要:Lab: mmap (hard) 一、要求 只要求实现mmap功能的子集,即对文件进行内存映射 mmap说明 void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); map:成功时, 返回map的虚 阅读全文
posted @ 2024-04-21 00:16 INnoVation-V2 阅读(75) 评论(0) 推荐(0) 编辑
摘要:1. Large files (moderate) xv6中,一个block大小为1024b,块编号需要4b表示,所以一个块最多容纳256个块编号。 当前 xv6 单个文件最多有12个直接块和一个间接块,一个间接块最多放置256个块,一共268个块。 目标:单个文件增大到65803个块,即需要增加一 阅读全文
posted @ 2024-04-21 00:16 INnoVation-V2 阅读(11) 评论(0) 推荐(0) 编辑
摘要:第八章 文件系统 xv6文件系统类似于Unix的文件、目录和路径名,并将数据持久化到virtio磁盘上。文件系统解决以下难题: 文件系统需要磁盘上的数据结构来表示目录和文件名称树,记录保存每个文件内容的块的标识,记录磁盘的哪些区域是空的。 文件系统必须支持崩溃恢复(crash recovery)。如 阅读全文
posted @ 2024-04-21 00:15 INnoVation-V2 阅读(15) 评论(0) 推荐(0) 编辑
摘要:Uthread: switching between threads (moderate) Riscv32 Callee寄存器 Name ABI Name Description Saver x0 zero Zero - x1 ra Return address Caller x2 sp Stack 阅读全文
posted @ 2024-04-21 00:15 INnoVation-V2 阅读(6) 评论(0) 推荐(0) 编辑
摘要:第七章 调度 进程数 > CPU核数,需要在进程之间共享cpu,理想情况下,这种共享对用户进程透明。 一种常见的方法是,将进程多路复用到CPU上,使每个进程都有独享CPU的错觉。 7.1 多路复用 Xv6会在两种情况下,切换正在运行的进程。 进程等待设备或管道I/O完成、等待子进程退出,或在slee 阅读全文
posted @ 2024-04-21 00:15 INnoVation-V2 阅读(13) 评论(0) 推荐(0) 编辑
摘要:Memory allocator (moderate) 代码地址 https://github.com/INnoVationv2/xv6-labs-2023/commit/6a93f5a9a5fca0627f9d44f185a33f30f3b8cd16 Buffer cache (hard) 创建多 阅读全文
posted @ 2024-04-21 00:14 INnoVation-V2 阅读(10) 评论(0) 推荐(0) 编辑
摘要:第六章 锁 本章解释为什么xv6需要锁,xv6如何实现和使用锁。 6.1 竞态条件 可以将锁视为串行化并发的临界区域,使得任意时刻只有一个进程在运行这部分代码,从而保证正确。 尽管正确使用锁可以改正不正确的代码,但锁会限制性能。 锁的位置对性能也很重要。例如,在push中把acquire的位置提前也 阅读全文
posted @ 2024-04-21 00:14 INnoVation-V2 阅读(22) 评论(0) 推荐(0) 编辑
摘要:一、E1000初始化 1.main void main() { ... #ifdef LAB_NET pci_init(); sockinit(); #endif ... } 2.pci_init void pci_init() { // e1000的寄存器映射到此地址. // vm.c maps 阅读全文
posted @ 2024-04-21 00:13 INnoVation-V2 阅读(55) 评论(0) 推荐(0) 编辑
摘要:QEMU模仿的是82540EM CH-2 网卡架构概述 2.1 介绍 这一章将介绍PCI/PCI-X系列网卡(以下简称网卡)。接下来将介绍网卡功能、寄存器描述和初始化顺序、以及网卡的主要接口。 设计准则如下: 提供一个以太网接口,支持10/100/1000 Mb/s 物理层接口,同时也支持1000 阅读全文
posted @ 2024-04-21 00:13 INnoVation-V2 阅读(166) 评论(0) 推荐(0) 编辑
摘要:https://www.jianshu.com/p/14ae99223683 1.uart初始化 #define LCR_BAUD_LATCH (1<<7) // 1000 0000 #define LCR_EIGHT_BITS (3<<0) // 11 #define FCR_FIFO_ENABL 阅读全文
posted @ 2024-04-21 00:13 INnoVation-V2 阅读(113) 评论(0) 推荐(1) 编辑
摘要:学习流程 QEMU模仿的是82540EM 一、LAB说明 1. 背景 将使用一个名为 E1000 的网卡来处理网络通信。xv6是qemu模拟的硬件,连接到一个同样由 QEMU 模拟的 LAN。在这个仿真LAN上,xv6的IP地址是10.0.2.15。同时,Qemu将运行qemu的宿主的ip地址设置为 阅读全文
posted @ 2024-04-21 00:12 INnoVation-V2 阅读(33) 评论(0) 推荐(0) 编辑
摘要:第五章 中断和设备驱动 驱动程序: 作用:配置硬件设备,告诉设备要执行的操作,处理设备产生的中断,与等待设备I/O的进程进行交互。 难点:驱动程序需与设备并行运行,驱动程序必须理解设备的硬件接口,可能没有文档。 设备中断是trap的一种,内核通过处理代码识别设备,然后调用相应的驱动程序进行处理,这种 阅读全文
posted @ 2024-04-21 00:11 INnoVation-V2 阅读(15) 评论(0) 推荐(0) 编辑
摘要:LAB-5 COW 主要是修改fork和缺页中断处理程序 以前fork时,会直接复制原进程的页表内容到新页表,具体过程是 ​ 对于原页表中的每一页,malloc一个新页,然后复制数据到新页,最后把这一页映射到新页表 现在进行修改: 1. fork复制页表 对于新进程,为其创建新页表 直接复用旧页表项 阅读全文
posted @ 2024-04-21 00:11 INnoVation-V2 阅读(20) 评论(0) 推荐(0) 编辑
摘要:一、trap简介 三类 trap 系统调用:用户程序执行ecall指令要求内核为其提供服务 异常:(用户或内核)指令做了一些非法的事情,例如除以零或使用无效的虚拟地址; 设备中断,一个设备,例如当磁盘硬件完成读或写请求时,向系统表明需要处理。 trap执行流程 1. 强制将控制权转移到内核 2. 内 阅读全文
posted @ 2024-04-21 00:10 INnoVation-V2 阅读(27) 评论(0) 推荐(0) 编辑
摘要:Backtrace 注意栈帧的结构就很简单 Alarm (hard) sys_sigalarm 解决思路 保存时钟周期和handler地址 每次发生时钟中断时,计数一次,经过n个时钟周期,就调用handler函数 但是handler函数位于用户态 需要跳转到用户态执行handler 然后跳转回来继续 阅读全文
posted @ 2024-04-21 00:10 INnoVation-V2 阅读(10) 评论(0) 推荐(0) 编辑
摘要:CH-3 页表 0、页表简介 每个进程都有一个页表 用于隔离不同进程的地址空间 为每个进程提供私有的地址空间 决定了进程能访问哪些地址 复用物理内存,把同一物理页映射到几个页表中 1. 分页硬件 内存的实际地址是物理地址 用户指令访问的是虚拟地址 需要通过页表,将虚拟地址翻译为物理地址,才能访问 在 阅读全文
posted @ 2024-04-21 00:09 INnoVation-V2 阅读(22) 评论(0) 推荐(0) 编辑
摘要:文档名:riscv-privileged XV6使用Riscv SV39 Riscv satp地址翻译在4.3.1 Addressing and Memory Protection章节 SV39指令格式详细说明在4.4 Sv39: Page-Based 39-bit Virtual-Memory S 阅读全文
posted @ 2024-04-21 00:08 INnoVation-V2 阅读(17) 评论(0) 推荐(0) 编辑
摘要:一、初始化 kernel\main.c\main() void main(){ ... kinit(); // physical page allocator kvminit(); // create kernel page table kvminithart(); // turn on pagin 阅读全文
posted @ 2024-04-21 00:07 INnoVation-V2 阅读(56) 评论(0) 推荐(0) 编辑
摘要:第二章 操作系统的组织结构 1. 资源抽象 由操作系统管理硬件资源,用户程序通过操作系统提供的接口间接访问硬件资源 所有软件共享CPU,由操作系统进行进程切换的工作 进程通信通过文件描述符完成,省略了很多细节,比如管道文件的具体存放位置,而且如果管道中程序执行失败,内核会给管道另一端的程序发送EOF 阅读全文
posted @ 2024-04-21 00:06 INnoVation-V2 阅读(12) 评论(0) 推荐(0) 编辑
摘要:Lab: page tables 1.Speed up system calls (easy) 加速getpid()系统调用速度 映射一页在USYSCALL位置,向其中写入一个结构体 struct usyscall { int pid; // Process ID }; 赋予用户态只读权限 代码:g 阅读全文
posted @ 2024-04-20 23:58 INnoVation-V2 阅读(64) 评论(0) 推荐(0) 编辑
摘要:Lab: system calls 1.Using gdb (easy) 打开两个shell,都进入xv6文件夹 第一个shell输入 make qemu-gdb 第二个shell输入 riscv64-unknown-elf-gdb Looking at the backtrace output, 阅读全文
posted @ 2024-04-20 23:57 INnoVation-V2 阅读(115) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示