Linux初始化程序课程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX初始化程序 武汉大学计算机学院 郑鹏 Email:pzheng51@163.com 初始化程序 在内核源代码的init/目录中只有一个main.c 文件。系统在执行完boot/目录中的head.s 程序后就会将执行权交给main.c中的start_kernel()函数,在start_kernel执行完成后用户就可以登录和使用linux了。start_kernel()函数在init/main.c 中定义。该程序虽然不长,但却包括了内核初始化的所有工作。 start_kernel()函数 start_kernel的流程中的主要步骤: setup_arch(command_line):用于和处理器、内存等最基本的硬件相关部分的初始化。 在arch/i386/kernel/setup.c 中定义; parse_options(command_line):把启动时得到的参数从命令行的字符串中分离出来并赋给相应的变量。在 init/main.c 中定义; trap_init():对中断向量表进行初始化。在 arch/i386/kernel/trap.c 中定义; init_IRQ():与中断有关的初始化, 在 arch/i386/kernel/i8259.c 中定义; sched_init():进程调度初始化。 在 kernel/sched.c 中定义;  start_kernel()函数 softirq_init():在 kernel/softirq.c 中定义; time_init():时间部分初始化。 在arch/i386/kernel/time.c 中定义; console_init():对终端初始化。 在 drivers/char/tty_io.c 中定义; buffer_init(mempages):对用于指示块缓存的buff_free_list 初始化。在fs/buffer.c 中定义; mem_init():内存管理初始化。在 arch/i386/mm/init.c中定义;    start_kernel()函数 rest_init(): 此函数中调用  kernel_thread(init,NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL)函数时会调用init/main.c中的init()函数。在init()函数中将会建立bdflush、kswapd两个新的内核线程,初始化tty1设备,寻找/etc/init或/sbin/init或/bin/init来建立一个init进程。 Init进程根据/etc/inittab文件进行文件系统检查、启动系统守护进程为联机终端建立getty进程,执行/etc/rc下的命令文件。 此后getty会在终端上显示login提示符,以等待用户登录。 main.c 程序 main.c 程序首先利用setup.s 程序取得的系统参数设置系统的根文件设备号以及一些内存全局变量。这些内存变量指明了主内存的开始地址、系统所拥有的内存容量和作为高速缓冲区内存的末端地址。如果还定义了虚拟盘(RAMDISK),则主内存将适当减少。整个内存的映像示意图如下所示: main.c 程序 前图中,高速缓冲部分还要扣除被显存和ROM BIOS 占用的部分。高速缓冲区是用于磁盘等块设备临时存放数据的地方,以1K(1024)字节为一个数据块单位。主内存区域的内存是由内存管理模块mm 通过分页机制进行管理分配,以4K字节为一个内存页单位。内核程序可以自由访问高速缓冲中的数据,但需要通过mm 才能使用分配到的内存页面。 然后,内核进行所有方面的硬件初始化工作。包括陷阱门、块设备、字符设备和tty,包括人工创建第一个任务(task 0)。待所有初始化工作完成就设置中断允许标志,开启中断。 main.c 程序 在整个内核完成初始化后,内核将执行权切换到了用户模式,也即CPU 从0 特权级切换到了第3 特权级。然后系统第一次调用创建进程函数fork(),创建出一个用于运行init()的子进程。 在该进程(任务)中系统将运行控制台程序。如果控制台环境建立成功,则再生成一个子进程,用于运行shell 程序/bin/sh。若该子进程退出,父进程返回,则父进程进入一个死循环内,继续生成子进程,并在此子进程中再次执行shell 程序/bin/sh,而父进程则继续等待。 对于Linux 来说,所有任务都是在用户模式运行的,包括很多系统应用程序,如shell 程序、网络子系统程序等。 其它信息 PC 机的CMOS(complementary metal oxide semiconductor 互补金属氧化物半导体)内存实际上是由电池供电的64 或128 字节RAM 内存块,是系统时钟芯片的

文档评论(0)

taotao0b + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档