两道操作系统面试题 4.9

进程和线程的区别是什么?

  • 本质方面,进程是操作系统进行资源分配的基本单位;线程是任务调度和执行的基本单位
  • 在切换开销方面,每个进程都有独立的代码和数据空间(程序上下文),进程之间的切换会有较大的开销;线程可以看做轻量级的进程,一个进程中的线程之间共享代码和堆空间,同一进程中的线程的切换,只需要切换运行栈和程序计数器,开销较小‘
  • 在稳定性方面,如果一个进程崩溃了,往往不会影响其他进程及其兄弟进程和父进程;如果一个线程崩溃了,会影响到所在的整个进程
  • 内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;对线程而言,除了CPU外,系统不会为其分配内存,线程所使用的资源来自其所属进程的资源,同一进程中的线程之间只能共享资源
  • 包含关系:一个进程中可以包含多个线程;一个线程会属于一个进程

进程间的通信方式(IPC)有哪些?

  • 管道:包含匿名管道和有名管道。匿名管道仅用于父子进程和兄弟进程之间的通信,有名管道可以作为文件存在,可以让无亲缘关系的进程之间通信。特点是简单但单向,适合小数据流,效率较低。
  • 消息队列:内核维护的消息链表,进程通过唯一标识符访问。特点是支持不同类型消息(按优先级或类型读取),但涉及内核态切换,性能一般。
  • 共享内存:多个进程映射同一块物理内存,直接读写数据。特点是速度最快(无需复制数据),但需同步机制(如信号量)避免冲突。
  • 信号量:用于进程同步的计数器,通过 P()等待 和 V()释放操作控制资源访问。特点是解决竞态条件,本身不传递数据,需配合其他IPC使用。
  • 信号:异步通知机制(如 SIGINT 终止进程),通过 kill 命令或系统调用发送。特点是轻量级,仅传递信号编号,不能传输复杂数据。
  • 套间字:支持跨网络通信(如TCP/UDP),也可用于本地进程。特点是通用性强,但开销较大,适用分布式系统。
  • 内存映射文件:文件映射到进程内存空间,多个进程共享同一文件。特点是适合大文件处理,类似共享内存但依赖文件系统。

选择依据

  • 速度:共享内存 > 管道 > 消息队列 > 套接字。
  • 复杂度:套接字 > 共享内存(需同步) > 管道。
  • 场景:简单数据流用管道;高性能用共享内存;跨机器用套接字。

两道操作系统面试题 4.9
https://jlqusername.github.io/2025/04/09/两道常见的操作系统面试题 4.9/
作者
B907
发布于
2025年4月9日
许可协议