随笔分类 -  xv6

摘要:bootloader 1. bootasm.S : start32 2. bootmain.c : bootmain kernel 3. main.c : main 4. proc.c : userinit 创建第一个用户进程 initcode 5. main.c : mpmain 调用schedu 阅读全文
posted @ 2018-07-26 16:33 方田 阅读(632) 评论(0) 推荐(0)
摘要:在xv6 中锁对象是 spinlock,spinlock中的locked为1的时候表示被占用,为0的时候锁空闲。 使用 acquire获取锁 该函数中通过xchg原子性交换locked和1,并返回locked的原来的值。当返回值为1时,说明其他线程占用了该锁,继续循环等待;当返回值为0时,说明其他地 阅读全文
posted @ 2018-07-26 14:48 方田 阅读(1166) 评论(0) 推荐(0)
摘要:1. 系统调用的实现 开发程序需所有的接口在user.h中,包含两部分system call和ulib user.h中的系统接口函数在usys.S中通过汇编实现 把系统调用ID放入eax中,使用int T_SYSCALL中断 2. int 指令 int n 指令是调用n号中断的中断过程。最终效果和函 阅读全文
posted @ 2018-07-24 17:45 方田 阅读(1031) 评论(0) 推荐(0)
摘要:1. xv6.img的构建 在makefile中 使用bootasm.S和bootmain.c构建bootblock.o,使用工具objcopy把bootblock.o的.text段(该段包含程序的可执行指令)拷贝出来生成bootblock 使用perl脚本sign.pl把bootblock设置成5 阅读全文
posted @ 2018-07-20 18:30 方田 阅读(1457) 评论(0) 推荐(0)
摘要:我们使用Qemu在Ubuntu下运行 1. 安装Qemu 执行 qemu-system-i386 ,如果弹出Qemu界面说明安装成功了 2. 编译xv6 下载代码(一定要使用git下载,不要自己手动去下载,否则可能下载的版本不对,编译不过) 编译 3. 运行 make qemu 阅读全文
posted @ 2018-07-19 17:46 方田 阅读(1072) 评论(0) 推荐(0)