os 分类归档

共 111 篇文章 · 返回首页

【操作系统百科】什么是操作系统:从 monitor 到 unikernel 的职责清单

从裸机监控器到微内核再到 unikernel 与 serverless,OS 这个抽象层在六十年里被反复挑战又反复回归。本文不做教科书式定义,而是回到工程视角,提炼 OS 真正在做的五件事:资源抽象、复用、隔离、公平、可观测性。以此为尺,丈量宏内核、微内核、VMM、unikernel、serverless 各自的胜负边界。

【操作系统百科】Unix 谱系与设计遗产:Multics、Plan 9、Linux

要理解 Linux 的很多古怪决定,得回到 Multics、Unix V6/V7、BSD 的历史语境。本文沿时间线梳理 Unix 家谱,挑出每一代留下的设计遗产——fork/exec、一切皆文件、管道、可重定向的 stdin/stdout、9P、命名空间——并指出哪些被 Linux 发扬,哪些被抛弃,哪些仍在 Plan 9 的血脉里孤独活着。

【操作系统百科】宏内核 vs 微内核 vs 混合内核:Tanenbaum-Torvalds 三十年后

微内核是理论正义但工程失败?Linux 宏内核赢了只是因为先上车?三十年前的那场论战,在 seL4 形式化正确、L4 家族把 IPC 做到单 syscall、Fuchsia 真正商用的 2020s,我们应该怎么重新看?本文用四个可量化的维度——性能、可维护性、隔离性、可验证性——把四种内核架构(宏、微、混合、Exokernel/Unikernel)摆到同一张尺子上对齐。

【操作系统百科】特权级与硬件隔离:ring0、EL、SMEP/SMAP/PKU/CET

OS 的隔离能力在哪里落地?CPU 提供了特权级、MMU、MPU、enclave、VMX 等一串原语,OS 把它们组合成进程/用户/内核/hypervisor 等隔离层级。本文从 x86 ring 0-3、SMM、ARMv8 EL0-3 起步,梳理 SMEP/SMAP/PAN、KPTI、CET、MTE、PKU、IBRS 等缓解机制,说清楚每一项挡的是哪一类攻击。

【操作系统百科】系统调用 ABI:x86_64 / arm64 / riscv / Windows NT 对照

系统调用是 OS 最稳定的接口。本文拆解 Linux syscall 的参数寄存器约定、返回值规范(负 errno 与 2-value ABI)、x86_64 SYSCALL、arm64 SVC、RISC-V ECALL、Windows NT 的 int 2e/syscall/SYSENTER 历史;说明为什么 Linux 承诺 \"don't break userspace\"、什么东西算 syscall ABI、vDSO 如何用共享内存加速、Go/musl/glibc 各自怎么实现 syscall stub。

【操作系统百科】内核与用户态的边界:copy_from_user、pin、seccomp、capability

内核代码不能像用户代码那样自由访问任何指针。本文围绕 Linux 的 access_ok / copy_from_user / get_user_pages / pin_user_pages / __user 注解,说明用户页在内核视角的生命周期;再把视角扩展到 capability、namespace、seccomp、Landlock、LSM 等软件边界机制,汇成一张内核对用户态信任的全景图。

【操作系统百科】POSIX 与 Linux/BSD/Windows 的偏离

POSIX 标准定义了 \"一个像 Unix 的 OS 应该长什么样\",但没有哪个真实 OS 完全等于它。本文对照 POSIX 基准,列出 Linux、FreeBSD、macOS、Windows 的扩展与偏离:Linux-only 的接口(epoll、io_uring、eventfd、prctl)、BSD-only(kqueue、pf)、NT 的异步模型、符号链接/路径语义差异、signal 语义的方言、fork 的地位演变。

【操作系统百科】线程模型:1:1、N:1、M:N 与虚拟线程

同样一个 'concurrent' 的需求,OS 级 1:1 线程、用户态 N:1 协程、调度器混合 M:N、运行时虚拟线程各给出了不同答案。本文梳理 LinuxThreads → NPTL 的演进、Solaris LWP 的失败、Go GPM / Java Loom / Erlang BEAM / async-await 的选择,以及 M:N 模型的阿克琉斯之踵:阻塞 syscall。

【操作系统百科】信号:Unix 最拧巴的抽象

signal 在 Unix 里几乎等同「异步打断」,但它的 API 踩满雷:不可重入的 handler、ASS-safe 函数清单、SIGCHLD 丢失、多线程语义、SIG_DFL 的历史包袱。本文讲 kill/tgkill/rt_sigaction、signalfd、pidfd_send_signal、async-signal-safe 的真实边界,以及为什么新代码应该尽量把 signal 转成 fd。