加电 ---> BIOS ---> MBR ---> DPT ---> PBR ---> Bootmgr ---> 系统选择界面 ---> 选择操作系统 ---> 内核加载等
1 程序员的自我修养--链接、装载与库笔记:https://blog.csdn.net/fengbingchun/article/details/102230252
写的比较好的《程序员的自我修养》的笔记。
编译分成预编译,编译,链接几个过程,每个过程做什么。obj,elf文件内容是什么。data区,堆,栈区等,内存布局堆,栈,大小端,link,各种lib库,系统调用,基本就差不多了。
2 <x86架构操作系统内核的实现>:是os的最简单实现。学习os必须学汇编
比如:进程上下文切换,即用汇编保存现场。内存用数组分配。虚拟内存+0xc00000
http://wiki.0xffffff.org/
3 自己动手写os:全是用汇编写的。它的第二版本:<Orange'S:一个操作系统的实现>
0x7c00 引导区,写上"hello world"就显示helloworld ,想必番茄花园也是这么搞的?
GDT:段的起始地址,界限,属性
保护模式。扇区1.44M=512k*80*...根据扇区80个,每个扇区512字节数
那几个寄存器必须知道如何使用
引导区--GDT---bootloader(加载内核到内存elf,跳入保护模式)
进程:进程表,进程体,GDT,TSS
定时器:根据频率计数
与第一版相比,增加了文件系统,内存os的源码,文件系统os源码就是读写扇区。读文件根据elf格式,读取各段.open调用底层函数phys_copy. 数据的传输通过调用内核中一个名为phys_copy的汇编语言过程来实现,该过程以硬件所能实现的最高速度把数据复制到用户程序或从用户程序复制出来。
大部分是汇编,然后根据板子8259提供的接口,操作中断,定时器,屏幕颜色等。
汇编也有跳转,加减等,从最开始0x7c00开始,跳到这里这些又跳到那里执行。
grub-bootloader--kernel 依次由小到大
主要参考经典书籍:《操作系统的设计与实现》将理论书变成实践书