2013年,头一次听说除了windows系统居然还有其它系统,上网小小的问了下度娘,发现居然已经有在个人电脑上应用的linux系统了,于是很是兴奋的认为,说不定它可以给更多的电脑用户带来不同的体验,虽不能百家争鸣,但总比得上微软一家独大。
可随着接触,发现越来越不是那么一回事,尽管许多的技术大牛嘲讽windows太低端,可linux无论作为电子商务还是个人电脑都有其不足。更多的是大部分的游戏厂商还是愿意在windows下运行。
我想学学看,至少也能多门技术吧。废话不多写点有用的东西吧。
关于系统启动流程.
先来个简单的1.BIOS自检。2.MBR:Boot Code引导代码。3.执行引导程序 GRUB。4.加载内核。5.执行init。6.runlevel。
首先要明白,操作系统,windows也罢,linux也罢,它都只是软件,那么计算机是怎么进行这款软件的启动呢?
计算机在启动的一瞬间,内存(RAM)是没有任何程序的,CPU的逻辑电路也被设计为只能运行在内存中的程序,熟悉一些的朋友得说了,通过BISO启动
1.BISO启动原理
正常运行一个程序都得操作相应指令,如双击,或敲命令,从底层上来说就是通过操作调用其它命令如ls 就是调用/bin目录下的执行代码,但在刚加电时又是谁调用BISO呢?
0xFFFF0!!!
既然软件无法满足,那只能靠硬件了。intel将所有的80X86系列的CPU,包括X新型的CPU硬件都设计为加电瞬间强行将CS的值置为0xF000,IP的值置为0xFFF0,这样CS:IP就指向了0xFFFF0(CS为代码段寄存器,IP为指令指针寄存器)BIOS程序的第一条指令就设计在这个位置。现在BIOS开始启动。
2.之后就是通过BIOS自检,硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。(有时会跳出F2,F12等选项就是因为电池没电信息丢失重新输入信息),依次启动设备吧。主要是硬盘,读取硬盘的第一个扇区(MBR,512字节)执行其中前446字节(引导代码)。
3.grub
(1)先加载/boot/grub/stage1(stage1,512字节,为MBR的镜像当MBR挂了,可从stage1写回去)
(2)接下来执行**_stage1_5,**为文件系统,即添加对某种文件系统的支持。
(3)加载/boot/grub/stage2;stage2对启动系统起关键作用,该部分提供了GRUB启动菜单和交互式的GRUB的shell。启动菜单在启动时候通过/boot/grub/grub.conf文件所定义的内容生成。在启动菜单中选择了kernel之后,GRUB会负责解压和装载kernelimage并且将initrd装载到内存中。最后GRUB初始化kernel启动代码。完成之后后续的引导权被移交给kernel。看看/boot目录下就能明白许多。再看看/boot/grub/grub.conf
4.kernel
(1)linux内核保存在/boot/vmlinuz-2.6.32-279.el6.i686此为精简内核。
(2)linux将不常用的驱动,功能编译成为模块打包文件/boot/initramfs-2.6.32-279.el6.i686.img在需要时加载。
(3)用dmesg命令查看本次启动时内核启动信息。也可通过/var/log/dmesg查看
4.init
init是linux系统中运行的第一个进程
调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂在文件系统,根据运行级别启动相应服务。
linux运行级别:
-0 关机
-1 单用户模式
-2 不带网络的多用户模式
-3 多用户模式
-4 未使用
-5 X11图形化模式
-6 重新启动
init配置文件/etc/inittab通过它改变运行级别
/etc/init/下不同功能的配置文件。
每个级别对应的启动服务保存在/etc/rc.d/rc[0123456].d中
可用init 5切换运行级别5(也可用startx)
5.si::sysinit:/etc/rc.d/rc.sysinit
运维小屌丝的初程关于RedHat启动流程,布布扣,bubuko.com