Skip to content

2014年 408 操作系统 第 31 题

操作系统2014年选择题2分

题目

下列关于管道(Pipe)通信的叙述中,正确的是( )。

错因

A

把"管道是一种通信机制"当成了"全功能通信"。但管道是单向的——一头写一头读,方向固定。要双向通信得开两个管道(一个 A→B,一个 B→A)。把单向管道当双向用,最直观的反例是 shell 里的 cmd1 | cmd2:cmd1 的输出只能流到 cmd2,反向流不回来。

B

把管道当成磁盘文件了。其实管道是内核里的环形缓冲区——存在内核内存里,容量很小(Linux 默认 64KB),跟磁盘没关系。"受磁盘容量限制"完全是把管道误以为成了普通文件。这也是为什么写满会阻塞——缓冲区就这么大,没有磁盘那种"自动扩展"的能力。

D

把管道理解成"私有的一对一通道"——但管道允许多个读进程或多个写进程。典型场景是 fork 后父子进程都拿到管道两端,子进程的子进程也能继承;shell 里管道两边可以各有多个进程。"只能一对一"是对管道使用模式的过度限制。

总解析

管道(pipe)的核心性质:内核环形缓冲区 + 单向流 + 阻塞同步。逐条核对:

选项描述真实情况判定
A双向传输单向——一头读一头写
B容量受磁盘限制容量是内核缓冲区大小(KB 级别),跟磁盘无关
C读写都可能阻塞读空管道阻塞读者,写满管道阻塞写者——这是管道的同步机制
D一读一写允许多个读 / 多个写进程共用一个管道

重点说 C 的阻塞机制:

操作触发阻塞条件阻塞解除条件
管道(没数据可读)有进程往里写、或所有写端关闭返回 EOF
管道(缓冲区写不下)有进程从里读取、腾出空间

这正是管道作为"同步通信"机制的关键——它通过阻塞天然地协调了生产者-消费者的速度差,不用额外的同步原语。

最终答案是 C

编者注(解题技巧):管道四个常考性质死记——单向、内核缓冲(KB 级)、读写都阻塞、可多读多写。考过 4 次以上,每次都在这四点里换花样,把这四条对着选项划一遍即可。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题