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) |
高级语言函数由多条指令组成,不是原子性的。信号可能在函数操作全局共享数据的中间状态介入,破坏数据一致性。 |