# 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 三者精度相同