linux启动过程

linux启动过程

先把相关的学习资料摆出来:

  1. systemv vs upstart vs systemd
  2. bios 到 boot loader
  3. 内核初始化

详细启动过程如下

  1. 首先计算机开机加电,自检硬件有没有问题
  2. 执行bios中的引导程序
  3. 加载启动盘MBR中的代码
  4. 通过MBR的信息加载磁盘的启动分区(放有/boot目录,专门用于linux系统启动)
  5. 将操作系统的内核代码加载到内存并加压缩
  6. 执行内核的各种初始化工作,如进程管理,内存管理,文件系统功能

前面的过程都偏底层,其实不必过于纠结,我也只是知道一个大概的流程。学习要考虑“投入产出比”。

  1. 启动1号进程,它是所有用户态进程的祖先。这个过程会运行一个程序文件,不同的Linux系统这个文件不同。如 /sbin/init, /etc/init ,/bin/init, /bin/sh等。只要有一个运行了就不再执行后面的启动程序。

if (ramdisk_execute_command) {
  ret = run_init_process(ramdisk_execute_command);
......
}
......
if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
  return 0;

上面是一段Linux的内核代码,我是从《趣谈Linux操作系统》专栏里拷贝出来的。

启动程序

上述的启动程序内部会执行一系列的脚本,做一些系统的初始化操作,把用户带入可操作的环境中。如启动一些系统服务,nginx,mysql等,以及登录shell,ssh进程与用户交互。

这一步骤的启动过程是可以“配置”的。不同的运行级别,会启动不同的初始化进程。
也就是**/etc/rcX.d**下的启动脚本(程序)。所以我们可以直接或间接地添加自己的脚本在系统初始化时所一些事情。

比如注明的chkconfig命令就可以间接的在rcX.d下建立一个启动脚本。

总结

一号进程启动前的过程我们只需要大致了解。对于开发人员,还是应用视角下的sbin启动的初始化工程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值