- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux内核的内核执行流程
简析linux内核的执行流程
进程0:Linux引导中创建的第一个进程,完成加载系统后,演变为进程调度、交换及存储管理进程进程1:init 进程,由0进程创建,完成系统的初始化. 是系统中所有其它用户进程的祖先进程
时钟中断设置
系统调用服务程序挂接
初始化缓冲区管理结构(在main.c中133行, buffer_init(buffer_memory_end)定义 fs/buffer.c)
初始化硬、软盘(main.c中134、135行,hd_init与floppy_init定义于kernel/blk_drv/hd.c和kernel/blk_drv/floppy.c)
开中断 (main.c中136行,sti())
第二步:以进程0为母本创建进程1,使进程1不仅仅具备进程0所拥有的能力,而且还能以文件的形式与外设进行数据交互。
流程是:
操作系统为进程0创建进程1做准备 main.c中137行,move_to_
user_mode()定义在include/asm/system.h,实现从
内核态到用户态。进程0正式开始执行,而后
执行main.c的138行的“if(!fork())”,开始创建
在进程槽中为进程1申请一个空闲位置并获取进程号
进程1,此时将执行unisted.h中的syscall0宏函数
,得到一个编号,对于fork函数,其值是2,具体
在这个程序中的第62行有定义,然后执行软中断
复制进程0的信息之前,先将一些数据压栈
,进入系统调用阶段,跳到内核态,执行 kernel/system_call.s中的代码,将一些寄存器的 值压栈后,通过刚才在unisted.h中给eax赋值
初步设置进程1管理结构 的2偏移值在系统调用sys_call_table 中找到sys_fork函数,跳到该函数执行。进 入后首先申请一个空闲位置并获取进程号。
这同样在system_call.s函数中的sys_fork
进程0创建进程1的过程中发生时钟中断 中的_find_copy_
process,再跳到该函数的定义处kernel/
fork.c中,后返回到sys_fork中,在
从中断返回 复制进程信息前,再将一些数据压栈,
此时有一个寄存器的值和前面的不一样,
那就是eax,此时是1,它从task[64]中
得到的。之后执行copy_process,跳到
调整进程1的管理结构 定义处kernel/fork.c中,设置进程1的
管理结构。假如此时发生时钟中断,系统
会响应并执行kernel/system_call.s函数
中的timer_interrupt定义处,先压栈后
设置进程1的线性地址空间及物理页面 进入kernel/sched.c
的do_timer函数,别忘了此时仍在进程
0执行,然后便发现时间片还没完,所以
跳出,并返回到ret_from_sys_call。这是
继续调整进程1的管理结构 在kernel/system_call.s中定义的,
接着直接将刚才的压栈数据出栈,继续完成
刚才创建进程1的任务,即在fork.c中继续
调整进程1的管理结构,同时设置进程
进程0准备切换到进程1 1的线性地址空间及物理页面,直到
执行到这条语句“p-state=TASK_
RUNNING;return last_pid;”,标志着
系统切换到进程1执行 进程1创建完成。后跳出copy_process.c
函数,返回到system_call.s,将压栈的
进程1开始执行 的寄存器值出栈,此时eax是1。后中断返回
,进程由从内核态变为用户态,即到了 unisted.h的“if(_res=0)”这条指令中,
_res的值就是eax的值,一判断成立,就返
进程1开始以数据块的形式操作硬盘 回该值。最后回到了main.c
的“if(!fork())”中,一判断不成立,跳出执 行下一条指令“for(;;)pause();”,同理
Pause函数也和fork函数一样,这里就不
将找到的缓冲块与请求项挂接 讲了,进入sys_pause()后将进程0
置为可中断等待状态,并调用在kernel
/sched.c定义的schedule()函数切换进程。
进程切换中断返回后执行了第一条语句
将请求项与硬盘处理函数挂接 是“if(_res=0)”,一判断,
刚存的eax值为0,返回到“if(!fork())”
判断为真,执行init()函数,这在main.c
定义。进入init.c后其程序执行流程见附录,
进行硬盘读盘前的工
您可能关注的文档
- hs马场管理制度.doc
- HFC-152a_生产方法介绍.doc
- HLB定义.doc
- J2EE轻量级解决方案-hibernate-实验报告1.doc
- Java2016年面试整理.docx
- Java相关课程系列笔记之十一Ajax学习笔记(建议用WPS打开).doc
- Java锁优化.doc
- Linux操作系统作业-参考答案.doc
- GSM通信流程(非常全面).doc
- MATLAB弧度与角度转换.docx
- 2024-2030年全球与中国硼酸三甲酯(TMB)行业供需态势及投资潜力分析报告.docx
- 2024-2030年健身器材行业风险投资发展分析及投资融资策略研究报告.docx
- 2024-2030年信托行业发展分析及投资战略研究报告.docx
- 2024-2030年偏心螺杆泵行业市场现状供需分析及投资评估规划分析研究报告.docx
- 2024-2030年儿童乐园项目可行性研究报告.docx
- 2024-2030年儿童电话手表行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年免漆门行业发展分析及投资价值研究咨询报告.docx
- 2024-2030年全球与中国催芽机行业需求规模及投资盈利预测报告.docx
- 2024-2030年全球与中国精梳纱市场销售形势及前景产销规模预测研究报告.docx
- 2024-2030年全球与中国空白商标布行业发展现状及趋势预测分析报告.docx
最近下载
- GB∕T 22670-2018 变频器供电三相笼型感应电动机试验方法(高清版).pdf
- 2023年广东茂名信宜市村(社区)后备干部选聘225人笔试历年难易错点考题荟萃附带答案详解.docx VIP
- DB31╱831-2014 镀膜玻璃单位产品能源消耗限额.pdf VIP
- DB11_T 854-2023 占道作业交通安全设施设置技术要求.docx
- 房屋建筑安全专项施工专业技术方案.doc VIP
- 生猪屠宰兽医卫生检验人员理论考试题库及答案.docx
- 学习材料:纪检监察案件审理工作培训资料三套合辑.docx VIP
- GB+40879-2021数据中心能效限定值及能效等级.docx VIP
- 2015年关于平安渔业创建活动的汇报.doc
- 初中七年级英语翻译专项集中训练100题(含参考答案).pdf VIP
文档评论(0)