IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Operating System

共 3 篇相关文章

IT 累计浏览 4,061

锁是怎么实现的?

这篇讲的是锁在计算机底层的基本实现原理,作者从最基本的机制出发,梳理了实现锁的几种核心方式。 文章首先排除了应用层常见的各类复杂锁,聚焦于最底层的实现。它可能从原子操作说起,比如利用CPU的原子指令来保证单个操作的不可分割性,这是构建一切锁的基石。接着,会探讨更复杂的实现:比如自旋锁如何让线程在“忙等”中循环尝试获取锁,适用于极短临界区;而互斥锁或信号量则可能涉及内核态与用户态的切换,通过让线程挂起和唤醒来避免CPU空转,适用于可能耗时较长的场景。作者或许还会简要提及读写锁如何分离读写权限以优化并发性能。 这种从原理根源讲起的方式,帮助读者跳出了对“锁”这个抽象概念的模糊认知,理解了不同锁策略在性能、开销和适用场景上的根本权衡,为选择和设计正确的并发方案打下了基础。

IT 累计浏览 3,126

main函数的汇编代码

这篇讲的是那些我们写在`main`函数里的代码,在计算机眼中究竟是什么样子的。作者没有停留在抽象语法层面,而是直接潜入到了编译器生成的汇编代码中,带你观察程序执行的“原始形态”。 文章从一段经典的`main`函数(比如返回0或打印Hello World)出发,逐步拆解其对应的汇编指令。核心思路是解释清楚几个关键问题:`main`函数是如何被启动器(如C运行时库)调用的?它的参数`argc`、`argv`在底层是如何传递的?`return 0`这条高级指令,在汇编里究竟对应着哪些寄存器操作和栈帧操作?作者可能会重点剖析`call`指令、栈帧的建立与撤销、以及调用约定(如System V AMD64 ABI)这些实现细节。 其巧妙之处在于,它架起了一座从C语法到机器执行之间的桥梁。通过理解这些“不那么优雅”但极其精确的汇编代码,你能真正明白编译器做了哪些工作,理解函数调用的本质是一个控制流转移和数据传递的约定。这对于调试底层问题、理解性能关键代码,甚至是对计算机体系结构产生新的认识,都是一次扎实的入门。

IT 累计浏览 2,379

Windows的版本号

这篇讲的是Windows版本号背后那套看似混乱、实则有迹可循的命名演变史。作者从Windows 1.0一直梳理到即将登场的Windows 7,重点不在于罗列版本,而是揭示“内部版本号”与“市场发布名称”这两条并行线的关系。文章指出了一个关键转折点:从Windows 95开始,微软将商业营销的命名(如Vista、7)与底层开发代号(如NT 5.1、6.1)分开,这种双轨制导致了普通用户常困惑于版本号“跳跃”(例如从Windows 8.1跳到Windows 10)。作者还对比了服务器系列(Windows Server)与消费者系列的版本号对应规律,让读者能清晰地将不同产品线“对齐”。对于开发者或需要兼容性考量的技术人员来说,理解这个逻辑至关重要——它能帮你快速判断一个系统内核的大致世代和能力边界,而不是被市场名称所迷惑。