
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
在前面的章节中,我们的进程内存模型极其原始:代码段、数据段固定加载,堆通过brk/sbrk线性增长,栈从顶部向下延伸。这种模型能运行简单程序,但面对真实软件生态时立刻崩塌:动态链接器无法将.so映射到指定地址;malloc的大块分配被迫复制而非直接映射物理页;共享内存IPC需要内核拷贝;JIT编译器无法生成可执行代码;甚至vim打开大文件都要先read()到堆里再处理。mmap的本质是“将虚拟地址
在前面的章节中,我们的信号系统仅支持最原始的signal()注册和简单的投递。这在玩具系统中尚可工作,但在真实场景中却危机四伏:handler执行期间若同一信号再次到达,是重新触发还是丢弃?如何安全地在临界区屏蔽SIGCHLD以防止waitpid竞态?如何区分SIGSEGV是来自非法内存访问还是mprotect权限不足?signal()的语义在不同Unix变种间互不兼容,且无法传递任何上下文信息。
在前面的章节中,我们的Shell已经能解析复杂命令、管理作业、构建I/O拓扑。但如果你尝试运行,它会报错“command not found”;运行vim,它不知道你的HOME目录在哪;编译程序时,gcc找不到头文件路径。这是因为我们的进程是“失忆”的——它们没有环境块(Environment Block)。环境变量不是简单的“全局变量”,而是进程创建时继承、运行时可修改、跨exec传递的键值对上
在上一章中,我们的Shell拥有了作业控制,成为了一个合格的交互终端。但如果只能手动敲命令,它仍然只是一个“高级计算器”。真正的Unix哲学在于组合与自动化:将多个小工具通过I/O胶水粘合成复杂的数据处理流水线,并将这些流水线固化为可复用的脚本。本章我们将补齐Shell作为“编程语言”的关键拼图:命名管道(FIFO)让无关进程也能通信;Here Document让脚本内嵌多行文本数据;而更丰富的重
在前面的章节中,我们的Shell已经能解析命令、创建进程、等待退出。但它仍然是一个“批处理模拟器”:你无法在vim编辑时按Ctrl+Z切回Shell,无法用bg让后台任务继续运行,无法用jobs查看挂起的任务列表。更致命的是,多个进程同时向终端输出时会互相覆盖,键盘输入会被所有进程争抢——这不是一个可用的交互环境。作业控制(Job Control)的本质是“将终端的所有权在进程组之间安全转移”。它
在前面的章节中,我们的程序都是静态链接的:每个可执行文件都包含了完整的libc副本。这意味着100个使用printf的程序就要在磁盘和内存中存储100份相同的printf实现。这不仅浪费空间,更致命的是无法独立更新:修复一个libc安全漏洞需要重新编译所有程序。加载时共享(多个进程映射同一物理页的只读代码段)和运行时绑定(通过PLT/GOT表延迟解析符号地址)。本章我们将实现一个最小但完整的动态链
在上一章中,我们用实现了用户态mutex。这在低竞争场景下尚可工作,但在高并发场景中是灾难性的:100个线程争抢一把锁时,99个线程不断循环检查+让出CPU,消耗大量调度开销却不做任何有效工作。更糟的是,无法保证“锁释放时立即唤醒等待者”——它只是把当前线程移到就绪队列末尾,真正的持锁线程可能还在运行队列深处排队。Futex(Fast Userspace muTEX)解决了这个根本矛盾:无竞争时完
在前面的章节中,我们拥有了Demand Paging和COW,进程的创建成本已大幅降低。但即便如此,进程仍然是“重”的:每次fork都需要复制页表、VMA链表、文件描述符表;每次上下文切换都需要刷新TLB、保存完整内核栈。当一个Web服务器需要同时处理1000个连接时,1000个进程的调度开销足以吞噬大部分CPU时间。线程的本质是“共享地址空间的执行流”。同一进程内的多个线程共享代码段、数据段、堆
exec时一次性为所有PT_LOAD段分配物理页并拷贝内容;fork时完整复制父进程的所有物理内存。这意味着一个10MB的程序即使只执行了main()的前几行,也必须占用10MB物理内存;一个fork后立即exec的子进程,白白浪费了一次完整的内存复制。这在嵌入式或早期硬件上是不可接受的奢侈。Demand Paging(按需分页)和。推迟昂贵的物理资源分配,直到真正需要的那一刻。缺页异常(Page
在前面的章节中,我们的进程模型是纯粹线性的:要么运行,要么阻塞等待I/O,要么被父进程wait回收。但真实世界的程序需要处理大量异步事件:用户按下Ctrl+C终止程序、定时器到期触发回调、子进程退出通知父进程、非法内存访问触发SIGSEGV。如果没有信号机制,你的Shell无法被中断,后台任务无法感知子进程死亡,除零错误只会导致静默崩溃而非core dump。信号是Unix最古老也最精妙的IPC机







