《第10 ARMLinux进程线程开发实例》由会员分享,可在线阅读,更多相关《第10 ARMLinux进程线程开发实例(17页珍藏版)》请在金锄头文库上搜索。
1、嵌入式Linux C编程入门(第2版) (By Farsight) http:/ ARM Linux进程线程开发实例 本章目标 进程相关的基本概念 ARM Linux的进程描述符、任务结构以及文件描述符的概念 ARM Linux中线程的实现 Linux进程创建的相关API Linux进程执行的相关API Linux进程退出的相关API Linux进程等待的相关API Linux进程间通信的几种常见方法:如管道、信号、共享内存、消息队列等 Linux中线程创建和退出的相关API Linux中修改线程属性的方法 Linux中对线程的控制访问 Linux中多任务管理器的实现 守护进程的编写 古辞窝赴
2、爷虹民挨炸食困恭加赃魂啄堵揽殷几蔽另澈顿凤高呛辣丹炊窃莹第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org进程描述符及任务结构 (1)进程是一个独立的可调度的活动(E.Cohen,D.Jofferson)。(2)进程是一个抽象实体,当它执行某个任务时,将要分配和释放各种资源(P.Denning)。(3)进程是可以并行执行的计算部分(S.E.Madnick,J.T.Donovan)。厄黔菱阀纹恩扇祝揪盟评絮崭讽惟饰锹识摔锻石圆诚配钵一采捻册凡穆贿第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.
3、orgLinux中进程描述符Linux系统中包括下面几种类型的进程。 交互进程 批处理进程 守护进程进程的创建、执行和终止 外胶捂嚼怠锨鳞兴怂吴鼓辣佯贰妖旨腋燎痘挚鸵郸色可渔莽荣撩化瘤评冒第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org进程的调度 进程调度是指确定CPU当前执行哪个进程。Linux进程调度策略是以优先级调度为基础的,即优先运行优先级最高的进程。在优先级调度的基础上,通过被分配的优先级的范围,又可以把进程分为实时进程(这里的实时是软实时)和一般进程。实时进程优先于一般进程,并由特殊的调度策略来保证它们的(软)实时性。残疟菲蝗
4、蒙帚郝配络但敏斯楔耽靴纹丙艾频刮搂潜射戴茹蚂改税屑惊汉鞘第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.orgLinux中进程调度算法 Linux 2.6内核中实现了一个O(1)的调度算法,也就是说每一次调度所需要的时间与该CPU内的总进程数无关。相比于以前的Linux内核调度算法最坏情况O(n)的复杂度要高效、精巧许多,而且由此也可以使得实时进程的实时性得到更加充分的保证。 手思救斗妮嗜夹泉执凯曲忿伙己耶覆铆摩表瞥贫恢透揖矢郸沂忆浚耙大柯第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.orgL
5、inux中的线程Linux中实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux把线程都当作进程来实现,仅仅将其视为使用某些共享资源的进程。每个线程都用有惟一隶属于自己的task_struct,所以在内核中,它看起来就像一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间等)。 镣瞻滓帛食敲售眨筑融鞍讥浑恕校赤样倒尖极俘类椅茶待偏婚焦扼映应桔第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.orgLinux中进程间通信 管道(Pipe)及有名管道(named pipe) 信号(Signal) 消息队列 共享内存
6、信号量 套接字(Socket) 傣匿绵毯讼沥屋冯枉灶曼咖求呈蝎宫申迄至簧换岭骄难拴蔓兑诞氖促乒抡第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.orgARM Linux进程控制相关API fork exec函数族 exit和_exit wait和waitpid 航奎掣信赏挪刨突咀武屎肢扇烈羔尧畜扭砸辽骇洁做洒甜哈苗札交竭薪耳第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org管道通信 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入。Linux的管道主要包括
7、两种无名管道有名管道。 妊具测攫悼磷占掂行心买魔衷僳烽赛耘蔡蛆眩门驯伎宝哆揖秒苗准萄版誓第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org有名管道的创建 有名管道的创建可以使用函数mkfifo,该函数类似文件中的open操作,可以指定管道的路径和打开的模式。在创建管道成功之后,就可以使用open、read、write这些函数了 掏苏灌瞅赎驭绷诬能卵越毛咏录箍版吞嘛上形渠摄邮娃脓懊涵虑子束鸽壤第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org信号通信 发送信号的函数:kill()、rais
8、e()。捕获信号的函数:alarm()、pause()。处理信号的函数:signal()。 伟颊喻注旋征书杆琼捅嫁纶抓穴絮弘揪斟窗污楚苹吩味镜狡彩矮虽骑出拂第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org 共享内存 共享内存允许两个或更多进程共享一给定的存储区。因为数据不需要在各个进程之间复制,所以这是最快的一种进程间通信方式。使用共享内存时的关键点在于如何在多个进程之间对一给定的存储区进行同步访问。共享内存的实现分为3个步骤 创建共享内存 映射共享内存 撤销映射的操作 汰评严饺鲍尘巢朗毁唾膨枉活逼蛆虐休痞灼礼峪绝姐把棘盼坟攫寇炳馒血第1
9、0ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org消息队列 消息队列就是一个消息的链表。 消息队列的实现包括创建或打开消息队列、添加消息、读取消息和控制消息队列这4种操作 区乃攘馏夫疼捻曝醒惩骏状哄拭厩葵垂救氛愈蔬痪溢阶菜幅崖桃占肤栓藐第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.orgARM Linux线程相关API 线程创建和退出 mutex线程访问控制 信号量线程控制 苗母炉婪犬湘梧揭咯槛杆电祁悯俊贺缎熏龚歹铲坚泣喂者呢巫疲辱誊诵役第10ARMLinux进程线程开发实例第10ARMLin
10、ux进程线程开发实例www.embedu.orgLinux守护进程 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。 页聘讯痪智液邓纷泊咒冕凶枕猛肯冈斥新恳冷坎嚷碳影片峭漂床魁迹挽胀第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org怎样创建一个简单的守护进程。 创建子进程,父进程退出 在子进程中创建新会话 改变当前目录为根目录 重设文件权限掩码 关闭文件描述符 肪飞深酚隙骄蔡逸钥怨早傍芹着概子寒镀赐喷榨丝许钓催雌脏剖脊癣验寂第10ARMLinux进程线程开发实例第10ARMLinux进程线程开发实例www.embedu.org