Lab1 Xv6 && system calls

Using gdb 平时我们用的调试工具其实都是图形化后的gdb,使用起来非常的方便,但是熟悉原生的gdb会使我们的效率进一步提升。我认为学习好用gdb调试是一项非常重要的技能。 编译并启动 ==make qemu-gdb== 使用上述命令编译项目并且直接以调试模式启动。但是这个项目启动的其实是在本地的一个远程gdb,通过另一个窗口进行调试。 下面有几个关于系统调用的小问题 Looking at the backtrace output, which function called syscall? 显然是usertrap() What is the value of p->trapframe->a7 and what does that value represent? (Hint: look user/initcode.S, the first user program xv6 starts.) 通过提示找到trapframe的地址,在kernel/proc.h中找到a7寄存器对应的偏移地址。 把168换算成16进制 尝试着打印0x87f560a8 这个就是寄存器a7的值。其代表的具体含义通过所给的提示到对应文件中查找之后也是十分的明了。 应该就是系统的调用号。 What was the previous mode that the CPU was in? spp位表示其在什么状态。 通过图示得出,spp在二进制的第8bit. 由图可知8bit是0,所以之前是用户状态 。 System call tracing Attack xv6 这个task主要是利用xv6故意留下的bug然后获取到销毁内存但是保留了脏页的数据。然后通过一些比较hack的手段把字段给找出来。 page组成 上图是一个简化的逻辑页表,下一个实验也会用到,这里理顺一下逻辑有利于分析代码的组成。 上图是地址转化的细节。 页表项(PTE)包含标志位,告诉硬件应该如何使用这些虚拟地址。 这些相关位的定义都在(kernel/riscv.h)中 ...

February 25, 2025 · 1 min · Theme PaperMod

虚拟化--进程管理API:fork, execve, exit

操作系统上的进程 背景回顾:有关状态机、并发和中断的讨论给我们真正理解操作系统奠定了基础,现在我们正式进入操作系统和应用程序的 “边界” 了。让我们把视角回到单线程应用程序,即 “执行计算指令和系统调用指令的状态机”,开始对操作系统和进程的讨论。 本讲内容:操作系统上的进程 操作系统上的第一个进程 UNIX/Linux 进程管理 API: fork, execve, exit fork() 理解 fork(): fork() 会完整复制状态机;新创建的状态机返回值为 0,执行 fork() 的进程会返回子进程的进程号。同时,操作系统中的进程是并行执行的。程序的精确行为并不显然——model checker 可以帮助我们理解它。 在这个例子中,我们还发现执行 ./a.out 打印的行数和 ./a.out | wc -l 得到的行数不同。根据 “机器永远是对的” 的原则,我们可以通过提出假设 (libc 缓冲区影响) 求证、对比 strace 系统调用序列等方式,最终理解背后的原因。标准输入输出的缓冲控制可以通过 setbuf(3) 和 stdbuf(1) 实现。 execve() exit()

February 2, 2025 · 1 min · Theme PaperMod

xv6-环境搭建

xv6 启动! 万事开头难! 这是我所用的开发环境,Kubuntu+VsCode,这样的环境对我来说是比较舒服的,也是比较好用的在实际使用的过程中我没感觉ubuntu和kubuntu有任何的区别,反正我也不在乎桌面,我只在终端里用。 用debian系的有一个好处就是软件生态真的很不错,可别是最新的,版本什么的直接用apt都能直接获得,虽然不想archwiki那样完善,但是Google一下基本上问题也都能解决。 一个很有意思的工具 bear 我相信有很多同学在用vscode看项目代码的时候会发现,全是红线,项目变得根本就不可读,无法跳转,更无法获得依赖关系,只能把vscode当一个能用鼠标的阉割版的vim用。我们可以获取编译的命令行,然后让vscode知道然后把这些报错给消掉 1.make -nB 当然可以手动获取编译选项,但是这样也是比较复杂的而且十分的低效 2.bear 善于使用工具,君子性非异也,善假于物也。用bear把编译过程包起来就能自动获取编译选项。 如何在vscode中debug ==官方非GUI界面== make qemu-gdb 之后系统会在本地启动一个gdb,另起一个终端使用gdb连接。 到这就说明gdb启动成功了,但是后面会有一个小小的坑。 Type “apropos word” to search for commands related to “word”. warning: File “/home/learn_code/xv6-labs-2024/.gdbinit” auto-loading has been declined by your `auto-load safe-path’ set to “$debugdir:$datadir/auto-load:/home/learn_code/xv6-riscv/.gdbinit”. To enable execution of this file add add-auto-load-safe-path /home/learn_code/xv6-labs-2024/.gdbinit line to your configuration file “/root/.config/gdb/gdbinit”. To completely disable this security protection add set auto-load safe-path / line to your configuration file “/root/.config/gdb/gdbinit”. ...

January 4, 2025 · 1 min · Theme PaperMod