进程同步基础:并发为什么会出错
进程同步基础:并发为什么会出错 有一类 bug,最让工程师崩溃:代码每一行单独看都对,单线程跑一万遍都正确,可一上多线程、一上生产环境的高并发,结果就时不时算错——而且你想复现它,它又好端端的。订单被重复扣款、库存变成负数、计数器总是比预期...
进程同步基础:并发为什么会出错 有一类 bug,最让工程师崩溃:代码每一行单独看都对,单线程跑一万遍都正确,可一上多线程、一上生产环境的高并发,结果就时不时算错——而且你想复现它,它又好端端的。订单被重复扣款、库存变成负数、计数器总是比预期...
线程实现模型:用户级线程与内核级线程 上一篇我们说"线程是 CPU 调度的基本单位"。但这里藏着一个一直没点破的问题:这个"调度",到底是谁在做?是操作系统内核在调度,还是程序自己在用户态调度? 这不...
线程基础:为什么要有线程 上一组我们已经把进程讲透了——进程是带着独立地址空间、资源和 PCB 的执行实体,操作系统靠它来隔离和调度任务。既然进程已经能表示"一个运行中的程序",操作系统为什么还要再搞出一个"线...
进程状态与切换:CPU 如何在任务间切换 打开你的电脑,看一眼任务管理器或 top:几百个进程赫然在列。可你的 CPU 也许只有 8 个核心——同一时刻物理上最多只能真正执行 8 条指令流。那剩下几百个进程是怎么回事?它们看上去全都&quo...
进程的概念:程序、进程与 PCB 你有没有注意过一个再普通不过的现象:同一个 Chrome,你能开好几个窗口;同一份 python app.py,你能在多个终端里同时跑起来。它们用的是磁盘上同一份文件,可彼此互不干扰——这个标签页崩了,那个...
系统调用:应用如何进入内核 上一篇我们立了一道铁律:用户态程序碰不了硬件,所有危险操作都被锁进内核。可问题马上来了——你的程序明明每天都在读文件、发网络、申请内存,这些事最终都要碰硬件,它到底是怎么"求"内核帮忙的? 答...
内核态与用户态:权限边界的意义 你写的程序每天都在读文件、发网络、申请内存,看起来好像对这台机器无所不能。但你有没有想过一个问题:既然你的代码能让 CPU 执行指令,那它为什么不能直接关掉中断、改掉别的进程的内存、或者直接操作磁盘控制器?是...
操作系统到底在做什么:资源管理与抽象 你大概率写过这样的代码:打开一个文件、读出内容、再发到网络上。这几行代码背后,其实藏着一连串你从没操心过的事情——磁盘上这个文件到底躺在哪些扇区?内存够不够放下它?同一时刻还有几十个进程也想读盘,凭什么...
写在前面:关于这份操作系统学习总结 我一直觉得,操作系统是最容易被学得"很努力却很碎"的一门课。前面在讲进程和线程,后面突然冒出页表、文件系统、I/O、中断、容器,每一块看起来都自成一体,学到最后却像收集了一堆互不相关的...
计算机组成原理学习路线总结与实验建议 写到这里,组成原理系列前 32 篇已经把一条比较完整的主线搭了起来。从数制、编码、逻辑门,到 CPU、流水线、Cache、虚拟存储、I/O、多核、GPU,再到和操作系统的接口协同,已经可以形成一个相对完...