LINUX,因为我们知道是一个内核,而不是一个操作系统,附带几个分布,如:Debian的 ,Fedora的 ,Ubuntu的等等。 还有很多。 由马克·沙特尔沃思开发的Ubuntu操作系统是俗称由许多广泛使用。 此外,免费和开源其新版本是每年发布的,由成千上万的开发者贡献其发展贡献。 但是,它如何运作? 什么是所有过程,事件列表使它工作,这些过程的意义是什么?
Ubuntu启动过程洞察
本文将带你有点深入是非常有趣的,将有助于新手有其运作的完整理解的Ubuntu操作系统的内部。
系统布局
Linux有它运作的过程中,每一个系统服务,包括电源管理,开机,系统崩溃的处理是有一个配置文件中的“ 在 / etc /初始化 ”的过程,描述事件,并会执行和相应的事件其中,将停止其执行,以它也认为,描述了系统的“ 在 / etc /”目录下的运行时行为的其他配置文件一起,从而使系统中的事件驱动的。
如果有事件生成,那么有人应该在那里抓住他们并执行他们? 很明显嘛,控制器是存在的进程ID为1即初始化所有进程的父我们的主要过程。 这是从系统启动开始,从不停止的过程。 此进程只有在系统关闭时才会死机,因为没有进程是init的父进程。
6.10之前,早期版本的Ubuntu包含了用于在每次启动和系统关机“/etc/rcx.d”目录下运行脚本旧式的sysvinit。 但是,在这之后的Upstart系统取代老式sysinit的,但依然提供了向下兼容的。
最新的Ubuntu版本有这个Upstart系统,但由于从Ubuntu 6.10及其演化它已经多次修改当前的版本是1.13.2为4日2014年9月最新的Upstart系统有2个初始化过程,一个是系统进程以及其他管理当前登录的用户会话,并只直到用户登录,也称为X-会话初始化存在。
整个系统已经被分解为一个层次结构,包括系统上电到断电的祖先 - 子关系。
例如 :无论在init进程之间的一个小层次关系是:系统初始化(1) - >显示管理器(内核空间) - >显示管理器(用户空间) - >用户的init(或x会话初始化)。
对于过程中的配置文件被系统初始化驻留在“ 的 / etc /初始化 ”,并为那些会话管理的init驻留在“ 的 / usr /共享/Upstart ”(按照当前的Upstart以上版本1.12)进行管理,这些配置文件是关键到许多发现的关于进程的秘密,如本文所述。
深入层次结构
Ubuntu认可两种类型的进程:
- 短期工作(或工作和模具工作)。
- 长期工作(或留任工作)。
在系统上进行的层次结构是由于进程之间的依赖关系,我们可以通过查看其配置文件来理解。 让我们首先从使系统启动的过程之间的一个简单的层次关系开始,并且了解每个过程的意义。
引导层次
初始化是启动对系统电源的第一道工序和下开展的工作,并保持工作被列为它永远不会死亡,只有在init被杀时间是在断电即init仅模具及每个会话,而且也曾经正在关机。 在上电时,init会在系统上生成第一个事件,即启动事件。 在“ 在/ etc /初始化 ”每个配置文件有定义导致进程启动和停止事件两行。 这些线如下图所示:
Linux引导层次结构
这是一个过程的故障安全-X的配置文件,这些开始和停止的条件描述在该过程将启动事件。 在通过init进程生成启动事件时,那些具有启动条件的启动的进程是并行执行的,这只定义了层次结构,启动时执行的所有进程都是init的子进程。
启动时启动的进程列在下面,这些都是工作和模块作业:
1 主机名 -这是一个过程,只是告诉它的主机名在/ etc /主机文件中定义的系统。
2 KMOD -加载内核模块,即所有从/ etc / modules文件的驱动程序。
3 mountall将 -这个过程会产生大量的活动,并主要负责mouning在引导所有的文件系统,包括本地文件系统和远程文件系统。
/ proc文件也安装由这个非常进程,并在所有的安装工作由它产生的最后一个事件是文件系统事件进一步使层次进一步进行。
4 普利茅斯 -这个过程上执行开始mountall将与负责表示所看到的系统启动黑屏表示像下面的内容:
Linux启动过程
5 普利茅斯就绪 -表示普利茅斯起来。
以下是主要过程,其他的也运行在启动包括像的udev-后备图形等即将回引导层次,概括地说接下来的事件和过程都在序列:
1,与代启动事件的初始化一起。
2。mountall将挂载文件系统,普利茅斯(以出发沿mountall将)显示开机画面,并KMOD加载内核模块。
3。通过mountall将导致dbus到运行生成的本地文件系统事件。 (Dbus是系统范围的消息总线,它创建一个套接字,允许其他进程通过向这个套接字发送消息来相互通信,接收者监听这个套接字上的消息,并过滤那些用于它的消息)。
4,与开始的dbus而引起的也运行在本地文件系统事件的过程中网络静态网络事件以及本地文件系统使网络管理员才能运行。
5。通过mountall将生成的虚拟文件系统事件导致udev运行。 (udev是linux的设备管理器,用于管理设备的热插拔,并负责在/ dev目录中创建文件并管理它们。)udev在/ dev目录中为ram,rom等创建文件,mountall已完成虚拟安装-filesystems并已生成事件虚拟文件系统表示/ dev目录的挂载。
6。udev的原因Upstart-的udev桥来运行意味着本地网络是否正常。 然后在mountall完成最后一个文件系统的安装并生成文件系统事件后。
7,与静态的网络事件以及文件系统事件导致RC-sysinit的作业运行。 这里,来自旧的sysvinit和upstart之间的向后兼容性...
9,RC-SYSINIT运行使用telinit命令告诉系统运行级别。
10,得到的运行级别后,在init执行以'S'或'K'开头的脚本(启动有“S”在他们的名字开始工作,在他们的名字的开头杀那些有“K”)的目录/etc/rcX.d(其中“x”是当前的运行级别)。
这个小事件集会导致系统每次启动时启动。 并且,这个事件触发进程是负责创建层次结构的唯一的事情。
现在,上面的另一个插件是事件的原因。 哪个进程导致哪个事件也在进程的同一个配置文件中指定,如下面这些行所示:
Linux进程事件
上面是一个进程mountall的配置文件的一部分。 这显示它发出的事件。 事件的名称一个后续单词“ 事件 ”。 事件可以是如上所述的配置文件中定义的一个,也可以是前缀“开始”,“开始”,“停止”或“停止”的进程名称。
所以,这里我们定义两个术语:
- 事件生成器 :一个有行“发出XXX”在它的配置文件,其中xxx是事件其所拥有或生成的名称。
- 事件的守望者 :一个拥有它的启动或停止状态为XXX或启动或停止时生成的事件生成器之一。
因此,层次结构遵循,因此进程之间的依赖:
Event generator (parent) -> Event catcher (child)
向层次结构添加复杂性
截至目前,你一定已经明白如何进程之间的父子依赖关系的层次结构是通过一个简单的引导机制,制定了由事件触发机制。
现在,这个层次结构从来不是一对一关系,对于一个孩子只有一个父对象。 在此层次结构中,我们可能有一个或多个父代为一个孩子或一个进程是多个子代的父代。 如何实现? 答案在于配置文件本身。
Linux进程
这些生产线从工艺考虑-网络和这里的条件开始似乎有点太复杂地段组成的事件即- 本地文件系统 ,udevtrigger, 容器 , 运行级别 , 网络化。
本地文件系统由mountall发出,udevtrigger是作业的名称,容器事件由container-detect发出,runlevel事件由rc-sysinit发出,而网络又是一个作业。
因此,在层次结构中,进程网络是mountall,udevtrigger和container-detect的子进程,因为它不能继续其运行(进程的功能是在进程的配置文件中的脚本或exec部分下定义的所有行)直到上述过程产生他们的事件。
同样,如果一个进程生成的事件被许多缓存,我们可以有一个进程作为许多进程的父进程。
区分作业类型
正如前面的定义,我们可以有短暂的(或工作和模具作业)或长住(或停留和工作 )工作,但如何区分它们?
同时具有“ 开始 ”和“ 停止 ”在其配置文件规定的条件,并有一个词' 任务 '在其配置文件中的工作是工作和模具作业上生成的事件开始,执行他们的脚本或者exec (当执行时,它们阻止引起它们的事件),然后释放它们阻塞的那些事件。
没有“ 停止 ”在他们的配置文件中的条件,这些工作是长期居住或停留和工作职位,他们不会死。 现在,留在工作的工作可以进一步分类为:
- 那些没有respawn条件,可以被root用户杀死。
- 那些在他们的配置文件中有respawn条件的人,所以他们在被杀死后重新启动,除非他们的工作已经完成。
结论
因此,在LINUX每个过程是依赖于一些,并具有一些依赖于它的流程和该关系是许多许多,并且与该过程的其他细节沿Upstart系统指定。