Linux0.11从开机到准备执行main函数的启动学习

Posted tuhooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux0.11从开机到准备执行main函数的启动学习相关的知识,希望对你有一定的参考价值。

最近一直在看操作系统以及内核设计的东西,不确定自己有能力会参与到类似的开发之中,但是争取能自己改造这内核玩一下,然后按照Linux From Scratch那样的把改造后的系统编译运行就心满意足了。正在看的书是《Linux内核设计的艺术》之"图解Linux操作系统架构设计与实现原理",自己看的时候有种恍然大明白的感觉。这本书的特色是图很丰富,看着很爽的感觉,内存地址都画得非常清楚,但是我怕自己只看不动手分析的话,看了很容易遗忘。这里写这篇博客希望能够边看,边学,边分析,边领悟,最好能够提问。


 

从开机到main函数的执行分为三步完成,其目的是实现从启动盘加载操作系统程序,完成执行main函数所需的准备工作。

  1. 第一步,启动BIOS,准备实模式下的中断向量表中断服务程序
  2. 第二步,从启动盘加载操作系统程序到内存,加载操作系统程序的工作就是利用第一步准备的中断服务程序实现的;
  3. 第三步,为执行32位的main函数做过渡工作。

启动盘

如果你有装过操作系统或者玩过Bios设置的话,会设置操作系统启动的优先顺序,类似下图这样的:

技术分享图片

这里我们可以选择多种启动方式,比如,网络,硬盘,软盘或者U盘,当然现在最多的还是从硬盘启动,那么你所设置的第一个就是启动盘。

main函数

main函数这里理解为程序的入口,这里要拿出来说是因为,首先不要想到Linux多么庞大,多么复杂,它就是一个从main函数(不一定叫main)开始执行的程序而已。

BIOS

"基本输入输出系统"(Basic Input/Output System),简称为BIOS,你可以把这里理解为一个提供了很多基本操作的工具程序,util。假设把操作系统比喻为飞奔在高速公路的小汽车,那么BIOS可以看成是把小汽车带向高速公路的辅路。

实模式,32位(保护模式)

实模式和保护模式是intel cpu所提供的功能。

实模式(Real Mode)是Intel 80286和之后的80x86兼容CPU的操作模式。实模式是一个20位的存储器地址空间(2^20=1048576,即1MB的存储器可被寻址),可以直接通过软件的方式访问BIOS以及周边硬件,没有硬件支持的分页机制和实时多任务的概念。从80286开始,所有的80x86 CPU的开机状态都是实模式;8086等早期的CPU只有一种操作模式,类似于实模式。

下面的来自百度百科,发现保护模式和实模式都可以单独写一篇了。

保护模式,是一种80286系列和之后的x86兼容CPU操作模式。保护模式有一些新的特色,设计用来增强多工和系统稳定度,像是内存保护,分页系统,以及硬件支援的虚拟内存。大部分的现今 x86 操作系统都在保护模式下运行,包含 Linux、FreeBSD、以及 微软 Windows 2.0 和之后版本。另外一种286和其之后CPU的运行模式是实模式,一种向前兼容且关闭了保护模式这些特性的CPU运行模式。用来让新的芯片可以运行旧的软件。依照设计的规格,所有的x86 CPU都是在实模式下开机,来确保传统操作系统的向前兼容性。在任何保护模式的特性可用前,他们必须要由某些程序手动地切换到保护模式。在现今的计算机,这种切换通常是由操作系统在开机时候必须完成的第一件任务的一个。它也可能当CPU在保护模式下运行时,使用虚拟86模式来运行设计运行在实模式下的代码。

实模式下CPU的寻址范围为0至0xFFFFF,1MB寻址空间,需要0~19号共20根地址线。进入保护模式后,将使用32位寻址模式,即采用32根地址线进行寻址,第21根至第32根地址的选通,将意味着寻址模式的切换。只能补充这么多,再搞就要跑题了。

 

以上是关于Linux0.11从开机到准备执行main函数的启动学习的主要内容,如果未能解决你的问题,请参考以下文章

linux0.11的0号进程详解

Linux0.11内核--加载二进制文件之1.copy_strings

Linux0.11内核--进程调度分析之1.初始化

Linux 0.11 - 管理内存前先划分出三个边界值-12

Linux 0.11-进入main函数前最后一跃-10

linux0.11的进程1的创建和执行