全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
按照课程的建议,先去读了一下xv6 book的附录,感觉还是有一些收获的。这中间去扫盲增补各种概念的过程就已经收获不少。
1. 这里介绍了一下计算机的一个基本的逻辑模型,其实也可以作为我们思考计算机底层问题的一个基本思维模型。
2. 寄存器的本质其实也是存储,只是读取的速度会快很多。
3. x86的指令集是Intel发明的,但是现在已经成了一定的标准。
4. 在现代计算机中,32bit的机器寄存器会有32bit、16bit以及8bit几种访问模式。不过,如果不以32bit的模式进行访问可能访问的范围有限制,比如32bit中的高16bit。
1. 这里看到了浮点寄存器的介绍,有点吃惊。浮点寄存器的设计居然是80bit的,为什么会有这样的设计有点不理解。按照现在我接触到的MCU,即便是浮点一般来说也是32bit,或者64bit,这里为什么会出来一个80bit呢?
2. 经过之前对线性地址等概念的了解,顺带对全局描述表以及局部描述表等有了一定的了解,这里的内容看着顺利了很多。
3. 这里顺便了解了一下三级缓存的一个简单介绍,也算是科普性的了解。而通过单位的计算转换可以看得出来,即使是三级缓存其实也是比内存快很多的。
1. 有了之前对线性地址的知识补充,上面的这个地址转换过程图理解起来非常容易了。
2. BIOS的主要任务是,先进行8088处理器的模拟,之后切换到现代计算机的模式。然后加载内核并把控制权转交给内核。
3. 所谓的实模式其实就是对8088处理器的模拟。
4. 对于这本书里面的信息来说,逻辑地址在很多时候跟线性地址其实是等价的。
5. 这里介绍了xv6的BootLoader其实是进行了寄存器的初始化的,这部分内容之前看代码的时候其实是注意到过的。
1. 处理器发展进化的过程中,分页模式这样的功能是从286开始出现的,而这时候的段寄存器的使用也变得复杂了。
2. 关于描述表的加载生效,这部分的描述感觉跟前面刚刚看到的线性地址资料中的段寄存器缓存寄存器的行为一致。
1. 失败之后的端口操作是没有意义的,开始觉得这样设计有点没头脑。后面看了一下,其实也是有一定的考虑的。由于这样的端口没有跟任何硬件冲突,反倒方便在模拟器中用于关联仿真输出提示。
2. 在系统启动的过程中,BootLoader在从磁盘扇区开始的位置寻找elf文件。这样的一些行为,在之前的代码分析中也已经了解到了。
3. 这里再次提到了objdump的工具使用,这个用法之前看其他资料的时候已经整理过了。这里算是复习一下吧!
1. 现实应用中的引导程序会非常复杂,可能会涉及到很多外部的设备或者网络。或许,这也是uboot这样的产品出现的原因。
2. 关于第一个练习题,我个人的理解可能比较直接。其实,软件的行为只是多读了一部分磁盘信息而已。多读取的信息并没有用到,应该也不会对系统产生什么影响。
3. 第二个问题有些没有弄明白,很大的一个原因可能是现在对elf以及存储映射等还没有一个深入的理解认识吧!
4. 第三个问题,我觉得首先,内核的处理涉及到很多权限的设置。而这个过程中,有着比较严格的地址映射关系。而malloc的使用,其实是heap的一个动态分配,满足不了这样的诉求。即便是可以多分配一些,那么在处理的复杂度上也不如指定的存储空间直接干脆。