《understanding the linux kernel》笔记: 1. linux开机发生了什么?

remark:
本笔记来自《understanding the linux kernel》一书,所参考内核是linux 2.6,由于笔者能力有限,对其中内容不负任何责任。

书中这部分附在全书附录中,题目非常的 romantic
分了5个阶段:

  1. A.1. Prehistoric Age: the BIOS
  2. A.2. Ancient Age: the Boot Loader
  3. A.3. Middle Ages: the setup( ) Function
  4. A.4. Renaissance: the startup_32( ) Functions
  5. A.5. Modern Age: the start_kernel( ) Function

the BIOS

开机先执行固化在 ROM中的BIOS 程序(开机按住某个键可进入BIOS),BIOS主要干下面几件事:

  1. 执行硬件检测 POST(开机自检)
  2. 初始化硬件设备
  3. 搜索一个OS 去加载(磁盘的第一个扇区被加载(BootLoader))
  4. jump 0x7c00(BootLoader 启动)

由于历史原因,开机cpu处于实模式(real mode) 下,仅有 1M寻址空间,说以先加载bootloader,在让bootloader去做加载os的操作

bootloader

  1. 加载 kernel的第一个扇区(the first 512 bytes) -> 0x90000,setup()函数的启示地址在kernel 偏移 0x200 的地方,即 0x90200
  2. 加载剩余的内核印象 (IMAGE)到低地址 0x100000或者,0x100000 ,依赖于内核的大小
  3. jump setup

setup

The setup( ) function must initialize the hardware devices in the computer and set up the environment for the execution of the kernel program. Although the BIOS already initialized most hardware devices, Linux does not rely on it, but reinitializes the devices in its own manner to enhance portability and robustness. setup( ) performs essentially the following operations:

具体步骤很多,我简要的列举一下:

  1. 初始化和检查
  2. 开启A20(为切换的32-bit 保护模式做准备)
  3. set GDT/IDT(临时的)
  4. 切换 RM(real mode) -> PM(protected mode)
  5. jump startup_32

the startup_32( )

内核中有两个starup_32程序,第一个,就是setup跳转的那个在 arch/i386/boot/compressed/head.S
它做了这样几件事:

  1. 初始化段寄存器 (segmentation register) & 临时的栈
  2. clear eflags 寄存器
  3. 用0填充内核未初始化的数据,_data和_end 的地方,这个可见第二章 物理内存布局
  4. 调用 decompress_kernel( ) 将内核IMAGE 解压到 0x100000 的地方,(注意,不管之间的内核IMAGE放在,低地址还是高地址,这时都放在,0x100000)
  5. jump 0x100000

0x100000 出的startup_32() 在arch/i386/kernel/head.S 这个函数,主要是为 0号进程(process 0) 建立执行环境,然后跳转到 start_kernel

这里写图片描述

the start_kernel

这个函数主要是完成内核的初始化并执行1号内核线程

这里写图片描述

为了透彻理解Linux的工作机理,以及为何它在各种系统上能顺畅运行,你需要深入到内核的心脏。cPu与外部世界的所有交互活动都是由内核处理的,哪些程序会分享处理器的时间,以什么样的顺序来分享。内核不遗余力地管理有限的内存,以使数以千计的进程有效地共享系统资源。内核还精心组织数据传送,使得 cPu不再受限于慢速硬盘。 《深入理解Linux内核》第三版将引领你畅游内核中用到的最主要数据结构、算法和编程技巧。如果你的确想了解计算机内部的实现机理,那么作者透过现象探寻本质,提供了颇有价值的深入分析。本书针对具体的Intel平台,讨论了其重要特征,逐行剖析了相关的代码片段。但是,本书涵盖的内容不仅仅局限于代码的机理,还解释了Linux运作方式的理论支撑。 本书第三版涵盖Linux 2.6,从中可以看到几乎内核每个子系统都有相当大的变化,首当其冲的是内存管理和块设备部分。本书集中讨论了如下内容: 内存管理,包括文件缓冲、进程交换以及直接内存访问(DMA) 虚拟文件系统层和第二及第三扩展文件系统 进程创建及调度   信号、中断及设备驱动程序的主要接口   定时   内核中的同步   进程间通信(IPC)   程序执行   本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux 在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应要求。本书有助于你充分展现Linux系统的魅力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值