Linux用户空间的启动(一)

来源:互联网 发布:淘宝手机一屏尺寸多少 编辑:程序博客网 时间:2024/06/07 23:50

Linux用户空间大致按照如下顺序启动的:
1. init
2. 基础的底层服务,如udevd和syslogd
3. 网络配置
4. 中高层服务,如cron和打印服务
5. 登录提示符,GUI和其它应用程序

一 什么是init?
init是Linux上的一个用户空间的程序,在/sbin目录下可以找到它。init主要负责启动和终止系统中的基础服务进程。
目前init主要有以下三种实现版本:
1. System V init:老版本的顺序init,在CentOS5上见到了它,如果看过鸟哥的书,应该知道这个东西。
2. systemd:目前应用较为广泛的新init,CentOS7和新版本的Fedora使用的都是这种init。
3. Upstart:Ubuntu系统使用的init,目前我使用的Ubuntu 14.04就是使用的Upstart,不过Ubuntu现在也开始计划转向systemd了。
System V init依赖于一个特定的启动顺序,每次只能启动一个任务。这种启动方式依赖关系比较简单,但是性能却比较差,因为一次只能启动一个任务,不能发挥并行的优势。另外一个问题就是用户只能执行启动顺序规定的一系列服务,如果要启动一个新服务,System V init没有一个标准方法来规定什么时候启动新服务,如何启动新服务。
而systemd和Upstart的目标是解决性能方面的问题,允许多个服务并行启动。

systemd是面向目标的:定义一个要实现的目标以及它的依赖条件,systemd负责在满足所有条件时执行目标。systemd还会将目标推迟到有必要时再启动。Upstart则是面向消息的:它能够接受消息,根据接收到的消息来运行任务,并且产生更多的消息,然后运行更多的任务。在传统的init程序当中,服务守护进程是通过脚本文件启动的。一个脚本文件负责启动一个守护进程,守护程序脱离脚本自己运行。如果我们要获得守护进行的信息,需要用其它的定制方法,比如使用ps来获取守护进程的PID。Upstart和systemd则一开始就将守护进程纳入管理系统,提供正在运行的程序的信息和权限。新的init系统不是基于脚本文件,所以配置起来比较简单。systemd和Upstart都提供一定程序的即时服务,即根据需要启动服务,而不是像system V init一样在开始启动所有需要的服务。

二 System V 运行级别
一般的说法,运行级别就是操作系统正在运行的功能级别。在Linux系统中,有一组进程自始至终都在运行(如crond和udevd)。System V init中把这种状态称为运行级别,使用数字0-6来表示。系统几乎全程运行在单个运行级别当中,但是当关闭系统的时候,init就会切换到另外一个运行级别,有序地终止系统服务,并通知内核停止。
受用who -r可以查看当前运行级别。
在采用Upstart的Ubuntu中,我的运行结果是:
$who -r

Run-level 2 2016-03-29 22:44
而在采用systemd的CentOS中,运行结果是:
$who -r

Run-level 5 2016-04-02 14:50
可以看到两者的运行级别是不一样的,第一台机器是运行在多用户模式,而第二台是运行在图形化模式。
运行级别有几个作用,最重要的是区分启动、关闭、单用户模式和控制台模式等这些不同的状态。一般来说。7个运行级别如下:

0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。
1 单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
2 多用户模式,没有NFS网络支持。
3 完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。
4 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 图形化模式,登陆后进入图形GUI模式,X Window系统。
6 重启模式,默认运行级别不能设为6,否则不能正常启动。运行init 6机器就会重启。

运行级别应该是众所周知的东西,但是运行级别现在已经变成了过时的特性。systemd和Upstart虽然都支持运行级别,但是已经把它作为过时的特性。

查看init的类型可以通过man init(0)来确认,一般就在第一行。

0 0
原创粉丝点击