您的位置:首页 > 运维架构 > Linux

Linux启动过程

2010-06-04 18:05 148 查看

1


)打开
PC


电源


PC

加电后,一个特殊的硬件电路会触发
CPU


Reset

脚的逻辑值,然后一些
CPU

寄存器,如
CS


eip

等被给定一个值,接着
CPU

跳转到一个固定地址开始执行代码(
BIOS

);


2



BIOS


自检,按设置的设备启动


BIOS

对硬件进行一系列彻底的检查,如
CPU

类型、速度、缓存等,主板类型,内存速度、容量,硬盘大小、类型和工作模式,风扇速度等。
BIOS

完成自检后,查找一个可以引导的操作系统,并查看用户配置的启动设备(软盘、硬盘或者光盘启动)。发现合法的设备后(读取
CMOS

中的引导设备信息),
BIOS

就会把其第一扇区的内容(
MBR

)复制到内存中。然后跳至刚加载的地址并执行之。


3


)启动设备上安装的引导程序
LiLo



Grub




Linux

启动中,当
BIOS

发现是由硬盘引导系统后,就找到此硬盘的
MBR

,将
MBR

中保存的引导程序加载到内存中,然后将
CPU

的控制权交给
MBR

中的这段代码。
MBR

中的内容可分为三部分:
1

)真正的可执行代码,即
BootLoader

代码部分;
2

)一个
64

字节的分区表,包含四个分区记录;
3

)结束标识符(
0xAA55

),用来做
MBR

的有效性检测。
BootLoader

开始执行,它主要有
LiLo


Grub




4


)引导
Linux


内核映像


BootLoader

查找分区表中的活动分区(包含了真正分区的信息),通过这个信息找到真正的分区,然后从这个分区将
Linux

内核加载到内存,并
Initrd

文件系统到内存中。获得
CPU

控制权的内核开始执行:
1

)核心数据结构初始化
-- start_kernel()

函数,调用一系列初始化函数,完成
kernel

本身的设置,在其最后,通过调用
init

()函数,系统创建第一个核心线程,启动
init

过程;
2

)外设初始化—
init()

函数,首先调用
do_basic_setup()

完成外设及其驱动程序的加载和初始化,文件系统初始化和
root

文件系统的安装;
3


do_basic_setup()

函数返回
init()

后,
init()

打开
/dev/console

设备,重定
stdin


stdout


stderr

到控制台;
4

)最后,搜索文件系统中的
init

程序(或者由
init=

命令行参数指定的程序),并使用
execve()

系统调用

加载执行
Init

程序。到此
init()

函数结束,内核的引导部分也到此结束了。


5


)执行

Init

程序


Init

程序调用
rc.sysinit


rc

的等程序,完成系统初始化和运行服务后返回
Init


Init

程序执行的内容可以在
/etc/inittab

文件中定义。

A


Init

调用执行脚本文件
/etc/rc.d/rc.sysinit

,用来完成一些系统初始化的工作。包括:挂载进程文件系统
proc

、设定电脑名称和系统的时间、定义键盘、启用
swap

分区、检查根目录
(/)

有没有问题,并且挂载成可读可写的状态、设定系统的时间、加载一些其他的设备,如
RAID


LVM

等。当
rc.sysinit

程序执行完毕后,返回
Init

继续下一步。

B

.在
rc.sysinit

执行后,通常接下来会执行到
/etc/rc.d/rc
程序

,用来决定启用哪些服务。守护进程启动完成后,
rc

程序也就执行完了,然后又将返回
Init

继续下一步。

C

.这时,基本系统环境已经设置好了,各种守护进程也已经启动了。
Init

接下来会打开
6

个终端,以便用户登录系统。通过按
Alt+Fn(n

对应
1-6)

可以在这
6

个终端中切换。在
inittab

中的以下
6

行就是定义了
6

个终端:

1:2345:respawn:/sbin/mingetty tty1

 

2:2345:respawn:/sbin/mingetty tty2

  
3:2345:respawn:/sbin/mingetty tty3

  

4:2345:respawn:/sbin/mingetty tty4

  
5:2345:respawn:/sbin/mingetty tty5

  
6:2345:respawn:/sbin/mingetty tty6


2


3


4


5

的运行级别中都将以
respawn

方式运行
mingetty




6




Init

启动
mingetty


,打开终端供用户登录系统


Mingetty


getty

的简化,
getty

的功能一般包括:
1

)打开终端线,并设置模式;
2

)输出登录界面及提示,接受用户名的输入;
3

)以该用户名作为
login

的参数,加载
login

程序。


7


)用户成功登录,进入
shell


,完成整个启动过程。


A


Login

程序判断
getty

传来的用户名,如果是
root

,则在
/etc/securetty

中指定的
tty

列表登录,否则失败;如果不是,查看是否存在
/etc/nologin

文件,存在则终止登录过程,不存在表示可以登录。

B

.分析完用户名后,
login

搜素
/etc/passwd


/etc/shadow

来验证密码。

C

.成功登录后,检查是否需要输出上次登录信息和提示邮件,然后设置
shell


UID


GID

和相应的环境变量。

D

.一切就绪后,为用户启动
shell

,如果没有设置,则默认是
/bin/bash

,工作目录默认是“
/

”。

Julia
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: