从零实现一个操作系统-day2

我的博客: startcraft.cn

keywords: 操作系统

今天主要是对操作系统的启动进行学习,因为都是理论的部分,这篇博客就当学习的笔记了

计算机的启动过程

BIOS

首先在按下电源键后计算机首先读取写在ROM中的BIOS(Basic Input/Output System 基本输入输出系统)

它保存着计算机最重要的基本输入输出的程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。——百度百科

然后BIOS程序会进行硬件自检,若硬件出问题发出相应的蜂鸣,自检通过后BIOS移交控制权给存储器,按照设置的存储器的启动顺序,若存储器第一个扇区的最后两个字节为0x550x550xAA0xAA则代表该存储器可以用于启动,若不是则将控制权给下一个存储器

存储器

找到可以用于启动的存储器后,机器读取第一个扇区的前446个字节(调用操作系统的机器码)然后运行启动管理器让用户选择要启动的操作系统

操作系统

控制权移交给操作系统后,操作系统的内核会被先载入内存,然后以Linux为例子会启动init进程,这是操作系统的第一个进程,pid为1,其他所有的进程都是它的后代,init进程会逐步调用系统模块直到操作系统启动完成

关于内存地址

针对32位系统cpu的寻址空间是2^32即4GB,其中包含了一些固定的地址访问固定的硬件如访问BIOS
加电后cpu的第一条指令地址是0xFFFFFFF0也就是BIOS的地址,然后BIOS就好开始执行上面描述的流程
在读取主引导记录是会将扇区的512字节读到内存的0x7C00地址,由于512字节太小,所以这512字节就用来些载入内核的代码

bootloader

上面说的载入内核的代码就是bootloader,不过本次我们不自己写bootloader,主要是因为学习的梯度吧,就直接使用县城的GRUB,然后我们的主要任务就是弄出一个能被GRUB识别的操作系统内核,所以要符合GRUB的规范——multiboot规范

今天学校的课挺多,就先到这吧,看文档去了,明天周末大干一番

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章