POSIX IPC 与共享内存与 POSIX 定时器与异步 I/O

共 46 题
#

1. POSIX IPC 三件套,消息队列(mq)、信号量(sem)、共享内存(shm)

A 共享内存传数据最快但需同步,信号量同步,消息队列传消息 ✓ 正确答案
B 三者都用于消息传递
C 共享内存无需同步
D 信号量用于传数据
#

2. System V IPC 与 POSIX IPC 的对比,key vs name、生命周期

A 生命周期相同
B 两者都用 key
C POSIX 用 key 标识
D System V 用 key 标识,POSIX 用名字标识,生命周期管理不同 ✓ 正确答案
#

3. Unix domain socket(AF_UNIX)的 stream 与 datagram 模式

A datagram 会丢包乱序
B stream 保留消息边界
C stream 是可靠字节流无边界,datagram 保留消息边界且本地可靠 ✓ 正确答案
D AF_UNIX 无法传文件描述符
#

4. mq_open 的 POSIX 消息队列与 mq_send/mq_receive 的优先级消息

A 消息无优先级
B mq_receive 按 FIFO 取
C mq_send 带优先级,mq_receive 优先取高优先级消息 ✓ 正确答案
D mq_open 无法配置属性
#

5. shm_open + mmap 的 POSIX 共享内存创建与映射

A shm_open 直接返回内存
B shm_open 创建命名对象,mmap 映射到进程地址空间共享,需同步访问 ✓ 正确答案
C mmap 后各进程数据独立
D 共享内存需拷贝数据
#

6. pipe 只能用于有亲缘关系的进程、FIFO 可用于无亲缘进程,Unix domain socket 相比它们在双向通信与传递文件描述符上有何优势?

A pipe 可双向
B Unix domain socket 双向通信且可传文件描述符,pipe/FIFO 单向 ✓ 正确答案
C FIFO 可传 fd
D UDS 只能单向
#

7. POSIX 消息队列(mq_open/mq_send,按路径名标识、支持优先级接收)与 System V 消息队列(msgget/msgsnd,用 key 与消息类型)在接口与生命周期上有何差异?

A 两者都用路径名
B POSIX 用路径名与优先级接收且生命周期自动,System V 用 key 与消息类型需显式删除 ✓ 正确答案
C POSIX 用消息类型
D System V 生命周期自动清理
#

8. IPC 性能对比,pipe vs UDS vs TCP loopback vs shared memory

A shared memory 最快(无拷贝),其次 UDS,TCP loopback 受协议栈开销最慢 ✓ 正确答案
B TCP loopback 最快
C shared memory 有拷贝
D UDS 走网络栈
#

9. mlock/munlock 的内存锁定与实时系统应用

A mlock 锁定的内存可回收
B mlock 让内存可被换出
C mlock 锁定物理内存防 swap,保证延迟确定性与敏感数据不落盘 ✓ 正确答案
D mlock 与实时无关
#

10. shm_open 建立共享内存后用 mmap 映射,多个进程如何配合 sem_open/POSIX 信号量同步对共享区的访问?

A 信号量需独立网络
B 共享内存无需同步
C 进程用同一名字的 sem_open 获得信号量,sem_wait/sem_post 保护共享区访问 ✓ 正确答案
D 各进程用不同信号量
#

11. POSIX 信号量在多进程同步的"无主"清理难题

A 持有者崩溃可能永久锁死信号量,无自动恢复,需短临界区或外部重置 ✓ 正确答案
B 信号量自动恢复
C 信号量有 EOWNERDEAD
D 崩溃不影响信号量
#

12. mq 的"消息优先级"在调度中的实际意义

A 优先级越低越先取
B 消息按 FIFO 严格顺序,与优先级无关
C mq_receive 先取最高优先级消息,同优先级按 FIFO,高优先级可优先调度 ✓ 正确答案
D 优先级只影响发送不影响接收
#

13. POSIX timer_create 的 CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_PROCESS_CPUTIME 的选择

A REALTIME 最稳定
B MONOTONIC 受 NTP 影响
C CLOCK_MONOTONIC 不受 NTP 调整适合相对定时,REALTIME 受时间调整,CPUTIME 计 CPU 时间 ✓ 正确答案
D CPUTIME 计墙钟时间
#

14. lio_listio 的批量异步 I/O 提交

A lio_listio 每次只提交一个请求
B lio_listio 一次提交多个异步 I/O,可 LIO_WAIT 等待或 NOWAIT 返回 ✓ 正确答案
C lio_listio 是同步 I/O
D lio_listio 无法通知完成
#

15. alarm() 与 setitimer() 的传统定时器 API

A setitimer 精度为秒
B setitimer 只能一次性
C alarm 支持周期
D alarm 一次性秒级,setitimer 支持周期与子秒精度且多种计时器 ✓ 正确答案
#

16. timer_create 的 SIGEV_SIGNAL 与 SIGEV_THREAD 通知方式在开销与线程安全上有何差异,SIGEV_THREAD 的回调线程从何而来?

A 回调线程由用户创建
B SIGEV_THREAD 开销低
C SIGEV_SIGNAL 可自由处理
D SIGEV_SIGNAL 开销低但处理受限,SIGEV_THREAD 创建临时线程回调但开销高 ✓ 正确答案
#

17. POSIX 定时器的线程安全与多线程 timer_create

A 定时器是线程级
B 定时器是进程级资源,timer_create 线程安全,但回调处理需自行保证线程安全 ✓ 正确答案
C timer_create 非线程安全
D 回调无需同步
#

18. shm 的"删除 vs 取消映射"语义差异

A munmap 删名字
B shm_unlink 立即销毁内存
C shm_unlink 删名字(对象仍存到引用为 0),munmap 断当前进程映射 ✓ 正确答案
D 两者等价
#

19. eventfd 的事件通知与计数器语义

A eventfd 无计数器
B eventfd 维护计数器,write 累加 read 清零,可当事件标志配合 epoll ✓ 正确答案
C read 累加计数器
D eventfd 只能用于线程
#

20. aio_read/aio_write 的 POSIX 异步 I/O API 与 io_uring 的对比

A POSIX AIO 可移植但 Linux 用线程池伪异步,io_uring 真异步高效但仅 Linux ✓ 正确答案
B io_uring 可移植
C POSIX AIO 是 Linux 原生真异步
D io_uring 是线程池
#

21. clock_gettime 的纳秒级时间获取与 CLOCK_BOOTTIME

A BOOTTIME 受 NTP 调整
B CLOCK_MONOTONIC 含挂起时间
C CLOCK_BOOTTIME 是含系统挂起时间的单调时钟,适合需真实经过时间的测量 ✓ 正确答案
D clock_gettime 精度为毫秒
#

22. timer_delete 与 timer 资源回收

A timer_delete 删除定时器释放资源,需注意未完成回调的清理 ✓ 正确答案
B timer_delete 后定时器仍触发
C 定时器自动回收无需 delete
D timer_delete 不释放资源
#

23. timer_settime 的首次到期(it_value)与周期(it_interval)的工程语义

A it_interval 是首次到期
B it_value 是首次到期时间,it_interval 是周期,it_interval=0 则一次性 ✓ 正确答案
C it_value 控制周期
D 定时器总是周期
#

24. POSIX 1003.1b 实时扩展的 sigevent 通知模式

A SIGEV_THREAD 发信号
B SIGEV_NONE 发信号
C SIGEV_SIGNAL 发信号、SIGEV_THREAD 线程回调、SIGEV_NONE 无通知 ✓ 正确答案
D 所有模式相同
#

25. timerfd 与 epoll 协同的事件循环定时器

A timerfd 创建线程
B timerfd 需发信号
C timerfd 无法与 epoll 配合
D timerfd 把定时器转为 fd 可读事件,配合 epoll 与 I/O 统一处理 ✓ 正确答案
#

26. timerfd_create 的"定时器即文件描述符"模式

A timerfd 无法被多路复用
B timerfd 需信号处理器
C timerfd 把定时器实现为 fd,可被 epoll 监听、可传 fd,与事件循环统一 ✓ 正确答案
D timerfd 是线程
#

27. POSIX AIO 与 libaio 在 Linux 的实现差异

A POSIX AIO 支持 O_DIRECT
B 两者都是内核真异步
C POSIX AIO 在 glibc 用线程池伪异步,libaio 是内核原生真异步 ✓ 正确答案
D libaio 可移植性更好
#

28. POSIX 异步 I/O 在内核版本(Linux 5.x)的支持演进

A Linux 5.1+ 的 io_uring 支持缓冲 I/O 且高效,取代 POSIX AIO 线程池伪异步 ✓ 正确答案
B io_uring 仅支持 O_DIRECT
C Linux 无异步 I/O
D POSIX AIO 是 Linux 真异步
#

29. 周期性定时器在高负载下可能发生过期累积,timer_getoverrun 如何报告丢失的周期数?

A timer_getoverrun 报告到期时间
B 定时器不会丢周期
C overrun 是多余的周期
D 高负载下定时器可能丢周期,timer_getoverrun 报告丢失的到期次数以补偿计时 ✓ 正确答案
#

30. UDS 的 file system namespace(抽象命名空间 abstract)与文件路径

A 两者相同
B abstract 创建文件
C 文件路径无权限控制
D 文件路径会创建可管理的文件,abstract 命名空间不创建文件但无文件权限 ✓ 正确答案
#

31. mmap 的 MAP_SHARED、MAP_PRIVATE、MAP_ANONYMOUS 标志的工程语义

A MAP_ANONYMOUS 需文件
B MAP_PRIVATE 写回文件
C MAP_SHARED 写不可见
D MAP_SHARED 共享写可见,MAP_PRIVATE 写时复制不写回,MAP_ANONYMOUS 匿名内存 ✓ 正确答案
#

32. munmap 的 msync 同步策略与崩溃一致性

A munmap 自动刷盘
B MAP_SHARED 数据需 msync(MS_SYNC) 刷盘才保证崩溃一致,munmap 不写回 ✓ 正确答案
C msync 不落盘
D 崩溃不影响共享映射
#

33. sem_open 的命名信号量与 sem_init 的无名信号量边界

A 两者无差别
B sem_init 可跨无亲缘进程
C sem_open 用于线程
D sem_open 命名信号量跨进程共享,sem_init 无名信号量用于线程或共享内存 ✓ 正确答案
#

34. SO_REUSEADDR 允许绑定处于 TIME_WAIT 的本地地址,SO_REUSEPORT 允许多个 socket 绑定完全相同的地址端口,两者语义与典型用途有何不同?

A SO_REUSEPORT 处理 TIME_WAIT
B SO_REUSEADDR 实现多进程监听
C SO_REUSEADDR 复用 TIME_WAIT 端口,SO_REUSEPORT 多 socket 共享端口内核均衡 ✓ 正确答案
D 两者相同
#

35. mmap 的 MAP_FIXED 与地址冲突的处理

A MAP_FIXED 无冲突风险
B MAP_FIXED 不覆盖已有映射
C MAP_FIXED_NOREPLACE 覆盖
D MAP_FIXED 会覆盖指定地址的已有映射,MAP_FIXED_NOREPLACE 不覆盖并报错 ✓ 正确答案
#

36. POSIX AIO(aio_read、aio_write)在 glibc 实现的"用户线程 + sync I/O"的伪异步?

A glibc 用线程池执行同步 I/O 模拟异步,线程阻塞,扩展性差 ✓ 正确答案
B glibc 是真异步
C 线程池不阻塞线程
D glibc 无需线程
#

37. libaio(Linux 原生 AIO)在 Linux kernel 的真异步 I/O 与 POSIX AIO 的工程边界?

A libaio 可移植
B libaio 支持缓冲 I/O
C libaio 真异步但要求 O_DIRECT、仅 Linux,POSIX AIO 可移植但伪异步 ✓ 正确答案
D libaio 是伪异步
#

38. io_uring 相比 POSIX AIO / libaio 的工程优势?

A io_uring 不如 libaio
B io_uring 需 O_DIRECT
C io_uring 每 I/O 一次 syscall
D io_uring 减少系统调用、支持缓冲 I/O 与多操作,是高效真异步 I/O ✓ 正确答案
#

39. POSIX AIO 的 lio_listio 批量提交与 libaio io_submit 的工程取舍?

A io_submit 可移植
B lio_listio 可移植但线程池伪异步,io_submit 真异步高效但仅 Linux 需 O_DIRECT ✓ 正确答案
C lio_listio 真异步
D 两者相同
#

40. POSIX AIO 在 -D_POSIX_ASYNCHRONOUS_IO 宏的依赖?

A 无需定义即可用 AIO
B 宏与 AIO 无关
C 使用 POSIX AIO 需定义特性测试宏 _POSIX_ASYNCHRONOUS_IO 以启用接口 ✓ 正确答案
D 宏是 AIO 的返回值
#

41. io_uring 限制,仅在 Linux 5.1+ 与较小生产案例下超越 POSIX AIO 的工程边界如何?

A io_uring 已稳定且无兼容问题
B io_uring 可移植
C io_uring 在所有环境可用
D io_uring 仅 Linux 5.1+、API 演进中,需评估环境兼容,跨平台用 POSIX AIO ✓ 正确答案
#

42. mprotect 的内存页权限变更与 W^X 边界

A mprotect 不涉及页表
B mprotect 可以任意字节修改权限
C W^X 允许页同时可写可执行
D mprotect 按页修改访问权限,W^X 要求可写与可执行互斥防护注入 ✓ 正确答案
#

43. UDS 的 SO_PASSCRED 与进程凭据传递

A SO_PASSCRED 传递网络地址
B SO_PASSCRED 让 UDS 附带发送进程的 PID/UID/GID 凭据,服务端据此验证 ✓ 正确答案
C 凭据与进程身份无关
D SO_PASSCRED 是 TCP 选项
#

44. aio_error/aio_return 的完成检查与 aio_suspend 的等待

A aio_suspend 查状态
B aio_error 取结果
C aio_error 查状态、aio_return 取结果、aio_suspend 等待完成 ✓ 正确答案
D aio_return 查询状态
#

45. timer_create 在 CLOCK_MONOTONIC 的不受 NTP 影响特性

A CLOCK_MONOTONIC 定时器不受 NTP 调整影响,相对定时稳定 ✓ 正确答案
B MONOTONIC 受 NTP 影响
C REALTIME 更稳定
D 定时器与时钟无关
#

46. usleep、nanosleep、clock_nanosleep 的精度差异

A nanosleep 受 NTP 影响
B usleep 最精确
C clock_nanosleep 可指定时钟(MONOTONIC)与绝对时间,精度与稳定性最好 ✓ 正确答案
D 三者精度相同