# 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)。 - 总经理负责招聘员工(启动进程)、管理部门(管理服务)、确立公司制度(日志、权限)。 - 剩下的浏览器、微信、你的代码,都只是这棵树下的 **普通员工** 而已。 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2026%2F01%2F28%2F12-59-22-d463921a8748e8ae51d9876a583c98e4-202601281259628-1df1ad.png) # 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 中通常一个逗号就是一个字段分隔符,即使是连续的逗号也会产生空字段。 # 表格收录 - [[八股-操作系统]]