![简析linux内核的内核执行流程_第1页](http://file4.renrendoc.com/view/d693d7eba6bf2ae0efb86665a38986b8/d693d7eba6bf2ae0efb86665a38986b81.gif)
![简析linux内核的内核执行流程_第2页](http://file4.renrendoc.com/view/d693d7eba6bf2ae0efb86665a38986b8/d693d7eba6bf2ae0efb86665a38986b82.gif)
![简析linux内核的内核执行流程_第3页](http://file4.renrendoc.com/view/d693d7eba6bf2ae0efb86665a38986b8/d693d7eba6bf2ae0efb86665a38986b83.gif)
![简析linux内核的内核执行流程_第4页](http://file4.renrendoc.com/view/d693d7eba6bf2ae0efb86665a38986b8/d693d7eba6bf2ae0efb86665a38986b84.gif)
![简析linux内核的内核执行流程_第5页](http://file4.renrendoc.com/view/d693d7eba6bf2ae0efb86665a38986b8/d693d7eba6bf2ae0efb86665a38986b85.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简析linux内核的执行流程从bootsect.s到main.c(内核版本0.11)Linux启动的第一阶段(从开机到main.c)3个任务:A、启动BBIOSS,准备备实模式式下的中中断向量量表和中中断服务务程序。B、从启动动盘加载载操作系系统程序序到内存存。C、为执行行32的的maiin函数数做过渡渡准备。内存变化如如下:、0 xFEE0000到0 xxFFFFFF是是BIOOS启动动块,其其中上电电后第一一条指令令在0 xxFFFFF0。、而后0 xx000000到到0 x0003FFF总共共1KBB存放中中断向量量表,而而接下去去的地址址到0 xx0044FF共共2566B存放放BIO
2、OS数据据,从00 x0EE05BB开始的的约8KKB的内内存中存存放中断断服务程程序。、利用BIIOS中中断0 xx19hh把硬盘盘的第一一扇区bboottsecct.ss的代码码加载到到内存中中,即00 x077c000处,后后转到该该处执行行。、将boootseect.s的代代码复制制到0 xx900000处处。、利用中断断0 x113h将将settup.s程序序加载到到内存00 x9002000处。、再将剩余余的约2240个个扇区的的内容加加载到00 x10000000 xx2EFFFF处处。、开始转到到settup.s处执执行,第第一件事事就利用用BIOOS提供供的中断断服务程程序从
3、设设备上获获取内核核运行的的所需系系统数据据并存在在0 x9900000的地地址处,这这时将原原来boootssectt.s的的代码覆覆盖得只只剩2BBytee的空间间。、关中断并并将系统统代码复复制到00 x0000000处,将将原来放放在这里里的中断断向量表表与BIIOS数数据区覆覆盖掉,地地址范围围是0 xx0000000 x11EFFFF。同同时制作作两表与与两寄存存器。开地址线AA20,寻寻址空间间达到44GB,后后对82259重重新编程程,改变变中断号号。、转到heead.s(大大小是225K+1844B)执执行,执执行该程程序完后后是这样样的:0 x0000000 x004FFF
4、F:页页目录与与4个页页表,每每一项是是4KBB,共220KBB;0 x0500000 x0054000:共共1KBB的空间间是软盘盘缓冲区区;0 x0544010 x0054bb8:共共1844B没用用;0 x0544b90 x005cbb8:共共2KBB的空间间存中断断描述符符表;0 x05ccb90 x0064bb8:共共2KBB的空间间存全局局描述符符表;之后就是mmainn函数的的代码了了!第二阶段、从从maiin.cc函数到到系统准准备完毕毕阶段。第一步:创创建进程程0,并并让进程程0具备备在322位保护护模式下下载主机机中的运运算能力力。流程程是:复制根设备备和硬盘盘参数表表 (
5、mmainn.c中中的1002、1110、1111行行) 物理内存规规划格局局(maain.c的1112行行1226行,其其中有 rrd_iinitt函数定定义在kkernnel/rammdissk.cc中,此此函数用用于虚拟盘盘初始化化;而mmem_iniit函数数是用于于内存管管理结构构初始化化,定义义在meem/mmemoory.c中,该该函数页页面使用用 虚拟盘设置置与初始始化次数均均设置成成1000,然后后再依据据主内存存的起始位位置和终终止位置置将处于于主内存存的所有有页面的的使用次数数全部清清零,系系统以后后把使用用次数为为0的页页面视为空空闲页面面。)内存管理结结构meem_m
6、map初初始化 异常处理类类中断服服务程序序挂接(在maain.c的1127行行,trrap()函数数定义 keerneel/ttrapp.c,目目的是将将各种中中断与中中断描述述符表挂挂接。)初始化块设设备与字字符设备备请求项项结构(在在maiin.cc的1228、1129行行,blkk_deev_iinitt()定义在在kerrnell/bllk_ddev/ll_rw_blkk.c,chr_ddev_iniit()定义在在kerrnell/chhr_ddev/ttyy_ioo.c)将串口与显显示器外外设的中中断服务务程序挂挂接(在在maiin.cc的1330行, ttyy_innit()定
7、义义在keerneel/cchr_devv/ttty_iio.cc)开启时间设设置(在在maiin.cc的1331行,ttimee_innit()定义义于maain.c函数数 76行行staartuup_ttimee)系统开始激激活进程程0(在maain.c的1131行行,scchedd_innit()定义义在keerneel/ schhed.c函数数中,该该函数实实现进程程相关事事务设置置依据时钟中中断设置置,系统统调用服服务程序序挂接。系系统调用用函数是是对用户户程序的的最基本本支持,利利用的是是进程相关事事务初始始化设置置系统调调用软中中断,详详细见下下面讲 的。)时钟中断设设置系统调用
8、服服务程序序挂接 初始化缓冲冲区管理理结构(在在maiin.cc中1333行, buffer_init(buffer_memory_end)定义fs/buffer.c) 初始化硬、软软盘(mmainn.c中中1344、1335行,hhd_iinitt与fllopppy_iinitt定义于keerneel/bblk_drvv/hdd.c和和kerrnell/bllk_ddrv/flooppyy.c)开中断(maain.c中1136行行,stti()第二步:以以进程00为母本本创建进进程1,使使进程11不仅仅仅具备进进程0所所拥有的的能力,而而且还能能以文件件的形式式与外设设进行数数据交互互。流程
9、程是:操作系统为为进程00创建进进程1做做准备 maain.c中1137行行,moove_to_user_modde()定义在在inccludde/aasm/sysstemm.h,实实现从内核态到用用户态。进进程0正正式开始始执行,而而后执行maiin.cc的1338行的的“if(!foork()”,开始始创建在进程槽中中为进程程1申请请一个空空闲位置置并获取取进程号号进程1,此此时将执执行unnistted.h中的的sysscalll0宏宏函数,得到一个个编号,对对于foork函函数,其其值是22,具体体在这个程序序中的第第62行行有定义义,然后后执行软软中断复制进程00的信息息之前,先先将
10、一些些数据压压栈 ,进入入系统调调用阶段段,跳到到内核态态,执行行kerrnell/syysteem_ccalll.s中中的代码码,将一一些寄存存器的值压栈栈后,通通过刚才才在unnistted.h中给给eaxx赋值初步设置进进程1管管理结构构的2偏偏移值在在系统调调用syys_ccalll_taablee中找到到syss_foork函函数,跳跳到该函函数执行行。进入后首首先申请请一个空空闲位置置并获取取进程号号。这同样在ssysttem_calll.ss函数中中的syys_fforkk进程0创建建进程11的过程程中发生生时钟中中断中的_ffindd_coopy_ proocesss,再再跳到
11、该该函数的的定义处处kerrnell/fork.c中,后后返回到到syss_foork中中,在从中断返回回复制进进程信息息前,再再将一些些数据压压栈, 此时有有一个寄寄存器的的值和前前面的不不一样,那就是eaax,此此时是11,它从从tassk664中中得到的。之之后执行行coppy_pproccesss,跳到到调整进程11的管理理结构定义处处kerrnell/foork.c中,设设置进程程1的 管理结结构。假假如此时时发生时时钟中断断,系统统会响应并执执行keerneel/ssysttem_calll.ss函数中的timmer_intterrruptt定义处处,先压压栈后设置进程11的线性性
12、地址空空间及物物理页面面进入kkernnel/schhed.c的do_ttimeer函数数,别忘忘了此时时仍在进进程0执行,然然后便发发现时间间片还没没完,所所以跳出,并返返回到rret_froom_ssys_calll。这这是继续调整进进程1的的管理结结构在keerneel/ssysttem_calll.ss中定义义的,接着直接将将刚才的的压栈数数据出栈栈,继续续完成刚才创建进进程1的的任务,即即在foork.c中继继续调整进程11的管理理结构,同同时设置置进程进程0准备备切换到到进程111的线线性地址址空间及及物理页页面,直直到执行到这条条语句“p-staate=TASSK_RUNNIIN
13、G;retturnn laast_pidd;”,标志志着系统切换到到进程11执行进程11创建完完成。后后跳出ccopyy_prroceess.c函数,返回回到syysteem_ccalll.s,将将压栈的的进程1开始始执行的寄存存器值出出栈,此此时eaax是11。后中中断返回回 ,进程程由从内内核态变变为用户户态,即即到了uniisteed.hh的“if(_rees=0)”这条指指令中,_res的的值就是是eaxx的值,一一判断成成立,就就返进程1开始始以数据据块的形形式操作作硬盘回该值值。最后后回到了了maiin.cc 的“if(!foork()”中,一一判断不不成立,跳跳出执行下一一条指令
14、令“forr(;)paausee();”,同理理Pausee函数也也和foork函函数一样样,这里里就不将找到的缓缓冲块与与请求项项挂接讲了,进进入syys_ppausse()后将进进程0置为可中断断等待状状态,并并调用在在kerrnell/scheed.cc定义的的schheduule()函数数切换进进程。进程切换中中断返回回后执行行了第一一条语句句将请求项与与硬盘处处理函数数挂接是“if(_rees=0)”,一判判断, 刚存的的eaxx值为00,返回回到“if(!foork()”判断为真,执执行innit()函函数,这这在maain.c定义。进入入iniit.cc后其程程序执行行流程见见附
15、录,进行硬盘读读盘前的的工作准准备各个程程序执行行目的正正如左边边写的一一样。给硬盘下达达读盘命命令进程1由于于等待读读盘操作作挂起系统切换到到进程00执行进程0执行行过程中中发生硬硬盘中断断 硬盘中断断服务程程序响应应后,进进程0继继续执行行再次响应硬硬盘中断断,并唤唤醒进程程1 读盘操作作完成后后进程11继续执执行 进程1继继续设置置硬盘管管理结构构 进程1获获取软盘盘超级块块,为加加载根文文件系统统做准备备 进程1备备份超级级块数据据 进程1将将根文件件系统从从软盘拷拷贝到虚虚拟盘进程1开始始加载根根文件系系统进程1准备备加载根根文件系系统超级级块进程1继续续加载根根文件系系统进程1准备
16、备获取根根目录节节点进程1加载载根目录录节点进程1结束束加载根根文件系系统的过过程进程1与内内核文件件表挂接接,为打打开文件件做准备备确定打开操操作的起起点获取枝梢ii节点ddev目目录文件件的i节节点确定devv的目录录文件ii节点为为枝梢节节点继续返回枝枝梢i节节点查找ttyy0文件件的i节节点将tty00设备文文件的ii节点,返返回给ssys_opeen系统统调用分析ttyy0文件件i节点点设置文件管管理结构构并返回回给用户户进程进程复制ttty00文件句句柄进程1继续续复制ttty00文件句句柄第三步:以以进程11为母本本创建进进程2,使使进程22在全面面具备进进程1所所拥有的的能力和
17、和环境的的基础上上,进一一步具备备支持”人机交交互“的能力力,最终终实现准准备阶段段完成。流流程如下下:进程1准备备创建进进程2 与进进程0创创建进程程1一样样,创建建进程22,复 制进进程1的的管理结结构,复复制页表表、页目目录 项等等,创建建进程22后即执执行到iinitt/maain.c中复制进程22的管理理结构并并进行调调整 1766行与1186行行,分别别是:iif(!(piid =fforkk()中子进进程即进进程2执执行,而而父进程程( 进程程1)执执行1886行的的if(pidd0),父父进程调整进程22管理结结构中与与文件有有关的内内容 进入入waiit函数数,等待待! 进入
18、入waiit函数数后还做做了一些些动作:首先 查找找自己的的子进程程,确定定是进程程2后,判判断进程1执行行过程中中发生时时钟中断断 进程程2是否否处于终终止状态态或是 僵死死状态,一一判断不不是,就就将进程程1设置置为 可中中断等待待状态,继继而调用用schheduule()函数数进程1从时时钟中断断返回 准准备切换换到进程程2执行行 切换到到进程22。 进进入进程程2后开开始加载载sheell程程序。首首先执 行iinitt/maain.c中1180行行的“cloose(0);”,就是是进程1查找找它自己己的子进进程 解除ffilpp200与ffilee_taablee644的第第一项 关
19、系,这这是从进进程1继继承过来来的。然然后 是是“if(opeen(etcc/rcc,OO_RDDONLLY,00))”,对进程2的的状态进进行处理理 其中是是将进程程2的管管理结构构指针表表fillp 20的第一一项与ffilee_taablee644的第第一项建建立 一一个关于于资源配配置的文文件,而而后再执执行切换到进程程2执行行 eexeccve函函数,并并映射到到syss_exxecvve系统统调用。 再再调用ddo_eexeccve函函数,目目的便是是将参数数 与与环境变变量加载载到主内内存的页页面中去去,中断断为打开/eetc/rc文文件做准准备 返回,但但此时在在该函数数里已经
20、经将EIIP的 值指指向了sshelll程序序的入口口地址,所所以返回回后 执行行的是sshelll的第第一条指指令,但但这时却却发现进程2打开开”/ettc/rrc“配置文文件 内存中中没有这这一条指指令的映映射, 所以以发生“缺页中中断”,然后后调用ppagee_faaultt 函数中中的doo_noo_paage。通过压栈为为加载sshelll文件件做准备备为参数和环环境变量量设置做做准备得到sheell文文件i节节点为加载参数数和环境境变量做做准备根据i节点点,为sshelll文件件进行检检测检测sheell文文件头备份文件头头并进行行分析对shelll文件件进行进进一步分分析拷贝参数
21、与与环境变变量调整进程22的管理理结构继续调整进进程2的的管理结结构释放进程22继承的的页面检测协处理理器调整sheell程程序所在在的线性性地址空空间为shelll程序序准备参参数与环环境变量量继续调整进进程2的的管理结结构调整EIPP,使其其指向sshelll程序序的入口口地址Shelll程序执执行发生生缺页中中断缺页中断中中sheell程程序加载载前检测测为即将载入入的内容容申请页页面为shelll载入入新获得得的页面面根据sheell进进程的情情况,调调整页面面内容将线性地址址空间与与程序所所在的物物理页面面相对应应 SShelll程序序开始执执行,执执行的内内容是/etcc/ rcc
22、里面的的命令,其其中便有有创建uupdaate进进Shelll进程准准备创建建upddatee进程 程,该该进程是是为同步步缓冲区区与硬盘盘而 设的进进程,它它会时不不时的进进入睡眠眠状 态,经经过一定定的时间间再被唤唤醒然后后更新进程2开始始执行/etcc/rcc文件 缓冲冲区与硬硬盘的数数据。之之后创建建完成后后 Shhelll进程退退出,退退出操作作当然得得释放它它占 用的的资源或或者是清清除掉,或或者是将将使用次次数准备加载uupdaate进进程 减减1。然然后为进进程1找找到一个个子进程程, 那就是是upddatee进程了了,发信信号告诉诉进程11 sheell进进程退出出,进程程1唤醒醒执行,重重新进入入Shelll程序检检测“etcc/rcc”文件 maiin.cc函数中中执行1180行行后面的的程序 再次次创建sshelll进程程,现在在进程号号是4,同同样 与与之前的的一样,但但此时稍稍微有点点不同的的是Shelll进程退退出 opeen的参参数是/devv/ttty0,这这是一个个设备 文文件,与与之
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年毛纱衣行业深度研究分析报告
- 汽车抵押贷款合同范本
- 2025年铁管制品项目可行性研究报告
- 公众号广告服务合同范本
- 农场收购协议合同范本
- 2025年大气汞排放检测市场环境分析
- 乙方签字合同范本模板
- 2025年针织衫项目可行性研究报告
- 2025年度单亲家庭子女抚养费用减免及保障合同
- 2025年双点弹力衬布项目投资可行性研究分析报告
- 政治校本课程
- 川2020J146-TJ 建筑用轻质隔墙条板构造图集
- (完整)读歌词猜歌名
- 八年级下开学第一课主题班会
- 初中英语人教版 八年级上册 单词默写表 汉译英
- pcs-9611d-x说明书国内中文标准版
- GB/T 1634.1-2004塑料负荷变形温度的测定第1部分:通用试验方法
- 无人机航拍技术理论考核试题题库及答案
- T∕CMATB 9002-2021 儿童肉类制品通用要求
- 工序劳务分包管理课件
- 暖通空调(陆亚俊编)课件
评论
0/150
提交评论