操作系统面试总结

题目来源牛客网文章——《感谢牛客网!发一波面经!》
索引:

Q Title
1 进程和线程的区别?
2 进程间通信的方式有什么?线程间通信的方式有什么?

Q1:进程和线程的区别?

参考资料《进程和线程的主要区别(总结)》

进程 线程
根本区别 操作系统资源分配基本单位任务调度和执行的基本单位 任务调度和执行基本单位
转换开销 每个进程都有独立代码和数据空间,程序间切换会有较大开销 线程可看做轻量级的进程。同一类线程共享代码和数据空间,每个线程拥有独立的程序计数器和运行栈,切换开销小
所处环境 操作系统中可以有多个进程 一个进程中可以有多个线程
内存分配 每个进程都有分配的内存 不分配内存,线程使用的资源来自于所属进程,线程组之间共享资源

 
 
 
 
 

Q2:进程间通信的方式有什么?线程间通信的方式有什么?

一、进程间通信

参考资料《进程间的五种通信方式介绍》

总结

管道:速度慢,容量有限,只能父子进程通信
FIFO:任何进程间都可以通信,但是速度慢
消息队列:容量受系统限制,且需要考虑上次未读完内容。
信号量:不能传递复杂消息,只能用于同步
共享内存:容易控制容量,速度快,但要保持同步。

管道

半双工:数据只能在一个方向流动,有固定读端和写端
仅能用于亲缘关系进程间通信:父子进程或兄弟进程
只存在于内存:可以看做特殊的文件,也可以用read和write。但是他不是普通的文件,并不输入任何文件系统。

FIFO

可以在无关进程之间通信
有路径名,以特殊设备文件形式存在于文件系统

消息队列

消息的链接列,存放在内核
面向记录,消息有特定格式特定优先级
独立于发送和接收进程,进程终止,消息队列中内容不会消失
可以实现消息随机查询,消息不一定按先入先出读取,也可以按消息类型读取

信号量

用于进程间同步,在进程间传递数据需要结合共享内存
基于操作系统PV操作,程序对信号量操作是原子
每次操作可加减任意值
支持信号量组

共享内存

两个或多个进程,共享一个给定的存储区
共享内存是最快的IPC,因为进程直接对内存存取
多个线程可以同时操作,所以需要同步
信号量+共享内存通常同时使用,信号量用于同步对共享内存的访问

二、线程间通信

同步

多个线程通过synchronized通讯,类似于共享内存

while轮询

线程A不断改变条件,线程B不断查看条件是否满足需求(比方说=5),从而实现通讯。
效率不高,因为B一直在查看,没做别的

wait/notify

进入阻塞,而不是像轮询一样一直占用CPU资源

管道通信

通过管道,将一个线程的消息发送个另一个线程

你可能感兴趣的:(操作系统面试总结)