Linux启动流程

Linux启动流程

ID:37150739

大小:90.00 KB

页数:12页

时间:2019-05-19

Linux启动流程_第1页
Linux启动流程_第2页
Linux启动流程_第3页
Linux启动流程_第4页
Linux启动流程_第5页
资源描述:

《Linux启动流程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux的启动流程作者:阮一峰半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个部分与程序员的关系更密切。我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统。下面的内容针对的是Debian发行版,因为

2、我对其他发行版不够熟悉。第一步、加载内核操作系统接管硬件以后,首先读入/boot目录下的内核文件。以我的电脑为例,/boot目录下面大概是这样一些文件:  $ls/boot    config-3.2.0-3-amd64  config-3.2.0-4-amd64  grub  initrd.img-3.2.0-3-amd64  initrd.img-3.2.0-4-amd64  System.map-3.2.0-3-amd64  System.map-3.2.0-4-amd64  vmlinuz-3.2.0-3-amd

3、64  vmlinuz-3.2.0-4-amd64  第二步、启动初始化进程内核文件加载以后,就开始运行第一个程序/sbin/init,它的作用是初始化系统环境。由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。第三步、确定运行级别许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。init进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Ap

4、ache,用作桌面就不需要。Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。运行级别2-5,各个发行版不太一样,对于Debian来说,都是同样的多用户模式(也就是正常模式)。init进程首先读取文件/etc/inittab,它是运行级别的设置文件。如果你打开它,可以看到第一行是这样的:  id:2:initdefault:

5、  initdefault的值是2,表明系统启动时的运行级别为2。如果需要指定其他级别,可以手动修改这个值。那么,运行级别2有些什么程序呢,系统怎么知道每个级别应该加载哪些程序呢?......回答是每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序。  /etc/rc0.d  /etc/rc1.d  /etc/rc2.d  /etc/rc3.d  /etc/rc4.d  /etc/rc5.d  /etc/rc6.d  上面目录名中的"rc",表示runcommand(运行程序),最后的d表示direc

6、tory(目录)。下面让我们看看/etc/rc2.d目录中到底指定了哪些程序。  $ls/etc/rc2.d    README  S01motd  S13rpcbind  S14nfs-common  S16binfmt-support  S16rsyslog  S16sudo  S17apache2  S18acpid  ...  可以看到,除了第一个文件README以外,其他文件名都是"字母S+两位数字+程序名"的形式。字母S表示Start,也就是启动的意思(启动脚本的运行参数为start),如果这个位置是字母K,

7、就代表Kill(关闭),即如果从其他运行级别切换过来,需要关闭的程序(启动脚本的运行参数为stop)。后面的两位数字表示处理顺序,数字越小越早处理,所以第一个启动的程序是motd,然后是rpcbing、nfs......数字相同时,则按照程序名的字母顺序启动,所以rsyslog会先于sudo启动。这个目录里的所有文件(除了README),就是启动时要加载的程序。如果想增加或删除某些程序,不建议手动修改/etc/rcN.d目录,最好是用一些专门命令进行管理(参考这里和这里)。第四步、加载开机启动程序前面提到,七种预设的"运

8、行级别"各自有一个目录,存放需要开机启动的程序。不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?Linux的解决办法,就是七个/etc/rcN.d目录里列出的程序,都设为链接文件,指向另外一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。