Skip to content

Chapter 08 ECF

1. CPU、进程与并发/并行

概念 关键词 要点
单核 CPU 并发 (Concurrency) 伪并行。通过时间片轮转实现多个进程的交替执行。
多核 CPU 并行 (Parallelism) 真正同时执行。多个核心同时运行多个进程/线程。
DMA 传输 直接内存访问,解放 CPU 外设(如硬盘)直接与内存(RAM)交换数据,绕过 CPU,提高 I/O 效率。

2. C 语言标准 I/O 流

流名称 文件描述符 主要用途 缓冲机制 (默认)
stdout 1 程序的正常结果和数据输出。 行缓冲 (遇到 \n 通常会刷新)。
stderr 2 程序的错误、警告和诊断信息。 无缓冲或块缓冲 (保证立即显示,防止丢失)。
printf("...\n") 刷新机制 终端环境下,换行符 \n 会触发 stdout 缓冲区刷新。

3. 信号处理与可重入性

概念 关键词 要点
阻塞信号 未决信号集 (Pending) 不会丢弃。信号产生后被记录在未决集中,等待解除阻塞后递送。不可靠信号会被合并
忙等待 while (!lpid) 不断检查变量,浪费 CPU 资源。应使用 pause()sigsuspend() 使进程休眠。
可重入函数 线程安全、原子操作 可在中断或信号处理程序中安全调用。必须不使用全局/静态数据。
exit() 安全性 非可重入 (Unsafe) 因涉及刷新 I/O 缓冲区和调用 atexit 清理函数,操作全局数据,非线程安全。
信号安全函数 _exit() / _Exit() 信号处理程序中终止进程的安全替代方案,不执行清理操作,直接退出。

4. 信号中断与原子性

概念 关键词 解释
中断时刻 CPU 机器指令 (原子性) 内核保证信号总是在一条 CPU 机器指令执行完毕后才介入,这个层面是安全的。
数据破坏 复杂操作 (printf) 高级语言函数由多条指令组成,不是原子性的。信号可能在函数操作全局共享数据的中间状态介入,破坏数据一致性。