首页 > 代码库 > 《30天自制操作系统》纸娃娃操作系统以及大多数操作系统的加载原理
《30天自制操作系统》纸娃娃操作系统以及大多数操作系统的加载原理
最近在读《30天自制操作系统》这本书,在读到“从启动区加载操作系统”这一小节的时候卡住了,首先我的疑问是这样的:首先,磁盘映像文件img的0x2600这个地方存储着操作系统文件的名称(用二进制编辑器看),0x4200以后存储着操作系统的内容(执行代码),我们的启动区代码会被加载到内存的0x7c00这个位置,即0x7c00-0x7cff属于启动区代码所有,而书上说0x8000-0x81ff属于启动区,究竟哪段地址属于启动区,这是疑问一。我们的是从第二扇区将磁盘内容读取到内存,第一扇区留给启动区的,我们将第二扇区的内容加载到内存的0x8200以后的地方,那么磁盘映像文件img中0x4200对应的内存地址应该是0x8200+0x4200而不是0x8000+0x4200,相信大家第一次读这本书或者对操作系统加载原理不理解的人都会至少有这么两个疑问吧。下面就为大家详细讲解。先上图,这个图是百度百科上借鉴的,我修改了一下:
首先,机器启动,会加载磁盘第一个扇区512字节的内容,判断是否是启动程序。而我们磁盘映像文件的对应的第一扇区的汇编地址是0-0x200,即512字节,启动的时候就是读取这512字节,这个不是关键,关键的是我们是从磁盘的第二扇区开始将磁盘的内容加载到内存0x8200以后的位置,所以磁盘映像文件img中0x4200对应的内存地址是0x4200-0x0200+0x8200而不是简单的0x8000+0x4200,虽然结果一样,但是笔者却给我们不懂操作系统的学者造成了一个误区。哎,关键的地方还得自己去认真思考,坑爹,原本很简单的东西却被笔者以0x8000+0x4200一带而过让我坐在这里一动不动想了3个小时,卧槽。
《30天自制操作系统》纸娃娃操作系统以及大多数操作系统的加载原理