嵌入式linux开发基础知识整理

1.有名管道  VS  无名管道

区别:无名管道是一种非永久性的管道通信机制,当访问它的进程全部终止时,它将随之被撤销,它不能用于不同族系的进程间通信,只能用于父子进程间的通信,而有名管道是一种永久性的管道通信机制,可以用于不同族系的进程间的通信。

2.消息队列  VS 管道

区别:管道是以管道文件为中间介质,而消息队列的方式是以消息缓冲区为中间介质,消息队列与管道相比具有更大的灵活性,首先,它提供有格式的字节流,有利于减少开发人员的工作量,其次,消息具有类型,在实际应用中,可作为优先级使用。

3.共享内存和管道

区别:共享内存是一种最快的进程通信机制,但是比起管道来需要处理竞态。

 

4.自旋锁 VS 信号量

区别:

1.当锁不能获得时,使用信号量的开销是进程上下文切换时间Tsw,使用自旋锁的开销是等待获取自旋锁(由临界区执行时间决定)Tcs,若Tcs比较小,宜使用自旋锁,若Tcs很大,应使用信号量。

2.信号量所保护的临界区可包含引起阻塞的代码,而自旋锁绝对要避免用来保护包含这样代码的临界区,因为阻塞意味着要进行进程的切换,如果进程被切换出去后,另一个进程企图获取本自旋锁,死锁就会发生。

3.信号量存在于进程上下文,因此,如果被保护的共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间只能选自旋锁,当然如果一定要选信号量,则只能通过down_trylock()方式进行,不能获取就立即返回避免阻塞。

 

5.tasklet、软中断  VS  工作队列

区别:软中断和tasklet运行于软中断上下文,仍属于原子上下文的一种,而工作队列则运行于进程上下文,因此,软中断和tasklet处理函数不能睡眠,而工作队列处理函数允许睡眠。

 

6.kmalloc、kzalloc、__get_free_page VS vmalloc

区别:前面三个函数申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真正的物理地址只有一个固定的偏移,因此存在比较简单的转换关系。kzalloc在kmalloc的基础上将分配到的内存初始化为0。vmalloc在虚拟内存空间给出一块连续的内存区,实际上,这片连续的虚拟内存在物理内存中并不一定连续,而vmalloc申请的虚拟内存和物理内存之间也没用简单的换算关系。

 

待续......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值