OS101:操作系统启动与setup模块

本文详细介绍了操作系统启动过程中的setup模块,包括获取硬件参数、移动System模块至0地址、进入保护模式的关键步骤。在保护模式下,通过初始化GDT表实现不同寻址规则。System模块的head.s负责开启A20地址线并继续初始化工作,随后跳转到main.c进行更多初始化操作。整个流程为后续深入学习操作系统奠定了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇blog主要是承接上文,看看setup模块都做了哪些事情,同时涉及到一些System模块的内容。

Setup

这个模块主要的工作都是初始化相关的。

获取硬件参数

OS要管理硬件,如内存、显示器等。以内存为例,要管理内存,就需要知道内存到底有多少。在setup模块中,OS会获取扩展内存大小。

8086有20根地址线。所以1M以外的内存都叫扩展内存。

移动System模块

将System模块,也就是操作系统核心内容,移动到0地址处。
这也可以理解为什么cpu设计者不让bios结束时把引导扇区读到0地址,因为那样会影响实际的OS。像bootsect、setup都是用完就用处不大的模块,不该让他们在0地址处。

进入保护模式

上面提到,实模式内存不够用,要进入保护模式,进入保护模式的方法是修改cr0寄存器。

保护模式的寻址规则与实模式不一样。
在这里插入图片描述

如图,GDT表就是一个数组,我们的cs相当于数组下标,ip是段内偏移。
(IDT是中断描述符表,道理完全类似,所以放在一起说了)

而GDT表一开始是不存在的,谁来初始化GDT表呢?答案是setup模块

setup模块会初始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值