发 帖  

[经验] 开学了,三道嵌入式面试题也来了

2018-9-3 14:57:47  3637 嵌入式
分享
0
本帖最后由 weidongshan 于 2018-9-3 15:35 编辑

一、进程间通信方式有哪些?有何优缺点?
二、野指针”是如何产生的?如何避免“野指针”?

三、简要说明下TCPIP通信建立的过程是怎样的?

题一答案:
(1)管道
管道分为无名管道和有名管道。

无名管道

无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系一般指的是父子关系。无名管道一般用于两个不同进程之间的通信。

当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,,这样提供了两个进程之间数据流动的一种方式。

有名管道也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。

它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。


无名管道

优点:简单方便;

缺点:

  • 局限于单向通信
  • 只能创建在它的进程以及其有亲缘关系的进程之间;
  • 缓冲区有限

有名管道

优点:可以实现任意关系的进程间的通信;

缺点:
  • 长期存于系统中,使用不当容易出错;
  • 缓冲区有限


(2)信号量
缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合。

(4)共享内存

共享内存是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC(进程间通信)方式, 它是针对其它进程间通信方式运行效率低而专门设计的,它往往与其他通信机制,如信号量,配合使用,进而实现进程间的同步与通信。

共享内存的特点:

共享内存是以传输数据为目的 。

共享内存无同步无互斥 。

共享内存是所有进程间通信速度最快的。

共享内存的生命周期随内核



优点:使用共享内存进行进程间的通信非常方便,而且函数的接口也简单,数据的共享使进程间的数据不用传送,而是直接访问内存,加快了程序的效率。同时,它也不像无名管道那样要求通信的进程有一定的父子关系。



缺点:

通信是通过将共无法实现享空间缓冲区直接附加到进程的虚拟地址空间中实现。

利用内存缓冲区直接交换信息,内存的实体存在于计算机中,只能让同一个计算机系统中的诸多进程共享,不方便多个计算机网络通信。

共享内存没有提供同步的机制,这使得我们在使用共享内存进行进程间通信时,往往要借助其他的手段来进行进程间的同步工作。

题二答案:
野指针”产生原因及解决办法如下:
(1)声明指针变量时没有被初始化。解决办法:声明指针时初始化,可以是具体的地址值,也可让它指向NULL。
(2)指针 p 被 free 或者 delete 后,没有设置为 NULL。解决办法:指针指向的内存空间被释放后指针应该指向NULL。
(3)操作指针时超越了变量的作用范围。解决办法:在变量的作用域结束前释放掉变量的地址空间并且让指针指向NULL。

注意:“野指针”的解决方法也是编程规范的基本原则,平时使用指针时一定要避免产生“野指针”,在使用指针前一定要检验指针的合法性。


题三答案:

联系我们
微信/手机:13266630429,验证:发烧友

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表