终端机无盘启动过程基本分析.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文档。上传文档
查看更多
终端机无盘启动过程基本分析

PXE启动Linux内核流程图 引导程序 PXE的启动过程(一) PXE协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。 1. 客户端发送动态获得IP地址的广播包到网络上。 2.DHCP服务器在收到该广播包后,发送给客户端分配IP地址的回应包。 PXE的启动过程(二)   3. 客户端收到回应包后设置自己的IP地址,然后从DHCP服务器获得启动服务器的IP 地址(DHCP服务器066选项,这就是TFTP服务器的IP地址) 启动文件名(DHCP服务器067选项,这里的启动文件名就是pxelinux.0 或者支持pxe的grub4dos的grldr,当然,也可以是startrom.n12或者使用3com Image Edit创建的pxe启动菜单文件,总之,它应该是一种由pxe启动规范规定的固定格式的可执行文件) 4.然后客户端到联系启动服务器(TFTP服务器)获得Linux内核映像文件vmlinux及内核小系统initrd.gz并执行,这样基本上就完成了pxe启动Linux内核的过程。 4. Linux内核启动过程 内核启动过程(一) 系统读取内核映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。   系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。 内核启动过程(二) start_kenrel()定义在init/main.c中,它就类似于一般可执行程序中的main()函数,系统在此之前所做的仅仅是一些能让内核程序最低限度执行的初始化操作,真正的内核初始化过程是从这里才开始。函数start_kerenl()将会调用一系列的初始化函数,用来完成内核本身的各方面设置,目的是最终建立起基本完整的Linux核心环境。    内核启动过程(三) start_kernel()中主要执行了以下操作:   (1) 在屏幕上打印出当前的内核版本信息。   (2) 执行setup_arch(),对系统结构进行设置。   (3)执行sched_init(),对系统的调度机制进行初始化。先是对每个可用CPU上的runqueque进行初始化;然后初始化0号进程(其task struct和系统空M堆栈在startup_32()中己经被分配)为系统idle进程,即系统空闲时占据CPU的进程。 内核启动过程(四) (4)执行parse_early_param()和parsees_args()解析系统启动参数。   (5)执行trap_in itQ,先设置了系统中断向量表。0-19号的陷阱门用于CPU异常处理;然后初始化系统调用向量;最后调用cpu_init()完善对CPU的初始化,用于支持进程调度机制,包括设定标志位寄存器、任务寄存器、初始化程序调试相关寄存器等等。   (6)执行rcu_init(),初始化系统中的Read-Copy Update互斥机制。 内核启动过程(五) (7)执行init_IRQ()函数,初始化用于外设的中断,完成对IDT的最终初始化过程。   (8)执行init_timers(), softirq_init()和time_init()函数,分别初始系统的定时器机制,软中断机制以及系统日期和时间。   (9)执行mem_init()函数,初始化物理内存页面的page数据结构描述符,完成对物理内存管理机制的创建。 内核启动过程(六) (10)执行kmem_cache_init(),完成对通用slab缓冲区管理机制的初始化工作。   (11)执行fork_init(),计算出当前系统的物理内存容量能够允许创建的进程(线程)数量。   (12)执行proc_caches_init() , bufer_init(), unnamed_dev_init() ,vfs_caches_init(), signals_init()等函数对各种管理机制建立起专用的slab缓冲区队列。   (13 )执行proc_root_init()Wl数,对虚拟文件系统/proc进行初始化。 内核启动过程(七)  在 start_kenrel()的结尾,内核通过kenrel_thread()创建出第一个系统内核线程(即1号进程),该线程执行的是

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档