首页 > 编程知识 正文

linux进程线程面试题,linux查看程序线程

时间:2023-05-05 08:11:15 阅读:61990 作者:4307

Linux系统中的进程通信方式主要有以下:

同一主机上的进程通信方式

* UNIX进程间通信方式:包括管道(PIPE )、有名管道(FIFO )和信号(Signal )

*系统v进程通信方式:信号、消息队列、

共享内存和

网络主机之间的进程通信方式

* RPC :远程过程调用

* Socket:是目前最流行的网络通信方式,是基于TCP/IP协议的通信方式。

各自的特征:

管道:它传递的数据是单向的,只能从一个流向另一个。 也就是说,是半双工通信方式; 仅用于有亲缘关系的进程之间的通信,是亲缘关系,即父子进程或兄弟进程; 因为传输的流没有名称、大小受限、没有格式,所以在两个过程通信时必须约定数据通信的格式。 管道就像一个特殊的文件,但它位于内存中,在创建管道时,系统将页面分配给管道作为数据缓冲区,然后过程通过读写此数据缓冲区来完成通信。 其中的一个过程只能读一个,只能写,所以被称为半双工通信。 为什么只能读一个而不能写呢? 写入过程写入到缓冲区的末尾,读取过程在缓冲区的开头读取,因此分别

的数据结构不同,因此功能不同。

有名的管子:看这个名字就知道大概了。 和管道不同的是有名字。 与此不同,只能在与管道有亲缘关系的进程之间进行通信。 路径名与之相关联,并且有自己的传输格式。 知名管道与管道的另一个区别是,知名管道是设备文件,存储在文件系统中,可以通过非亲缘关系流程访问,但按照先进先出原则读取数据。 同样是单双的。

消息队列:每个消息队列都是存储在由消息队列标识符标识的内核中的消息链表。 与管道不同,消息队列存储在内核中,并且只能在内核重新启动时删除消息队列。 内核重新启动是指系统重新启动,也限制消息队列的大小。

信号:也可以说是一种常用于解决进程或线程同步问题,特别是关键资源访问同步问题的计数器。 关键资源:在某个时间点只能由一个进程或线程操作的资源,如果信号值大于或等于0,则表示并发进程可以访问的关键资源数;如果小于0,则表示等待使用关键资源的进程数更重要的是,信号量的值只能通过PV操作进行更改。

共享内存:是分配其他进程可以访问的内存。 共享内存是最有用的进程间通信方式,可以说是最快的IPC形式。 首先,在使用共享内存空间之前,必须使用系统函数将其添加到进程的地址空间或映射到进程空间。 两个不同进程a、b共享存储器意味着同一物理存储器

进程a和b各自的进程地址空间。 进程a可以立即看到进程b对共享存储器中数据的更新,反之亦然。 由于多个进程共享同一存储器区域,所以一定需要某种同步机制,相互

排斥锁定和信号量都很好。 显然采用共享存储器通信

的好处是高效,因为进程可以直接读写内存,而不需要复制数据。 管道和消息队列等通信方式要求内核和用户空间进行4次数据复制

共享内存只复制两次数据[1]。 一次从输入文件到共享内存区域,另一次从共享内存区域到输出文件。 实际上,在进程之间共享内存时,不一定是在读写少量数据之后

取消映射,有新通信时,重新构建共享内存区域。 相反,它将保留共享空间,直到通信完成。 这样,数据内容将保存在共享内存中,不会写入文件。 共享内存

的内容经常在取消映射时写入文件。 因此,使用共享存储器的通信方式非常高效。

信号:信号是在软件级模拟中断机制,从原理上讲,过程接收信号和处理器接收中断请求是一样的。 信号是异步的,一个过程不必不做任何操作就等待信号的到达,实际上该过程不知道信号是什么时候到达的。 信号是进程间通信机制中唯一的异步通信机制,可以被认为是异步通知,通知接收该信号的进程发生了什么情况。 信号机制经过POSIX的实时扩展,变得更加强大,除了基本的通知功能以外,还可以传递附加信息。 信号事件的发生有两个来源。 是硬件源。 例如,按下键盘或发生了其他硬件故障。 软件源。 信号分为可靠信号和不可靠信号、实时信号和非实时信号。 过程以三种方式响应信号1 .忽略信号2 .捕获信号3 .执行默认操作。

套接字:套接字也是进程间通信机制,与其他通信机制不同,它可以用于不同主机之间的进程通信。 这是一个关于网络编程的故事

很多时候,这里不叫拉。

Linux系统中的线程通信方式主要有以下:种

*锁定机制:包括互斥锁、条件变量和读写锁

排他锁提供了一种防止数据结构排他地同时更改的方法。

条件变量允许将进程作为原子阻止,直到特定条件变为真。 条件测试在互斥锁的保护下进行。 条件变量总是与互斥锁一起使用。

读/写锁定允许多个线程同时读取共享数据,但写入操作是互斥的。

信号机制(Semaphore ) :包括无名线程信号和命名线程信号

信号机制(Signal )相似过程之间的信号处理

线程之间的通信目的主要用于线程同步。 线程不像进程通信

用于数据交换的通信机制。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。