操作系统初始化过程

上传人:子 文档编号:42056162 上传时间:2018-05-31 格式:DOC 页数:7 大小:41KB
返回 下载 相关 举报
操作系统初始化过程_第1页
第1页 / 共7页
操作系统初始化过程_第2页
第2页 / 共7页
操作系统初始化过程_第3页
第3页 / 共7页
操作系统初始化过程_第4页
第4页 / 共7页
操作系统初始化过程_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《操作系统初始化过程》由会员分享,可在线阅读,更多相关《操作系统初始化过程(7页珍藏版)》请在金锄头文库上搜索。

1、一、 概况 系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优 劣的重要部分。LINUX 作为一个免费的准 UNIX 操作系统,在众多业余爱好者以 及小型商业处理市场表现不俗,成为继 WINDOWS 系列后的另一个主流。了解 LINUX 系统的初始化,对于进一步掌握 UNIX 系统是十分有帮助的。 通常,LINUX 系统的初始化可以分为两部分:内核部分和 init 程序部分。内核 主要完成系统的硬件检测和初始化,init 程序则主要完成系统的各项配置。 本文将着眼 LINUX 系统初始化的两个部分,初步解析 LINUX 的特点。 二、 初始化详解 1内核部分 (关于内核的一点知识

2、在最后面有补充)通常情况下,计算机首先用 LILO 程序引导内核的一部分(这部分没有被压 缩),以此来引导内核的其他部分。LILO 程序是最常用的、也是比较完善的 LI NUX 系统引导器,PC 机通常从硬盘的引导扇区读取这部分程序。LILO 程序是一个引导加载程序,通过/etc/lilo.c 时的一个配置完成。内核被解压缩并装入内存后,开始初始化硬件和设备驱动程序。下面是内 核初始化系统的具体步骤(各个版本之间会有一定的差异,下面是 2.2.16-22 版本的一个例子): (1) 检测 CPU 的主频和控制台的显示类型,并对 CPU 速度用 Bogo MIPS 程序( 衡量计算机处理器运行速

3、度的尺度)进行估算。 (2) 此后内核通过外设显示系统内存信息:如 131072k(128M),127820k 剩余, 使用的具体情况为:1048k 内核代码,412k 保留,1728k 数据等。尔后是各类 h ash table 的信息。 (3) 内核加载磁盘空间限量支持,完成 CPU 检测(包括检查数学协处理器), 以及 POSIX(可移植操作系统接口)适应性检测。 (4) 初始化 PCI BIOS,检测系统的 PCI 设备,并加载 TCP/IP 网络支持。 (5) 内核开始检测其他各种硬件设备:如 PS/2 端口设备,串行口设备,硬盘, 软盘,SCSI(小型计算机系统接口)等。 此后,内

4、核将启动 init 程序,形成系统的第一个进程。下面是 dmesg 记录的内 核初始化信息(部分): 补充部分(关于内核部分的另一种说法而已):当 Kernel 被装载到内存后,它会马上初始化和配置电脑的内存,并配置各 种不同的连接到这台电脑的硬件设备,包括所有的处理器,I/O 子系统,以及 存储设备。然后 Kernel 在预定的地方找到 initrd 镜像的压缩包,对它进行解 压和挂载,并载入所有必须的驱动。下一步,在删除 initrd 镜像挂载和回收所 有被它占用的内存之前,它将会初始化文件系统相应的虚拟设备比如 LVM 或软 件 RAID。然后,Kernel 会创建 root 设备,以只

5、读方式挂载 root 分区,并释放 所有没有被使用的内存。2init 程序部分 init 运行级别及指令一、什么是 INIT:init 是 Linux 系统操作中不可缺少的程序之一。所谓的 init 进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动 程序和数据数据结构等)之后,就通过启动一个用户级程序 init 的方式,完成引导 进程。所以,init 始终是第一个进程(其进程编号始终为 1) 。内核会在过去曾使用过 init 的几个地方查找它,它的正确位置(对 Linux 系统来说)是/sbin/init。如果内核找不到 init,它就会试

6、着运行/bin/sh,如果运 行失败,系统的启动也会失败。 在 start_kernel 中将调用到大量的 init 函数,来完成内核的各种初始化。如: page_address_init(); sched_init(); page_alloc_init(); init_IRQ(); softirq_init(); console_init(); calibrate_delay(); vfs_caches_init(num_physpages); rest_init();init 的进程号是 1,从这一点就能看出,init 进程是系统所有进程的起点,Linux 在完成核内引导 以后,就开始运行

7、 init 程序,。 init 程序通常在/sbin 或/bin 下,它负责在系统启动时运行一系列程序和脚本 文件。init 程序一旦被内核调用,便成为系统的第 0 号进程,该进程对于 LINU X 系统是十分重要的。/sbin/init 程序(或干脆简称为 init)负责处理启动过 程的其余部分,并用为用户配置一个使用环境。当 init 程序启动后,它就成了所有 linux 系统自动启动的进程的父进程或是 祖父进程。首先,它会执行/etc/rc.d/rc.sysinit 文件的脚本,这里会设置环境路径, 启动交换分区,检查文件系统,并检查所有在系统启动阶段需要做好的事情。 比如,许多系统使用

8、时钟,所以在 rc.sysinit 里读取/etc/sysconfig/clock 配置文件 去初始化硬件时钟。再一个例子,假如有特殊的串口进程必须被初始化, rc.sysinit 会执行/etc/rc.serial 文件。然后 init 程序开始执行/etc/inittab 脚本文件,在这个文件里描述了每 一个 Sys V 风格的系统的初始运行级别。此外,/etc/inittab 设置了默认的运 行级别,并在任何运行级别下都运行/sbin/update 程序。 init 进程做的每一 步都由/etc/initab 中的配置决定。以下是 RadHat 的/etc/inittab 文件的例子 :

9、inittab 文件的每一行包含四个域,格式为: code:runlevels:action:command (1) code 域用单个或两个字符序列来作为本行的标识,这个标识在此文件中是 唯一的。文件中的某些记录必须使用特定的 code 才能使系统工作正常。 (2) runlevels 域给出的是本行的运行级别。LINUX 系统运行在一定的级别下, 当 inittab 文件指定了某一特定的运行级别时,该记录行包含的命令将被执行 。RedHat 系统通常设置了 7 个运行级别(0-6),各运行级别的说明包含在 ini ttab 文件的开头。 (3) action 域指出的是 init 程序执行

10、 command 命令的方式。比如:只执行 command 一次,还是在它退出时重启。 (4) command 域给出相应记录行要执行的命令。 运行级别 1 是单用户模式,所谓单用户指的是系统运行在唯一用户-超级 用户模式下。而大多数情况下,系统运行在多用户模式下。在启动出错、文件 系统出错等情况下,系统将进入单用户模式,此时,系统只有很少的配置,这 对于恢复系统是很必要的。 inittab 文件首先指出缺省的运行级别(如 id:3:initdefault:),我们看 到上面的例子中缺省的运行级别为 3。此后根据下一条记录,系统应当运行/et c/rc.d/rc.sysinit,这是一个脚本文

11、件,主要包括基本的系统初始化命令,如 激活交换分区、检查并挂上文件系统、装载部分模块等。 接下来是执行特定运行级别对应的 rcN 程序。rcN 都是目录,当前运行级 别为 N 时,执行/etc/rc.d/rcN.d 目录下的脚本程序。以下是 rc3.d 目录下的 文件: 从中我们看到,rc3.d 目录下都是类似 Knnxxxx 和 Snnxxxx 的文件 。Nn 是 00-99 之间的一个整数,xxxx 是系统提供的某些服务。以“S“开头的文 件用以启动(start)服务进程,以“K“开头的文件用以终止(kill)服务进程 。数字 nn 的大小决定程序执行的先后顺序。 例如系统启动进入运行模式

12、 3 后,/etc/rc.d/rc3.d 目录下所有以“S“开头 的文件将被依次执行;系统关闭时,离开运行模式 3 之前,/etc/rc.d/rc3.d 目录下所有以“K“开头的文件将被依次执行。 下一条记录表明每一个运行级别都要运行命令 update,此程序每隔 30 秒把内 存缓冲区的内容回写一次,称为“同步“,以防止系统崩溃或突然掉电造成的数 据丢失和损坏。 以下的各条记录分别描述了 Ctrl-Alt-Del 组合键是否有效,与 UPS 相关的 电源失败处理和虚拟控制台的初始化,最后一条记录则是在运行级别 5 的启动 X Window 系统的 X 显示管理程序。 接下来,init 程序为

13、系统设置基本功能库,/etc/rc.d/init.d/functions。通过 它可以启动或是杀掉一个程序,以及决定一个进程的 PID。 提示:提示:当系统完成启动后,你同样可以用 root 用户登录系统,通过执行同 样的脚本来开始或结束某项服务,而不管当前运行级别是什么。比如:命令 /etc/rc.d/init.d/httpd stop 将会关闭 Apache Web 服务。观察每个符号链接名,会发现名称里都编进了一个号码,init 程序就是根据 这个号码来决定启动或关闭服务的顺序的,越小的号码会预示着这个服务会被 越早启动或关闭,如果号码相同则由按字母排序来决定启动顺序。 注意:注意:In

14、it 程序最后要做的一件事情是执行/etc/rc.d/rc.local 文件,这个文件 是用于系统定制的。当处理完运行级别对应的 rc 目录后,/etc/inittab 脚本会为分配的每一个虚 拟控制台创建一个/sbin/mingetty 进程,级别为 2 到 5 时可以一共有 6 个控制台, 级别出 1 只有一个,而级别 0 和 6 根本就没有。/sbin/mingetty 进程打开一个到 tty 设备的通信通道,设置通信模式,提示用户登录,取得用户名以及为用户启 动一个相应的进程。 如果运行级别是 5, /etc/inittab 执行一个名为/etc/X11/prefdm 的脚本。这个脚

15、本会提示图像界面给用户,具体如何提示取决于/etc/sysconfig/desktop 文件。作为一个软件开发者,你会创建,打开,操作内核对象。系统会创建和 操作多种类型的内核对象,例如 access token 对象, event 对象,file 对象, file-mapping 对象,I/O 完成端口对象,job 对象,mailslot 对象,mutex 对象, pipe 对象,process 对象,semaphore 对象,thread 对象,waitable time 对象,和 threa pool worker factory 对象.有一个自由的 WinObj 工具允许你看到所有的内

16、核 对象列表。(地址为:)注意你必须在 Administrator 下运行他,通过 Windows Explorer 你能看到 它的列表。 这些对象通过调用各式各样的函数来创建,对象名不必映射到 kernel 级 别上使用的对象的类型上。例如:CreateFileMapping 函数使系统创建了一个与 Section 对象相关的文件映射,正如你在 WinObj 中看到的。每个内核对象只是 被内核分配的一块内存块。但只有内核可以访问。这个内存块是一个成员包括 对象的主要信息的数据结构。一些成员(安全描述,引用计数,等等)对所有的对 象类型来说是一样的。但是大多数是针对专门的类型。例如,一个 process 对象 有有一个 process ID,一个基本的优先级,和一个结束码,在什么地方有字节偏 移,共享模式,打开模式。因为内核对象数据结构仅仅可以被内核访问,所以一个应用程序就无法在 内存中定位这些数据结构以及直接改变它的内容。Microsoft 强制使用这种限制 是为了使内核对象结构保持一致性。这种限制也允许 Microsoft 增加,移除和改 变这些结构

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号