版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式Linux学习之-多进程编程1.多进程控制理论进程:进程是一个具有一定独立功能的程序的一次运行活动。进程的特点:动态性、并发性、异步性,独立性动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的.并发性:任何进程都可以同其他进程一起并发执行独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 。进程四要素:程序块、数据块、进程控制块、独立用户空间.进程的状态:就绪态、执行态、阻塞态进程ID(PID):标识进程的唯一数字。父进程的ID(PPID),启动进程
2、的用户ID(UID)进程互斥:进程互斥是指当有若干个进程都要使用某一资源时,但该资源在同一时刻最多只允许一个进程使用,这时其它进程必须等待,直到占用该资源的进程释放资源为止。临界资源:操作系统中将同一时刻只允许一个进程访问的资源称为临界资源。临界区:进程中访问临界资源的那段程序代码就称为临界区。为了实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。进程同步:一组进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的这组进程称为合作进程。最为有名的是生产者与消费者进程。进程调度:按一定的算法,从一组待运行的程序中选出一个来占有CPU运行。调度算法:先来先服务(FIFO),短进程优
3、先,高优先级优先,时间片轮转调度分类:按调度时机,调度分为抢占式调度的非抢占式调度。死锁:多个进程因竞争资源而形成一种僵局,导致这些进程都无法往前执行。死锁的发生必须具备以下四个必要条件。 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。 3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
4、。 4)环路等待条件:指在发生死锁时,必然存在一个进程资源的环形链,即进程集合P0,P1,P2,···,Pn中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,Pn正在等待已被P0占用的资源。如何防止死锁?只要打破四个必要条件之一就能有效预防死锁的发生:打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则远行,不然就等待,这样就不会占有且申请。打破循环等待条件:实现资源有序分配
5、策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源(1) 保证不在临界区中进入另一个临界区,这是最简单的(2) 即使在一个临界区进入另一个临界区,要为进入临界区的次序设置好顺序,比如,只有先进入临界区A后才以能进入临界区B。但目前linux并无这样的措施,这也是以后可以加的一个改进。 linux情景分析重要API函数函数原型Pid_t getpid(void)函数说明获取进程的PID函数参数无返回值返回调用进程的ID实例:#include <stdio.h>#include <unistd.h>#include <sys/types.h>
6、void main(void) pid_t id = 0; id = getpid(); printf("process id is %dn",id);2.多进程程序设计Fork和vfork的区别(1) fork:子进程拥有独立的数据段、堆栈vfork:子进程和父进程共享数据段、堆栈(2) fork:子进程的执行顺序不确定vfork:子进程先运行,父进程后运行3.Linux进程通讯方式(1)无名管道(2)有名管道(3)信号量(4)信号(5)共享内存(6)消息队列(7)套接字(socket)3.1无名管道3.3.1无名管道相关关键概念无名管道是Linux支持的最初Unix I
7、PC形式之一,具有以下特点:l 管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立两个管道;l 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)l 单独构成一种独立的文件系统,对于管道两端的进程而言,管道就是一个文件。但它不是普通的文件,不属于某种文件系统。l 数据的读出和写入:管道中的数据被读出后,数据就不存在了。去读取空管道时会阻塞或出错,向满管道写数据会阻塞或出错。l 管道容量为64k.3.3.2管道通信特点1). 管道通讯是单向的,有固定的读端和写端。2). 数据被进程从管道读出后,在管道中该数据就不存在了2). 数据被进程从管道读出后,在管道中该数据就不存在了3)
8、. 当进程去读取空管道的时候,进程阻塞。4). 当进程往满管道写数据时,进程阻塞。5). 管道容量为64KB(#define PIPE_BUFFERS 16 include/linux/pipe_fs_i.h)3.3.3管道的读写规则管道两端可分别用描述字fd0以及fd1来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd0表示,称其为管道读端;另一端则只能用于写,由描述字fd1来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O函数都可以用于管道,如close、read、write等等。从管道中读取数据:
9、60;如果管道的写端不存在,则认为已经读到了数据的末尾,读函数返回的读出字节数为0; · 当管道的写端存在时,如果请求的字节数目大于PIPE_BUF,则返回管道中现有的数据字节数,如果请求的字节数目不大于PIPE_BUF,则返回管道中现有数据字节数(此时,管道中数据量小于请求的数据量);或者返回请求的字节数(此时,管道中数据量不小于请求的数据量)。注:(PIPE_BUF在include/linux/limits.h中定义,不同的内核版本可能会有所不同。Posix.1要求PIPE_BUF至少为512字节,red hat 7.2中为40
10、96)3.3.4函数学习l 创建管道3.3.5综合实例-父子进程利用管道通讯=pipe_rw.c=3.2有名管道3.2.1基本概念有名管道又称为FIFO文件,因此我们对名管道的操作可以采用操作文件的方法,如使用open,read,write等.l FIFO文件对比普通文件FIFO文件在使用上和普通文件有相似之处,但是也有不同之处:1). 读取Fifo文件的进程只能以”RDONLY”方式打开fifo文件。2). 写Fifo文件的进程只能以”WRONLY”方式打开fifo3). Fifo文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还存在。l3.2.2函数学习l 创建有名管道3.2
11、.3综合实例-任意两个进程利用名管道通讯=fifo_write.c=fifo_read.c=3.3信号3.3.1基本概念l 信号:在古老的战场上,信号是最有效,最直接的通讯方式;在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。l 信号处理流程:l 信号类型Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有:SIGKILL: 杀死进程SIGSTOP:暂停进程SIGSTOP:暂停进程SIGCHLD:子进程停止或结束时用来通知父进程3.3.2函数学习l 发送信号l 处理信号3.3.3综合实例-AB进程利用信号通讯
12、=aprocess.c=bprocess.c=3.4信号量信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。分类:二值信号灯:信号灯的值只能取0或1计数信号灯:信号灯的值可以取任意非负值。3.4.1信号量互斥3.4.1.1公标栏问题数学与英语科代表都要在公告栏写一些信息,分别是“数学课考试”,“英语课取消”。但数学科代表在写完“数学课”后因有事走开了一会,此时英语科代表进来在公告栏上写“英语课”,此时,英语科代表有高空槽走开了一会,数学科代表回来了,继续写“考试”,然后完成离
13、开了。英语科代表回来了,接着写“取消”。最后,公告栏的内容是“数学课英语课考试取消”。显示,从公告栏上获取的信息不是想要的。信号量互斥就是解决这种资源的共享问题。3.4.1.2函数学习l 创建/打开信号量l 操作信号量l 释放信号量 3.4.1.3综合实例-公告栏问题=student1.c=student2.c=Board.txt3.4.2信号量同步3.4.2.1基本概念一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。3.4.2.2综合实例-生产者消费者实验=productor.c=customer.c=3.5共享内存3.5.1基本概念共享内存是IPC机制中的一种. 顾名思义,它允许两个不相关的进程访问同一段内存,这是传递数据的一种非常有效的方式。3.5.2函数学习l 创建打开共享内存l 映射共享内存l 解除共享内存l 删除共享内存3.5.3综合实例-共享内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 严格规范涉企行政检查实施方案
- 德育室责任制度
- 意识形态追究责任制度
- 房屋征收责任制度
- 执法分区责任制度
- 扶贫攻坚领导责任制度
- 抓实干部责任制度
- 2026二年级数学下册 解决有余数问题
- 招办责任制度
- 排水防涝岗位责任制度
- 2026年安庆职业技术学院单招职业技能考试题库含答案详解(a卷)
- 2026年常州信息职业技术学院单招职业适应性测试题库含答案详解
- 2026年合肥职业技术学院单招职业技能测试题库带答案详解(b卷)
- 医院合同审查监督制度
- 2026年黑龙江生态工程职业学院单招职业技能测试模拟测试卷带答案
- 2026年春季学期课后服务工作实施方案
- 2026年内蒙古建筑职业技术学院单招职业技能考试题库附答案详解(基础题)
- 第3课 一切靠劳动 课件+视频-2025-2026学年道德与法治三年级下册统编版
- 2026年九江职业大学单招职业适应性测试题库及一套参考答案详解
- 2026年建筑施工行业复工复产应急预案
- 国家基层高血压防治管理指南 2025版图文解读
评论
0/150
提交评论