在xv6启动的过程中,0号核在main函数里会执行userinit函数,标记initcode处的数据会复制到第一个用户进程的内存空间。标记initcode的数字是一段代码,它对应的内容在user/initcode.S,是要把文件init的内容放到内存里以用户态去执行。文件init编译自user/init.c。
操作系统处在硬件和用户程序之间,所以它是对硬件的抽象。前一篇分析的printf函数是对uart的抽象,地址映射是对内存的抽象。本篇准备分析启动过程的其它部分,这些也都是对某种硬件的抽象。
这里所指的xv6是指它的riscv版,而不是它的x86版。我用的操作系统是Ubuntu 18.04。
2019-01-01
在1月1日立下今年的flag。自省,健身,背单词,陪家人,写一本书,实现一个CPU,读两本书。
2019-01-02
“如果方向错了,走的越远,只是错的越多。”我以为这是自己发现的,没想到老美早已认识到这一点。“Speed gets you nowhere if you’re headed the wrong way”。
2019-01-09
记得某年去义井亲戚家,看到山的对面,有人放风筝超过了山顶。
做人是面向对象,做事是面向过程。
本文是对《计算机组成与设计》第三章 “计算机的算术运算” 的理解。以RISC-V指令集为例。
2018-12-14
感觉在编程过程中交织着两种截然不同的东西,一是这个代码是做什么的,二是这个代码为什么能做到这个功能。
本文是对《计算机组成与设计》第二章 “指令:计算机的语言” 的理解。以RISC-V指令集为例。