# Summary
## 三层结构
1. [[硬件层]] (Hardware) - 底部灰色区域,展示 CPU、RAM、HDD 是公司的 **厂房和设备**。
2. [[内核态]] (Kernel Mode) - 蓝色区域,包含进程管理、内存管理、文件系统、设备驱动四大模块 **内核 (Kernel)** 是 **董事长**。他拥有最高权限,掌握所有资源,但他不干具体琐事。
3. 系统调用接口[[system call]] (System Call Interface) - 中间分界线,标注了 open()、read()、write()、fork()、exec() 等系统调用
4. [[用户态]] (User Mode) - 绿色区域,包含浏览器、编辑器、游戏、终端等应用程序 **[[launchd]] / systemd** 是 **总经理 (CEO)**。
- 董事长(内核)进公司后,第一件事就是任命总经理(PID 1)。
- 总经理负责招聘员工(启动进程)、管理部门(管理服务)、确立公司制度(日志、权限)。
- 剩下的浏览器、微信、你的代码,都只是这棵树下的 **普通员工** 而已。

# Cues
# Notes
## 操作系统与多线程编程
在编写高并发代码时(如使用 Java, C++ 或 Go),处理共享资源(变量、内存)时会用到这些思想。
# Cues
计算机硬件+软件:[[QEMU]]
操作系统:[[xv6]]
[[MIT 6.828 Operating System Engineering]]
# 补充说明
## **性能相关**
- CPU密集型:线程数 = CPU核心数 + 1
- IO密集型:线程数 = CPU核心数 * 2 或更多
- Load参考值:单核<1正常,=核数饱和,>核数过载
## **Linux命令技巧**
```bash
# 查看系统负载
uptime / w / top
# 查看CPU使用率
top / htop / mpstat
# 查看IO状态
iostat -x 1
# 查看内存
free -h / vmstat
# 网络连接
ss -tunlp / netstat -tunlp
```
## **零拷贝技术栈**
- sendfile:适合文件传输
- mmap:适合文件修改
- splice:管道数据传输
- DMA scatter-gather:硬件支持
你提出了一个很好的问题,`awk` 处理列的方式确实和 CSV 文件中常见的逗号分隔符有些相似,但它有自己的**默认行为**和**灵活的配置**。
---
# `awk` 定义列(字段)的默认行为
`awk` 默认情况下,将一行文本中的**一个或多个连续的空白字符**(空格或制表符 `\t`)视为字段分隔符。
这意味着:
- **连续的空格**会被视为一个分隔符,而不是多个空字段。
- **行首和行尾的空白**会被忽略,不会产生空字段。
**举例:**
如果一行是:`Hello world this is a test`↳
`awk` 会将其解析为:
- `$1`: "Hello"
- `$2`: "world"
- `$3`: "this"
- `$4`: "is"
- `$5`: "a"
- `$6`: "test"
这和 CSV 的默认逗号分隔行为是不同的,CSV 中通常一个逗号就是一个字段分隔符,即使是连续的逗号也会产生空字段。
# 表格收录
- [[八股-操作系统]]