linux启动过程

**************************************************************************************************************************************************************************************

1,开始加电

2,BIOS自检,获取机器里的设备信息。BIOS分两块,一是post程序二是runtime服务。post用来自动检测设备状况是否可用,并做初始化。自检速度主要取决于内存大小。一般是检测物理设备,cpu、内存、设备。runtime(BIOS中断服务)则一直保持挂起,直到系统启动完成。BIOS读取并执行位于第0柱面0磁头1扇区MBR(主引导扇区),控制权交给MBR。至此,BIOS的工作完成。

2.5,MBR只有512字节,又分为三部分:主引导程序(grub)、硬盘分区表、硬盘标识符。

  grub引导过程:一般而言,grub引导过程分为两个阶段:stage1和stage2。

    stage1:BIOS将stage1(/stage1/start.S)载入内存0x7c00处执行,任务很单纯,就是读取和执          行/stage2/start.S。stage1没有直接读取文件系统的能力。

    stage1.5:当把/stage1.5/start.S载入内存后,grup才有访问文件系统的能力。再从/boot/grup           目录下加载stage2.

3,加载内核程序(kernel):stage2加载后,读取grub.conf文件,加载系统镜像。控制权交给内核。

  关于linux设备驱动加载:除内核自带一些系统基本的设备驱动外,另外部分则以模块的形式放在     initrd中,此时也会启用。

4,执行/subin/init程序,创建getty进程,调用login进程,加载用户空间。init作为linux所有进程的鼻祖,

5,执行/etc/inttab,该文件记录着系统默认启动级别,且该文件是所有用户共有的。

    0:关机

    1:单用户模式

    2:多用户无网卡模式

    3:多用户命令行模式

    4:暂没使用

    5:多用户图形界面

    6:重启

    若要永久修改启动级别,可以在这个文件上进行更改。暂时性更改启动级别:init number

    runlevle可查看当前和上一次启动级别。

6:执行/etc/rc.d/rc.sysinit文件,该文件主要是加载字符、块设备驱动。该文件所有用户共有

7:执行rcN.d,启用相应的服务和配置。读取该目录下的/etc/rc.d.rc.local

-------------------------------------------------------------------------------------------shell启动过程

1,执行并创建了init

2,init创建getty,创建连接终端号    

3,getty后创建login,用户可以输入用户账号密码,登陆shell

4,启用bash程序

5,执行/etc/profile(给shell设置环境变量,所有用户通用)

6,在用户目录下查找并执行.bash.profile,设置用户给shell配置的私有环境变量

  如果没有找到这个文件,则依次查找.bash_login和.profile   

 (注:上述三个文件开头有个‘.’号,在该目录下ls是无法显示出的,只有ls -A才可以)

7,执行用户所属的.bashrc,如果要修改用户私有的shell环境变量,则应该在这个文件下修改。

**************************************************************************************************************************************************************************************

你可能感兴趣的:(linux,系统启动)