嵌入式Linux学习之--多进程编程综述.docx

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux学习之--多进程编程1.多进程控制理论进程:进程是一个具有一定独立功能的程序的一次运行活动。进程的特点:动态性、并发性、异步性,独立性动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的.并发性:任何进程都可以同其他进程一起并发执行独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。进程四要素:程序块、数据块、进程控制块、独立用户空间.进程的状态:就绪态、执行态、阻塞态进程ID(PID):标识进程的唯一数字。父进程的ID(PPID),启动进程的用户ID(UID)进程互斥:进程互斥是指当有若干个进程都要使用某一资源时,但该资源在同一时刻最多只允许一个进程使用,这时其它进程必须等待,直到占用该资源的进程释放资源为止。临界资源:操作系统中将同一时刻只允许一个进程访问的资源称为临界资源。临界区:进程中访问临界资源的那段程序代码就称为临界区。为了实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。进程同步:一组进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的这组进程称为合作进程。最为有名的是生产者与消费者进程。进程调度:按一定的算法,从一组待运行的程序中选出一个来占有CPU运行。调度算法:先来先服务(FIFO),短进程优先,高优先级优先,时间片轮转调度分类:按调度时机,调度分为抢占式调度的非抢占式调度。死锁:多个进程因竞争资源而形成一种僵局,导致这些进程都无法往前执行。死锁的发生必须具备以下四个必要条件。 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。 3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。 4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。如何防止死锁?只要打破四个必要条件之一就能有效预防死锁的发生:打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则远行,不然就等待,这样就不会占有且申请。打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源(1)保证不在临界区中进入另一个临界区,这是最简单的(2)即使在一个临界区进入另一个临界区,要为进入临界区的次序设置好顺序,比如,只有先进入临界区A后才以能进入临界区B。但目前linux并无这样的措施,这也是以后可以加的一个改进。----《linux情景分析》重要API函数函数原型Pid_tgetpid(void)函数说明获取进程的PID函数参数无返回值返回调用进程的ID实例:#include stdio.h#include unistd.h#include sys/types.hvoid main(void){pid_t id = 0;id = getpid();printf(process id is %d\n,id);}2.多进程程序设计Fork和vfork的区别fork:子进程拥有独立的数据段、堆栈vfork:子进程和父进程共享数据段、堆栈fork:子进程的执行顺序不确定vfork:子进程先运行,父进程后运行3.Linux进程通讯方式(1)无名管道(2)有名管道(3)信号量(4)信号(5)共享内存(6)消息队列(7)套接字(socket)3.1无名管道3.3.1无名管道相关关键概念无名管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)单独构成一种独立的文件系统,对于管道两端的进程而言,管道就是一个文件。但它不是普通的文件,不属于某种文件系统。数据的读出和写入:管道中的数据被读出后,数据就不存在了。去读取空管道时会阻塞或出错,向满管道写数据会阻塞或出错。管道容量为64k.3.3.2管道通信特点1). 管道通讯是单向的,有固定的读端和写端。2). 数据被进程从管道读出后,在管

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档