- 1、本文档共89页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux内核体系架构 李超 lichao-runing@163.comPART ONE 嵌入式Linux内核总论 更新目标板上的系统 嵌入式Linux启动 知识回顾 Linux系统由内核和文件系统两大部分构成 内核各个模块之间相互联系,密不可分 典型Linux系统构成图 1.Linux内核模式 操作系统内核的结构模式主要可分为整体式的单内核模式和层次式的微内核模式 在单内核模式的系统中,操作系统所提供服务的流程为:应用主程序使用指定的参数值执行系统调用指令(int x80),使CPU 从用户态(User Mode)切换到核心态(Kernel Model),然后操作系统根据具体的参数值调用特定的系统调用服务程序,而这些服务程序则根据需要再底层的一些支持函数以完成特定的功能。在完成了应用程序所要求的服务后,操作系统又从核心态切换回用户态,返回到应用程序中继续执行后面的指令 2.Linux 内核系统模块体系结构 进程调度模块 内存管理模块 文件系统模块 进程间通信模块 网络接口模块 嵌入式内核知识点讲解大纲 内存管理 进程 中断、异常和系统调用 文件系统 进程间通信 设备驱动 信号 Linux2.6内核之进程组织 李超 讲课内容 进程基础 进程是什么? 怎样描述进程? 进程控制 进程的诞生 进程间的简单同步 进程间通信 进程间数据信息的传递 PART ONE 进程基础 关注点: 进程是什么 Linux怎样管理进程 在多任务系统中进程的调度 1.1进程是什么? gedit hello.c #include stdio.h void main() { while (1) { printf(“hello ,I am alive\n”); sleep(10); } } 进程和可执行程序的关系 进程是可执行程序的一次执行过程 进程是研究操作系统的核心 1.2 Linux中进程核心数据结构描述 进程的“人事档案” struct task_struct { pid_t pid; pid_t pgrp; struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr; } 进程的“人事档案”(CONT.) struct task_struct { …… struct mm_struct *mm; …… } 进程的“人事档案”(CONT.) struct task_struct { …… struct fs_struct *fs; struct files_struct *files; …… } 进程的“人事档案”(CONT.) struct task_struct { …… volatile long state; …… } 进程的“人事档案”(CONT.) struct task_struct { …… long counter; long nice; unsigned long policy; …… } 进程“人事档案”总结 进程的“人事档案”信息非常丰富,从各个侧面描述了进程 进程是Linux内核的核心,要了解Linux内核,必须首先掌握进程 PART TWO 进程控制 关注点 创建进程 进程控制 进程创建 进程创建 fork( ):产生子进程 头文件:#includeunistd.h 格式: pid_t fork(); 返回值: 0:子进程 子进程ID(大于0的整数):父进程 -1:出错 调用fork()函数后,系统将创建一个与当前进程相同的新的进程。它与原有的进程具有相同的数据、连接关系和从同一处执行的连续性 原有的进程称为父进程,新生的进程称为子进程 例1 产生新进程 #include stdio.h #include sys/type.h #include unistd.h void main() { pid_t pid; printf(“I am lonely,I will create a baby\n”); pid=fork(); if(pid0) { printf(“create baby failed\n”); exit(1); } printf(“haha,family add a new member\n”); } 例1 产生新进程 #include stdio.h #include sys/type.h #include unistd.h void main() { pid_t pid; printf(“I am lonely,I will create a baby\n”); pid=f
文档评论(0)