第7课armlinux内核内容摘要:

()wake _ up _ pr oces s ()wake _ up ()_ up ()TASK _ZOMBLE sy s _ exi t () do _ exi t () WAIT ING STA TU Swake _ up _ i nt er ru pt i bl e ()do _ si gnal () SIG _ KILL || S I G _ C ON T wa k e _ up _ p r o c e s s ()24 Linux进程的创建、执行和消亡 • 1. Linux进程的创建 • 系统的第一个真正的进程, init内核线程(或进程)的标志符为 1 • 新进程通过克隆老进程或当前进程来创建 ,系统调用 fork或 clone可以创建新任务 • 复制完成后, Linux允许两个进程共享 资源 25 • 2. Linux进程的执行 • 要让若干新进程按照需要处理不同的事情,就必须通过系统调用 exec • 函数 sys_execve将可执行文件的名字从用户空间取入内核空间以后就调用 do_execve( )执行具体的操作 26 • do_execve( )执行的流程 : – 打开可执行文件 ,获取该文件的 file结构。 – 获取参数区长度 ,将存放参数的页面清零。 – 对 linux_binprm结构的其它项作初始化 – 通过对参数和环境个数的计算来检查是否在这方面有错误 – 调用 prepare_binprm() 对数据结构 linux_binprm作进一步准备 – 把一些参数 (文件名、环境变量、文件参数 )从用户空间复制到内核空间 – 调用 search_binary_handler(),搜寻目标文件的处理模块并执行 27 • 3. Linux进程的消亡 • 进程终止由可终止进程的系统调用通过调用 do_exit()实现 • do_exit(long code)带一 个参数 code,用于传递终止进程的原因 28 • do_exit(long code)流程 : – ( 1)如果进程在中断服务程序中调用 do_exit(),则打印提示信息。 – ( 2)记录进程的记帐信息。 – ( 3)进程标志置为 PF_EXITING。 – ( 4)释放定时器链表。 – ( 5)释放临界区数据。 – ( 6)将消息队列中和 current进程有关项删除。 – ( 7)释放进程的存储管理信息。 – ( 8)释放进程已打开文件的信息。 – ( 9)释放进程的文件系统。 – ( 10)释放进程的信号响应函数指针数组等管理信息。 – ( 11)释放进程的 LDT。 – ( 12)进程状态置为 TASK_ZOMBIE。 – ( 13)置上退出信息,通知所有相关进程,它要退出了。 – ( 14) exec_domain结构共享计数减 1, binfmt结构共享计数减 1。 – ( 15)重新调度,将 current进程从 runqueue中删除,交出 CPU控制权 29 • 以下情况要调用 do_exit()函数: – 具体对应的系统调用出错,不得不终止进程 ,如: • do_page_fault() • sys_sigreturn() • setup_frame() • save_v86_state() – 其他终止进程的情况,通过调用以下函数实现终止: • sys_exit() • sys_reboot() • do_signal() 30 • LINUX系统进程的切换包括三个层次 : – 用户数据的保存: • 正文段、数据段、栈段、共享内存段 – 寄存器数据的保存 • PC、 PSW、 SP、 PCBP、 FP… – 系统层次的保存 • proc、 u、虚拟存储空间管理表格、中断处理栈 31 ARMLinux进程的调度 • Linux进程调度由函数 schedule()实现的,其基本流程可以概括为五步: – 清理当前运行中的进程 – 选择下一个投入运行的进程 – 设置新进程的运行环境 – 执行进程上下文切换 – 后期整理 • Linux调度的时机有两种: – 在内核应用中直接调用 schedule() – 被动调用 schedule() 32 4 ARMLinux 的中断响应和处理 • 中断是一个流程,一般来说要经过三个环节: – 中断响应 – 中断处理 – 中断返。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。