IA-32的启动过程—-翻译The boot process on IA-32

翻译这篇文章,文章意思很简单。本文主要讲述关于L4的。

http://www.geocities.ws/munkee_chuff/l4/boot_process.html

 本文主要叙述在IA-32(PC)上一个OS的启动进程,以及详细描述其内存模型。

首先当PC启动时,它实在实模式。BIOS首先察看磁盘的启动扇区(前512字节,也叫MBR),接着便加载存储在这的程序。我一般用grub

Boot loader – GRUB

MBR中放着的是GRUB的stage1,它主要是引导加载磁盘上的stage1.5和stage2。stage1.5提供磁盘访问,所以不同的文件系统会有不同的stage1.5。

如下图所示,GRUB把东西都存储在内存的前640KB内。想知道这部分内存里面都有什么,可以看这里 memory map。在你机器上地址0×00100000及以上部分是你的可用空间。

一旦GRUB启动且3个stage文件也在内存里,它将从磁盘读取grub.conf(或者menu.lst)。这个文件规定了那个二进制程序将会被引导以及规定它们的命令行参数(如果有的话).

一旦一个条目(假设是L4)被选中的话,GRUB将加载必要的文件进内存且运行grub.conf中标记为kernel的程序。在我们的事例中,kickstartkernelia32-kernelsigma0和一个roottask server被标记为模块。关于更多GRUB的介绍,可以参见此文。

Kickstart

kickstart 镜像被链接到物理地址0×00800000处。这个镜像使用从GRUB得到的信息初始化ia32-kernel模块,例如内存空间,sigma0root task的地址。kickstart也把ia32-kernelsigma0 和root task所使用的内存映射为已被使用。

kickstart从程序需要以来ia32-kernel, sigma0 和root task server,所以GRUB加载应该有顺序,否则将崩溃。

kickstart也加载ELF,只是基本地读取由GRUB已经加载的ELF文件。进行加载操作的代码实际上是复制程序映像到由GRUB之前加载该模块的内存区域。之所以这么做,是为了kickstart不必为了存储而重新分配更多的内存。

IA-32的启动过程—-翻译The boot process on IA-32_第1张图片

The L4 microkernel

内核映像被链接到物理地址0×00100200处。

kernel把机器初始化到一个可以使用的状态,这包括

  1. 打印一条状态信息说明kernel已经启动了。
  2. 检查CPU的特性来判断kernel是否可以运行。
  3. 为kernel重新提供内存空间,墨认为16MB
  4. 初始化kernel的页表
  5. 设置kernel的内核借口页(KIP)
  6. 配置硬件中断
  7. 开始计时器
  8. 初始化映射数据库(MDB数据库)
  9. 设置SMP-如过可能的话且在kernnel的配置工具中也配置过了。
  10. 初始化和开始内核调度,。

IA-32的启动过程—-翻译The boot process on IA-32_第2张图片

Sigma0

sigma0映像被链接到物理地址0×00020000处。

sigma0进入一个无限循环,等待来是用户任务(主要是root task)或者来自内核分配内存的信息。这将一直持续到内存耗尽,关于这一点,内存管理应该有用户任务处理。.

已经说到sigma0的方式不是很稳定,因为在某些情况下内存将耗尽。对于嵌入式程序来说,这种机制是好的,因为嵌入式的内存和任务的数量是可控的。但对于想desktop OS这样的系统来说,这种机制不尽完美。

N.B: NICTA have removed Sigma0 from their most recent L4 and the L4ka people are working on a resolution to this problem.

IA-32的启动过程—-翻译The boot process on IA-32_第3张图片

The root task/server

root task映像被链接到物理地址0×00300000。

这是开始你自己设计的地方。 root task是特权任务,可以调用L4内核的系统地用。你,OS的设计者,决定你的OS对于用户的样子。你提供哦你开始和结束任务的接口,分配合销毁内存,调度任务和线程等等。

IA-32的启动过程—-翻译The boot process on IA-32_第4张图片

The L4 IA-32 memory map

在L4中,所有的地址空间看起来都一样,在顶部1GB的空间中,放的是kernel及其相关数据,在底部的3GB是用户地址空间。

  1. 3 GB – Accessible from user processes.用户进程可访问的空间
  2. 256 MB – Used to implement small address spaces.用于实现small address spaces
  3. 8 MB – Used to implement cross address space copying operations.
  4. 4 MB – Area for temporary access of physical memory.用于临时访问物理内存。
  5. 244 MB – Remaining book keeping memory.预留的内存。
  6. 512 MB – Area containing all the thread control blocks (TCB’s) mapped into virtual memory, followed by mappings for the kernel.这个区域包含所有映射到虚拟内存的thread control blocks (TCB’s),

谢谢 Espen Skoglund对此的描述。

剩下的到你了,OS的设计者,如何管理你任务地址空间的页面,在哪里退出以及保证他们不和任何其它的任务页面重合。


欢迎访问个人小站,阅读本文出处。

你可能感兴趣的:(IA-32的启动过程—-翻译The boot process on IA-32)