4.14嵌入式设计(总结)

1.嵌入式Linux多任务:进程、线程
硬件条件:单个CPU单个核
单任务:一个任务执行完毕之后下个任务才能执行;
多任务:任务的执行可以被中断,中断之后可以执行其他任务;重点词汇:(并发/并行)
单核CPU:并发
多核的CPU:既存在并发,又存在并行
2.进程实现多任务
特点:给每个进程分配独立的地址空间
如:4G的大小(1G内核, 3G户空间:栈堆、数据段、代码段);互不干扰;
3.进程创建方式:fork > exec函数族> system > vfork;
进程的退出:exit()库函数/清理缓冲 ;exit()系统调用API/不清理缓冲;
进程等待:wait(); 解决:僵尸进程
<僵尸进程、孤儿进程、守护进程、控制台进程,后台进程>

进程间通信

一、简介
1、同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO),消息队列(message queue)和共享内存(share memory)。
2、同主机进程间同步机制:信号量(semaphore)
3、同主机进程间异步机制:信号(signal)
4、网络主机间数据交互机制:套接字(socket)

二、管道
1、加粗样式无名管道PIPE,只能用于具有亲缘关系(父子进程)间的通信,无名管道在通信双方退出后自动消失。
2、有名管道:克服了无名管道的瞬时性的问题,采用管道文件来实现同一主机间的任意两个进程间的数据的传递。
3、信号:信号其实是一种软中断机制,采用一种异步的机制,在信号发生时处理特定的时间,但是要注意的是,这同硬件中的中断,还是有一定区别的。

三、消息队列
消息队列:消息队列主要用来实现两个进程间少量的数据的通信,并且接收方可以根据消息的类型,选择接收消息。
消息队列与管道通信相比,其优势是对每个消息指定特定的消息类型,接收的时候不需要按照队列次序,而是可以根据自定义条件接收特定类型的消息。
可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程可以从消息队列中读取消息。

四、共享内存
共享内存允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或两个以上的进程映射至自身的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个共享内存的进程,通过一个简单的内存读取错做读出,从而实现了进程间的通信。
采用共享内存进行通信的一个主要好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝,对于像管道和消息队里等通信方式,则需要再内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次:一次从输入文件到共享内存区,另一次从共享内存到输出文件。
一般而言,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时在重新建立共享内存区域;而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件,因此,采用共享内存的通信方式效率非常高。

五、信号量
信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值