linux+shell编程 笔记 启动关机的流程与加载程序

1、启动流程

启动时要加载核心,让核心来驱动整个硬件,然后才能执行各种程序的运行(所有的os都是这个思路)。同样的,启动流程也需要先加载核心,加载核心前,需要进行一些前期工作,才能正确地加载核心。具体步骤:

。加载BIOS的硬件信息,并获取第一个启动设备的代号;
。加载第一个启动设备的MBR的引导加载程序(如grub)的启动信息;
。加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有硬件设备;
。核心执行init程序并获取运行信息;
。init执行/etc/rc.d/rc.sysinit文件;
。启动核心的外挂模块/etc/modprobe.conf;
。init执行运行的各个批处理文件;
。init执行/etc/rc.d/rc.local文件;
。执行/bin/login程序,等待用户登录;
。登录之后开始以shell控制主机


1)引导加载程序和核心载入
!主机在启动时,首先读取BIOS,它记录了主机版的芯片集与相关的设置,如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的大小与类型、系统时间、外部总线是否启动即插即用(PnP)、各接口设备的I/O地址、CPU通信的IRQ中断等信息。
!在获得BIOS设置值后,系统会根据BIOS的数据进行加电自检(包括对CPU、640k基本内存、1M以上的扩展内存、ROM、主板、CMOS存储器、串并口、显示卡软硬盘子系统和键盘),然后初始化硬件检测。在确定可启动的设备后,开始读取启动设备的数据。
!然后主机开始尝试由存储媒体加载os,系统开始在第一台启动设备上执行启动程序,启动程序读到硬盘的过程中,第一个要读取的就是该硬盘的主引导记录(MBR),系统可以由MBR安装的引导加载程序(识别磁盘文件格式)开始执行核心识别的工作,加载系统核心。【linux的引导加载程序是可以识别windowds的核心文件的,但是windows的加载程序却不能识别linux的核心文件】
!通过引导加载程序的管理读取核心文件后,linux会将核心解压缩到主存储器中,开始测试与驱动各台外部设备。核心文件一般放在boot下,并取名为/boot/vmlinuz
。(有些系统)会建立虚拟盘,以便让某些功能可以用文件方式来读取,这就要用到initrd和linuxrc(这个先initr映像文件内)。利用引导加载程序的功能,可以在加载核心的时候,一起加载initrd的映像文件(/boot/initrd-xxxx.img),这个文件一般都会建立,linux会主动以initrd来建立虚拟盘,并且用linuxrc程序来加载模块。【在核心驱动外部硬件的工作完成后,initrd建立的虚拟盘就会被删除。】


2)第一个程序init和设置/etc/inittab
在核心加载完成后,系统就准备好了,等待程序的执行。init除了利用设置文件/etc/inittab来获取运行等级之外,还通过运行等级的设置值启动不同的服务项目。
/etc/inittab格式:[设置项目]:[level]:[init操作行为]:[程序]
运行等级1,就是但用户维护模式的环境,相当于windows系统中的安全模式,专门处理系统问题的。此外,不正常关机造成的文件系统的不一致,系统会主动进入单用户维护模式。

3)init处理系统初始化流程-/etc/rc.d/rc.sysinit
主要工作:
?获取网络环境与主机类型
    读取网络设置文件/etc/sysconfig/network,获取主机名称与默认网关等网络环境
?测试与载入内存设备/proc及USB设备/sys
?决定是否启动SELinux
    SELinux是一个安全套件,增强linux操作环境的安全性。(通过/etc/selinux/config配置文件配置使用)
?接口设备的检测与即插即用参数的测试
    根据核心在启动时检测的结果(/proc/sys/kernel/modprobe)开始进行ide/scsi/网络/音效等接口设备的检测,以及利用以加载的核心模块进行PnP设备的参数测试。【备注:在kernel里记载了很多关于本机的一些信息】
?用户自定义模块的加载
?加载核心的相关设置
    系统主动去读取/etc/sysctl.conf文件的值,使核心功能复合要求。
?设置系统时间
?设置终端控制台的字形
?设置RAID与LVM等硬盘功能
?以fsck检查磁盘文件系统
?进行磁盘配额quota的转换
?重新以可读取模式载入系统磁盘
?启动系统随机数设备(产生随机数功能)
?清楚启动过程中的临时文件
?将启动相关信息加载到/var/log/dmesg文件中
dmesg记录了启动过程中发生的一切事情;基本上rc.sysinit文件中执行的很多工作的默认设置文件,都是在/etc/sysconfig下的。


4)启动系统服务于相关启动设置文件 - /etc/rc.d/rc.n 与 /etc/sysconfig
现在要启动系统所需要的各项服务,这样主机才能提供相关的网络或主机功能。

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6  -- rc6.d

这些就是各不同运行等级放置的目录。
这里的文件都是连接文件,连接到/etc/rc.d/init.d里的shell脚本,其实就是它的复本。


5)用户自定义引导启动程序 - /etc/rc.d/rc.locale
配置属于自己的服务操作,这个是在上面所有的服务脚本运行之后运行。
不再需要制作一个shell脚本放到/etc/rc.d/init.d里,然后再连接到/etc/rc.d/rc3.d里来启动服务。只要写在/etc/rc.d/rc.locale里就可以了。人恶化想在启动时执行的工作,都可以直接写在这里。

6)根据/etc/inittab设置加载终端或X-Window界面
在完成所有的服务启动后,就是启动终端或界面来等待用户登录了。
# Run gettys in standard runlevels
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

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon  -- 这个主要是为了启动界面X Window

mingetty就是启动终端的命令,如果不要某个终端,可以注释掉。


2、启动的其它说明

1)关于模块 - /etc/modprobe.conf
这个文件就是对模块的加载设置一些参数。(具体的配置貌似蛮复杂的,得研究下了~~~~~~)

2)/etc/sysconfig/*
整个启动过程,读取服务相关配置文件都是记录在/etc/sysconfig目录下的。
authconfig:用于规范用户的身份认证,包括是否加密、加密的机制等
clock:此文件设置linux主机的时区。可以使用格林威治时间(GMT),也可以使用本地时间(local)。clock文件内的设置项目“zone”参考的时区位于/usr/share/zoneino目录下的相对路径中。
desktop:与默认的X Window的窗口管理器有关。
i18n:语系使用
keyboard&mouse:键盘和鼠标的设置

 

3、核心与核心模块

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值