网站大量收购独家精品文档,联系QQ:2885784924

[计算机硬件及网络]第4章 启动Linux内核.ppt

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机硬件及网络]第4章 启动Linux内核

本章研究的基本问题 初始化内核使用的数据结构。 创建为系统提供特定服务的各种内核线程。 init函数和init进程。 Shell脚本文件。 终端进程的生成。 4.1 初始化系统内核 完成初始化内核任务的函数是start_kernel()。 当系统执行start_kernel()函数时,标志着核心程序开始执行保护模式下内核数据结构的初始化。 4.1.1 初始化内核使用的数据结构 start_kernel()函数的执行流程如图4-1所示。 4.1.2 解析内核选项 start_kernel()中的parse_options()函数是一个词法分析程序。其功能是将内核引导程序传递给内核的启动选项进行解析后,存放在不同的数组中,供init进程使用。 4.2 init()函数和init进程 0号进程就是内核本身,它是系统中后来产生的所有进程的祖先。 内核初始化结束后调用函数kernel_thread()创建1号线程。 如果kernel_thread()函数从0号进程返回,就执行cpu_idle()函数;如果从1号线程中返回,就执行init()函数。 4.3 init()函数执行流程 1号内核态线程执行init()函数。该函数继续初始化系统内核。 4.3.1 继续初始化系统内核 init()函数执行流程如图4-8所示。 4.3.2 系统进程的生成 init()函数调用do_basic_setup()初始化系统总线,调用kernel_thread()函数创建几个系统进程,为用户提供各种服务。 4.3.3 init进程 init进程的操作是根据“/etc/inittab”文件的指示进行的。 文件/etc/inittab是Linux系统配置文件,下面是该文件的部分主要内容: 4.4 shell命令文本的执行 init进程根据/etc/inittab文件执行Shell命令文本。 4.4.1 执行脚本文件rc.sysinit /etc/rc.d/rc.sysinit是一个脚本文件。它完成的任务有: 4.4.2 执行脚本文件rcN.d rc.sysinit执行结束后,init进程开始执行/etc/rc.d/rcN.d(N=0、1、2、┅、6)文件。 因为init的状态值为3,init将执行/etc/rc.d/rc3.d脚本文件。下面是该目录下的文件: 4.4.3 各终端进程getty的生成 init执行rc3.d文件的各命令后,开始执行标识符为1-6的各行中的sbin/mingetty命令。为每个控制终端生成一个getty进程。 getty进程重新设置它的进程组标识号,并监视连到系统终端的接口电路。 一旦getty进程检测到来自终端的连接信号,它将通过exec()执行注册程序login。此时用户可键入自己的注册名和口令字。 如果注册名和口令字与/etc/passwd中的某一注册名和口令字相符,则注册成功。 4.5 小结 对于IBM PC机来说,自举过程首先从 BIOS开始。 计算机开机或复位后,BIOS将位于硬盘或软盘上的OS代码按照人的旨意装入主存并开始执行。 BIOS将磁盘自举块的引导程序装入内存,再由这个引导程序将OS代码从文件系统中装入主存。 引导程序将控制权交给内核,系统开始运行。 调用lock_kernel(),使下面两个调用不被内核其它可执行代码干扰。 调用do_basic_setup(),初始化总线并创建管理系统运行的后台进程。 调用free_initmem()释放标有_init标记的初始化代码区和数据区所占用的内存空间。标记为可用。 调用unlock_kernel(),解锁。允许内核其它进程运行。 系统调用open(),打开控制台设备作为init进程的标准输入。 A 系统调用dup()两次,复制/dev/console文件描述符两次。 如果命令行中给出到init文件的路径,系统调用execve()就执行它。 如果上面的系统调用没有成功,则系统调用execve()执行/sbin/init。 如果上面的系统调用也不成功,则系统调用execve()执行/etc/init。 如果上面的系统调用再不成功,则系统调用execve()执行/bin/init。 如果以上调用均不成功,则execve()执行/bin/sh代替可执行文件init。 如果所有路径都失败,系统调用panic()显示:出错信息和拯救办法。 A 图4.8 init()函数执行流程图 下面对init()函数执行流程进行说明。 调用lock_kernel()执行,避免其他处理机干扰;如果是单处理机,该函数是空操作。 调用do_basic_setup()初始化系统总线并创建管理内存的后台进程。 调用free_initm

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档