Linux init进程详解(ZT)

Linux init进程详解(Z T)发布时间: 2008-11-19 来源: 来自网络作者:匿名浏览: 265Linux init进程详解一、什么是INIT:init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。

所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。

如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二、运行级别那么,到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。

这个级别从1到6 ,具有不同的功能。

不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)# 0 - 停机(千万不能把initdef ault 设置为0 )# 1 - 单用户模式# 2 - 多用户,没有NFS# 3 - 完全多用户模式(标准的运行级)# 4 - 没有用到# 5 - X11 (xwindow)# 6 - 重新启动(千万不要把initdefault 设置为6 )这些级别在/etc/inittab 文件里指定。

这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。

在大多数的Linux 发行版本中,启动脚本都是位于/etc/rc.d/init.d中的。

这些脚本被用ln 命令连接到/etc/rc.d/rcn.d 目录。

(这里的n 就是运行级0-6) ,每个不同级别的目录都链接了Init.d中的命令的一部分。

三、运行级别的配置运行级别的配置是在/etc/inittab行内进行的,如下所示:12 : 2 : wait : / etc / init.d / rc 2第一个字段是一个任意指定的标签;第二个字段表示这一行适用于运行那个级别(这里是2);第三个字段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。

/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。

第四个字段中的命令执行设置运行级别时的一切“杂活”。

它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。

根据Linux 版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。

init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:id : 2 : initdefault :你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。

比如说,内核命令行参数的指定可通过LILO来执行。

这样一来,你就可以选择单用户模式了(即运行级别1)。

系统正在运行时,telinit命令可更改运行级别。

运行级别发生变化时,init 就会从/etc/inittab运行相应的命令。

四、/etc/inittab中的特殊配置/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。

这些特殊特性都是用第三个字段中的特殊关键字标记出来的。

比如:1. powerwait允许init在电源被切断时,关闭系统。

其前提是具有U P S和监视U P S并通知init电源已被切断的软件。

2. ctrlaltdel允许init在用户于控制台键盘上按下C t r l A l t D e l组合键时,重新启动系统。

注意,如果该系统放在一个公共场所,系统管理员可将C t r l A l t D e l组合键配置为别的行为,比如忽略等。

3. sysinit系统启动时准备运行的命令。

比如说,这个命令将清除/tmp。

上面列出的特殊关键字尚不完整。

其他的关键字及其使用详情,可参考你的inittab手册页。

五、在单用户模式下引导一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。

单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。

一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。

内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。

内核同时也为init指定命令行,init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。

有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。

如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。

这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。

文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。

由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。

否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。

不同的运行级有不同的用处,也应该根据自己的不同情形来设置。

例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。

在启动后的lilo 提示符下输入:init=/bin/sh rw 使机器进入运行级1 ,并把root 文件系统挂为读写。

他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。

运行级别的配置是在/etc/inittab行内进行的,如下所示:12 : 2 : wait : / etc / init.d / rc 2第一个字段是一个任意指定的标签;第二个字段表示这一行适用于运行那个级别(这里是2);第三个字段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。

/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。

第四个字段中的命令执行设置运行级别时的一切“杂活”。

它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。

根据Linux 版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。

init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:id : 2 : initdefault :你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。

比如说,内核命令行参数的指定可通过LILO来执行。

这样一来,你就可以选择单用户模式了(即运行级别1)。

系统正在运行时,telinit命令可更改运行级别。

运行级别发生变化时,init 就会从/etc/inittab运行相应的命令。

四、/etc/inittab中的特殊配置/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。

这些特殊特性都是用第三个字段中的特殊关键字标记出来的。

比如:1. powerwait允许init在电源被切断时,关闭系统。

其前提是具有U P S和监视U P S并通知init电源已被切断的软件。

2. ctrlaltdel允许init在用户于控制台键盘上按下C t r l A l t D e l组合键时,重新启动系统。

注意,如果该系统放在一个公共场所,系统管理员可将C t r l A l t D e l组合键配置为别的行为,比如忽略等。

3. sysinit系统启动时准备运行的命令。

比如说,这个命令将清除/tmp。

上面列出的特殊关键字尚不完整。

其他的关键字及其使用详情,可参考你的inittab手册页。

五、在单用户模式下引导一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。

单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。

一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。

内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。

内核同时也为init指定命令行,init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。

有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。

如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。

这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。

文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。

由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。

否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。

不同的运行级有不同的用处,也应该根据自己的不同情形来设置。

例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。

在启动后的lilo 提示符下输入:init=/bin/sh rw 使机器进入运行级1 ,并把root 文件系统挂为读写。

他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。

运行级别的配置是在/etc/inittab行内进行的,如下所示:12 : 2 : wait : / etc / init.d / rc 2第一个字段是一个任意指定的标签;第二个字段表示这一行适用于运行那个级别(这里是2);第三个字段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。

合集下载

linux中init命令的详细解释

linux中init命令的详细解释

linux中init命令的详细解释linxu下的init命令是进程初始化工具。

下面由店铺为大家整理了linux的init命令的详细解释的相关知识,希望对大家有帮助!一、linux中的init命令的详细解释init命令init命令是Linux下的进程初始化工具,init进程是所有Linux的进程的父进程,它的进程号为1。

init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。

语法init(选项)(参数)选项-b:不执行相关脚本而直接进入单用户模式;-s:切换到单用户模式。

参数运行等级:指定Linux系统要切换到的运行等级。

二、linux中的init命令的详解实例几个常用的命令查看系统进程命令:ps -ef | head查看init的配置文件:more /etc/inittab查看系统当前运行的级别:runlevel运行级别到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。

这个级别从0到6 ,具有不同的功能。

你也可以在/etc/inittab中查看它的英文介绍。

#0 停机(千万不能把initdefault 设置为0)#1 单用户模式#2 多用户,没有 NFS(和级别3相似,会停止部分服务)#3 完全多用户模式#4 没有用到#5 x11(Xwindow)#6 重新启动(千万不要把initdefault 设置为6)三、linux的init命令的六种模式简介6种模式中有两种是系统内定的:0:停止系统运行。

init 0〈回车〉相当于 halt〈回车〉。

6:重启系统。

init 6〈回车〉相当于 reboot〈回车〉。

如果你了解/etc/inittab文件,就千万不要把0设为缺省登录模式,否则你的Linux的运行就只能两点一线了——开机←→停机,或者是开机←→重启的无限循环。

嵌入式linux下inittab详解

嵌入式linux下inittab详解

嵌入式linux启动时运行的inittab文件嵌入式系统下的linux启动配置文件,不同与普通的PC linux启动配置,启动相关文件与文件的内容也要少得多。

嵌入式系统下的linux启动过程一般是:1 在bootloader中制定各种要求传给linux内核的参数,制作ramdisk或ramfs 文件系统,并在开机后首先mount上,该文件系统主要负责包含启动运行的配置文件,嵌入式系统主要是/etc/inittab和/etc/rc文件;2 在init进程启动后,进程首先执行/etc/inittab文件,该文件语法下面介绍,一般包括三项内容就可以启动。

其中主要的一项内容就是::sysinit:/etc/rc,目的是制定初始化要执行的脚本配置文件,在/etc/rc中则主要是配置系统;另一项内容是::respawn:-/usr/sbin/xxx,xxx一般为shell,最后一个重要的项是::shutdown:/bin/umount -a -r接下来的部分为转载/kernel_32/archive/2009/02/03/3860756.aspx首先介绍点背景知识,关于inittab的:init 进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁盘及文件系统、启动系统日志、配置网络接口并启动网络和邮件服务,启动打印服务等。

Solaris中init进程的主要任务是按照inittab 文件所提供的信息创建进程,由于进行系统初始化的那些进程都由init创建,所以init 进程也称为系统初始化进程。

下面具体说明inittab文件的格式。

inittab文件中每一记录都从新的一行开始,每个记录项最多可有512个字符,每一项的格式通常如下:id:rstate:action:process,下面分别解释。

1.id字段是最多4个字符的字符串,用来唯一标志表项。

2.rstate(run state)字段定义该记录项被调用时的运行级别,rstate可以由一个或多个运行级别构成,也可以是空,空则代表运行级别0~6。

initrd详解(转)

initrd详解(转)

initrd详解(转)1.什么是 Initrdinitrd 的英⽂含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。

在 linux内核启动前, boot loader 会将存储介质中的 initrd ⽂件加载到内存,内核启动时会在访问真正的根⽂件系统前先访问该内存中的 initrd ⽂件系统。

在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第⼀阶段先执⾏ initrd ⽂件系统中的“某个⽂件“,完成加载驱动模块等任务,第⼆阶段才会执⾏真正的根⽂件系统中的 /sbin/init 进程。

这⾥提到的“某个⽂件“,Linux2.6 内核会同以前版本内核的不同,所以这⾥暂时使⽤了“某个⽂件“这个称呼,后⾯会详细讲到。

第⼀阶段启动的⽬的是为第⼆阶段的启动扫清⼀切障爱,最主要的是加载根⽂件系统存储介质的驱动模块。

我们知道根⽂件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞⼤、臃肿。

Initrd 的⽤途主要有以下四种:1. linux 发⾏版的必备部件linux 发⾏版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。

Linux 发⾏版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,⽣成包含安装系统硬件驱动的initrd,⽆⾮是⼀种即可⾏⼜灵活的解决⽅案。

2. livecd 的必备部件同 linux 发⾏版相⽐,livecd 可能会⾯对更加复杂的硬件环境,所以也必须使⽤ initrd。

3. 制作 Linux usb 启动盘必须使⽤ initrdusb 设备是启动⽐较慢的设备,从驱动加载到设备真正可⽤⼤概需要⼏秒钟时间。

如果将 usb 驱动编译进内核,内核通常不能成功访问 usb 设备中的⽂件系统。

linux内核分析课后答案

linux内核分析课后答案

linux内核分析课后答案Linux是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

支持模块的动态装卸(裁剪)。

Linux内核就是基于这个策略实现的。

Linux进程1.采用层次结构,每个进程都依赖于一个父进程。

内核启动init程序作为第一个进程。

该进程负责进一步的系统初始化操作。

init进程是进程树的根,所有的进程都直接或者间接起源于该进程。

从技术层面讲,内核是硬件与软件之间的一个中间层。

作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。

在实际工作中内核抽象了相关细节。

内核是一个资源管理程序。

负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

内核就像一个库,提供了一组面向系统的命令。

系统调用对于应用程序来说,就像调用普通函数一样。

Linux 内核可以进一步划分成 3 层。

最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。

系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。

这些代码是 Linux 所支持的所有处理器体系结构所通用的。

在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board SupportPackage)的部分。

这些代码用作给定体系结构的处理器和特定于平台的代码。

Linux 内核实现了很多重要的体系结构属性。

在或高或低的层次上,内核被划分为多个子系统。

Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。

这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。

每种内核都有自己的优点,不过这里并不对此进行讨论。

随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解Joe Brockme IE r 研究了Slackware Linux init 进程。

他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。

我们的示例使用x86 平台上的Slackware Linux 发行版(请参阅本文后面的参考资料)。

大多数信息可用于其它Linux 发行版,但在细节处会略有不同。

尤其是,与其说Slackware 的init 结构类似于System V 结构,还不如说它更类似于BSD Unix结构,尽管Slackware 的最新发行版中的程序做了一些让步,它们要将服务添加到启动,但期望这些服务是System V 目录结构。

(请参阅侧栏,“BSD 和系统V init 脚本之间的差异”。

)所有进程的父代当Linux 机器引导时,究竟会发生什么?在计算机的BIOS 完成其任务后,系统会读取硬盘(或软盘,或CD-ROM,或Zip 驱动器……Linux 是非常灵活的)的第一位,并会遇到引导装入程序。

虽然GRUB 和其它装入程序也逐渐变得流行,但通常这就是Linux 装入程序(LInux LOader),一般称作LILO。

然后LILO 将Linux 内核装入内存,并开始展示它的魔力。

Linux 内核初始化了诸如SCSI 卡之类的设备,以及其它内核中内置的硬件设备。

然后内核运行init,它是除内核之外在系统运行的第一个进程。

如果执行ps ax | grep 1 ,就会看到init 的进程ID (PID) 是1。

装入init 之后,它会读取inittab 以查看下一步做什么。

inittab 告诉init 要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件。

运行级别运行级别是由系统上的所有服务在某个给定时间定义的(基本上是操作方式)。

Linux 可以有几种操作方式:单用户方式、单用户联网方式、多用户方式、始于X 窗口的多用户方式,等等。

linux服务方式启动程序脚本(init.d脚本)

linux服务方式启动程序脚本(init.d脚本)

linux服务⽅式启动程序脚本(init.d脚本)这才是真正正确的让jar后台启动的脚本,⽹络上的各种nohoup的脚本都是临时执⾏⼀次任务⽤的。

#!/bin/sh## init.d script##### BEGIN INIT INFO# Provides: mongodb# Required-Start: $network $local_fs $remote_fs# Required-Stop: $network $local_fs $remote_fs# Should-Start: $named# Should-Stop:# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: An object/document-oriented database# Description: MongoDB is a high-performance, open source, schema-free# document-oriented data store that's easy to deploy, manage# and use. It's network accessible, written in C++ and offers# the following features:# .# * Collection oriented storage - easy storage of object-# style data# * Full index support, including on inner objects# * Query profiling# * Replication and fail-over support# * Efficient storage of binary data including large# objects (e.g. videos)# * Auto-sharding for cloud-level scalability (Q209)# .# This package is build with V8 JavaScript engine.# .# High performance, scalability, and reasonable depth of# functionality are the goals for the project.### END INIT INFODAEMON=/usr/local/jdk1.8.0_40/bin/javaOPTION=-jarVAR=/usr/local/danabang.storage/danabang.storage.jarDESC=danabang.storage# Default defaults. Can be overridden by the /etc/default/$NAMENAME=danabang.storagePIDFILE=/var/data/danabang.storage/log/$NAME.pidRUNAS=tangruiif test ! -x $DAEMON; thenecho "Could not find $DAEMON"exit 0fi. /lib/lsb/init-functionsSTARTTIME=1DIETIME=10 # Time to wait for the server to die, in seconds# If this value is set too low you might not# let some servers to die gracefully and# 'restart' will not workrunning_pid() {# Check if a given process pid's cmdline matches a given namepid=$1name=$2[ -z "$pid" ] && return 1[ ! -d /proc/$pid ] && return 1cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`# Is this the expected server[ "$cmd" != "$name" ] && return 1return 0}running() {# Check if the process is running looking at /proc# (works for all users)# No pidfile, probably no daemon present[ ! -f "$PIDFILE" ] && return 1pid=`cat $PIDFILE`running_pid $pid $DAEMON || return 1return 0}start_server() {# Start the process using the wrapperstart-stop-daemon --background --start --quiet --pidfile $PIDFILE \ --make-pidfile --chuid $RUNAS \--exec $DAEMON -- $OPTION $VARerrcode=$?return $errcode}stop_server() {# Stop the process using the wrapperstart-stop-daemon --stop --quiet --pidfile $PIDFILE \--user $RUNAS \--exec $DAEMONerrcode=$?return $errcode}force_stop() {# Force the process to die killing it manually[ ! -e "$PIDFILE" ] && returnif running ; thenkill -15 $pid# Is it really dead?sleep "$DIETIME"sif running ; thenkill -9 $pidsleep "$DIETIME"sif running ; thenecho "Cannot kill $NAME (pid=$pid)!"exit 1fififirm -f $PIDFILE}case "$1" instart)log_daemon_msg "Starting $DESC" "$NAME"# Check if it's running firstif running ; thenlog_progress_msg "apparently already running"log_end_msg 0exit 0fiif start_server ; then# NOTE: Some servers might die some time after they start,# this code will detect this issue if STARTTIME is set# to a reasonable value[ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time if running ; then# It's ok, the server started and is runninglog_end_msg 0else# It is not running after we did startlog_end_msg 1fielse# Either we could not start itlog_end_msg 1fi;;stop)log_daemon_msg "Stopping $DESC" "$NAME"if running ; then# Only stop the server if we see it runningerrcode=0stop_server || errcode=$?log_end_msg $errcodeelse# If it's not running don't do anythinglog_progress_msg "apparently not running"log_end_msg 0exit 0fi;;force-stop)# First try to stop gracefully the program$0 stopif running; then# If it's still running try to kill it more forcefullylog_daemon_msg "Stopping (force) $DESC" "$NAME"errcode=0force_stop || errcode=$?log_end_msg $errcodefi;;restart|force-reload)log_daemon_msg "Restarting $DESC" "$NAME"errcode=0stop_server || errcode=$?# Wait some sensible amount, some server need this[ -n "$DIETIME" ] && sleep $DIETIMEstart_server || errcode=$?[ -n "$STARTTIME" ] && sleep $STARTTIMErunning || errcode=$?log_end_msg $errcode;;status)log_daemon_msg "Checking status of $DESC" "$NAME"if running ; thenlog_progress_msg "running"log_end_msg 0elselog_progress_msg "apparently not running"log_end_msg 1exit 1fi;;*)N=/etc/init.d/$NAMEecho "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1;;esacexit 0。

计算机及Linux操作系统开机启动过程详解

计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。

执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。

执⾏该跳转(⼆跳)。

阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。

执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。

执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。

具体过程见下⽂“操作系统启动过程”部分。

整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。

BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。

启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。

往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。

若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。

可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。

因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。

Linux基础命令---init进程

Linux基础命令---init进程initinit是所有进程的⽗进程,它由内核执⾏,可以启动其他所有的进程。

init指令在启动时会参考/etc/inittab⽂件的配置,完成其他进程的启动。

init通常不会由⽤户进程执⾏,并且期望进程id为1。

如果不是这样,它将实际执⾏telinit(8)并将所有参数传递给它。

init管理的进程称为作业,并由/etc/init⽬录中的⽂件定义。

init(8)是⼀个基于事件的init守护进程。

这意味着作业将通过系统状态发⽣的更改⾃动启动和停⽌,包括作业的启动和停⽌。

这与基于依赖项的init守护进程不同,后者启动⼀组指定的⽬标作业,并通过迭代它们的依赖项来解决它们应该启动的顺序和其他作业所需的顺序。

主要事件是startup (7)事件,在守护进程加载完其配置后发出。

其他有⽤的事件是以作业更改状态发出的starting (7)、started (7)、stopping (7)和stopped (7)事件。

init有7种运⾏等级运⾏等级说明0关机1单⽤户模式2多⽤户模式,不启动nfs3多⽤户模式,有⽹络功能4保留5图形界⾯6重启Upstart init(8)守护进程不跟踪运⾏级别本⾝,⽽是完全由⽤户空间⼯具实现。

为表⽰运⾏级的更改⽽发出的事件是runlevel(7)事件。

此命令的适⽤范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法init [选项] [参数]2、选项列表选项说明--help显⽰帮助⽂档--version显⽰命令版本--verbose将有关作业状态更改和事件释放的详细消息输出到系统控制台或⽇志,这对于调试引导⾮常有⽤。

3、实例⽆。

linux的init6种模式

init是Linux系统里的根进程,是系统所有进程的祖先。

它的主要作用是根据记录在/etc/inittab 里的一个脚本(script)程序产生进程。

这个文件通常用于控制用户的登录模式。

Linux系统的有效登录模式有0~9共十种,不过沿用UNIX系统的至多6种的限制,一般只有1到6有效。

init一般在系统启动时自动运行,也可以由root用户调用。

它的作用是切换系统的运行状态。

它的命令格式是:init NUM〈回车〉,其中NUM表示1到6的任一数字。

6种模式中有两种是系统内定的:0:停止系统运行。

init 0〈回车〉相当于halt〈回车〉。

6:重启系统。

init 6〈回车〉相当于reboot〈回车〉。

如果你了解/etc/inittab文件,就千万不要把0设为缺省登录模式,否则你的Linux的运行就只能两点一线了——开机←→停机,或者是开机←→重启的无限循环。

其他的4种模式实际上是由操作系统确定的。

如果你愿意修改Linux的源代码,你也可以定义这4种(甚至6种)模式的实际功能。

其实只要知道Linux发布厂商的约定就足够了,下面我们就以蓝点2.0为例,看看init的常用约定吧——init 1——进入单用户模式。

这和开机是选择Safe Mode是一样的,可以以root的权限对系统进行管理,但是不能进入图形模式,也不支持中文,声卡和网络服务等就更不用提了。

总之,它是系统可运行的最低软硬件配置。

它和Windows的安全模式是比较相似的,但一个本质的差别:在于只要你在Linux下运行相应的命令,硬件设备是可以在这种模式下被驱动的。

例如只要你的光驱连线正确,一个mount /dev/cdrom命令,你的光盘内容就随时可以在/mnt/cdrom里读出来。

要注意的是这一模式的字符控制台不能支持中文,但进入Xwin 仍然能看到蓝点漂亮的中文字体,输入法也完全没有问题。

init 2——进入无网络服务的多用户模式如果你的计算机根本没有连网,这个模式就跟普通模式一样了。

Linux init详解

Linux init详解init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。

所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。

如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

一、什么是INIT:init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。

所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。

如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二、运行级别那么,到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。

这个级别从1到6 ,具有不同的功能。

不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)# 0 - 停机(千万不能把initdefault 设置为0 )# 1 - 单用户模式# 2 - 多用户,没有NFS# 3 - 完全多用户模式(标准的运行级)# 4 - 没有用到# 5 - X11 (xwindow)# 6 - 重新启动(千万不要把initdefault 设置为6 )这些级别在/etc/inittab 文件里指定。

这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档