嵌入式课堂整理8

本文介绍了嵌入式Linux系统中的多任务实现,包括进程的特性、创建方式、进程退出与等待,以及进程间通信(IPC)的原理。详细讲解了无名管道和有名管道的使用,消息队列、共享内存和信号量的概念及其在进程通信中的应用。这些机制在多进程通信中起到关键作用,确保数据的安全传输和资源的正确管理。
摘要由CSDN通过智能技术生成

嵌入式Linux多任务:进程、线程
(1)硬件条件:单个CPU单个核
(2)单任务:一个任务执行完毕之后下个任务才能执行;
(3)多任务:任务的执行可以被中断,中断之后可以执行其他任务; (并发/并行)
(4)单核CPU:并发
(5)多核的CPU:并发,并行
一、进程实现多任务
1.特点:给每个进程分配独立的地址空间, 4G的大小!(1G内核, 3G用户空间:栈、堆、数据段、代码段) ;互不干扰;
2.进程创建方式: fork>exec函数族>system>vfork;
3.进程的退出: exit ()库函数:清理缓冲
_exit()系统调用API:不清理缓冲
4.进程等待: wait () ; 解决:僵尸进程
<僵尸进程、孤儿进程、守护进程、控制台进程、后台进程>
5.学习目标:学会创建多任务程序:进程;
二、进程间通信-IPC
1.原理:尽管进程空间是各自独立的,相互之间没有任何可以共享的空间,但是至少还有一样东西是所有进程所共享的,那就是OS,因为不管运行有多少个进程,但它们共用OS只有一个。
既然大家共用的是同一个OS,那么显然,所有的进程可以通过大家都共享第三方0S来实现数据的转发。
2.因此进程间通信的原理就是, OS作为所有进程共享的第三方,会提供相关的机制,以实现进程间数据的转发,达到数据共享的目的。
广义上的进程间通信: A进程-文件-B进程或A进程-数据库-B进程
3.通过普通文件通信
在这里插入图片描述
在这里插入图片描述结果:通信成功
在这里插入图片描述
三、侠义上的真正的“进程间通信" (内核提供) :
1、管道
①无名管道
特点:管道只允许具有血缘关系的进程间通信,如父子进程间的通信;
管道只允许单向通信;
读管道时,如果没有数据的话,读操作会休眠(阻塞) ,写数据时,缓冲区写满会休眠(阻塞)。
函数原型
头文件: #include <unistd.h>
函数: int pipe(int pipefd[2);
参数:缓存地址,缓存用于存放读写管道的文件描述符。从这个参数的样子可以看出,这个缓存就是一个拥有两个元素的int型数组。
(1)元素[0]:里面放的是读管道的读文件描述符
(2)元素[1]:里面放的是写管道的写文件描述符。
功能:创建一个用于亲缘进程(父子进程)之间通信的无名管道(缓存) ,并将管道与两个读写文件描述符关联起来。特别需要注意的是,这两个读和写文件描述符,是两个不同的文件描述符。
注意:创建管道需要在创建子进程之前,因为如果创建在其之后,那么父子进程会各自创建一个管道,此时就有两个管道ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值