操作系统实现(二):一级引导程序boot
本节背景计算机开机启动后,位于ROM中的BIOS即开始上电自检,这个过程BIOS会检测硬件设备是否存在问题。如果检测无误的话,将根据BIOS的启动项配置选择引导设备。 当检测到所选的引导设备的第一个扇区以被称为魔法数(0x55和0xaa)的两个字节结尾时,BIOS即认为该扇区是一个引导扇区(boot sector),则该引导设备是可引导的(bootable)。 随即BIOS将此扇区的数据复制到物理内存地址0x7c00处,随后将处理器的执行权移交给这段程序(跳转至0x7c00地址处执行),此即为第一次控制权转移。 用于引导内核启动的程序叫做引导程序(bootloader),引导程序需要完成引导扇区自启动、文件系统识别、硬件检测、处理器模式切换、页表配置等工作,并最终将控制权交给系统内核。 由于引导扇区被限制为一个扇区大小(512B),而对于现代操作系统的引导程序(需要设置显示模式、切换处理器模式及设置页表等)来说显然不够,因此将引导程序分为两段是现代操作系统开发中更常见的做法。 将引导程序分为两级后,一级引导程序boot用于寻找并加载二级引导程序进内存,并将控制权转移给二级引导程序...
操作系统实现(一):概述及前期准备
概述:首先对本系列内容将要实现的操作系统做一个简要概述: 本系列基于x86-64架构实现一个64位的类Linux操作系统。 本操作系统将分为引导层、内核层与应用层三大部分,并逐一对它们进行实现。 引导层。引导启动程序(bootloader)将使用Intel风格(基于x86-64架构)的汇编语言编写。实现引导扇区引导启动、文件系统识别、系统内核加载、内存容量检测、显示模式的检测与设置、处理器运行模式切换、页表配置等功能,进而完成系统内核运行前的准备工作。 内核层。内核层部分是操作系统的主要部分,该部分在开头将使用AT&T风格的汇编语言完成内核加载的剩余准备工作,随后即使用传统的系统编程语言C来编写内核的绝大部分。内核层将实现内存管理模块、中断/异常处理模块、进程管理模块、多核通信模块、文件系统模块、外部设备驱动等一系列功能模块,成为一个可以正常工作且功能相对完 整的系统内核。同时,本系统还将遵循POSIX规范标准,为应用层提供通用的编程接口(系统调用API)。 应用层。应用层部分将实现本系统的shell终端和一些其他基础命令。 环境:本系列要求对...
