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

标签:操作系统

共 14 篇相关文章

IT 累计浏览 3,006

操作系统基础知识

这篇讲的是操作系统面试中几个核心概念的对比与辨析。文章没有泛泛而谈,而是聚焦于死锁、链接库、进程与线程、进程间通信这几个经典问题,通过问答的形式拆解要点。 关于死锁,它清晰地列出了四个必要条件(互斥、请求与保持、非剥夺、循环等待),并介绍了从忽略问题到破除条件的四种处理策略,其中“鸵鸟算法”的比喻让策略选择显得更生动。 在链接库部分,文章对比了静态库(.lib)与动态库(.dll)的核心区别:前者在编译时代码被强制装入程序,增大体积但运行稳定;后者在运行时按需加载,能有效节省内存空间,更适合大型项目。 对于进程与线程,文章从概念、执行过程和逻辑关系三个层面展开。关键在于,进程是资源分配的基本单位,拥有独立内存空间;而线程是CPU调度的基本单位,共享进程资源,是程序中可并行执行的路径。 最后,文章梳理了用户进程间通信的几种主要方式,如管道、消息队列等,并以管道为例说明了其单向、阻塞的特性。整体而言,文章将抽象的理论知识梳理成了清晰的对比条目,有助于读者快速建立起对这些基础概念的理解框架。

IT 累计浏览 4,068

Linux发展编年表

这篇讲的是Linux如何从芬兰学生Linus的个人项目,一步步成长为驱动当今世界的关键力量。作者用一条清晰的时间线,梳理了这个“24年计算机革命”中的关键节点。 摘要里,你可以看到Linux内核的第一个版本如何诞生,以及为何Linus认为将它切换到GPL协议是“做过的最正确的事”。文章也记录了早期关于微内核与宏内核的著名论战,以及第一个成功发行版Slackware和Debian的出现。从Red Hat开始商业化,到Google搜索引擎基于Linux构建,再到2007年Android的发布,文章勾勒出Linux如何从服务器走向桌面、手机和云端。 这些里程碑事件不仅是技术演进,更是一段开源社区与商业力量交织的成长史。文章最后停在2013年Valve推出基于Linux的SteamOS,记录了Linux在游戏领域的新尝试。整篇文章像是为开源爱好者准备的一份详尽档案,让读者能直观感受一个理想如何改变世界的技术底座。

IT 累计浏览 3,439

操作系统-进程管理

这篇系统梳理了操作系统进程管理的核心概念。作者从最基础的定义切入,指出进程是程序的一次动态执行过程,并详细对比了它与静态程序在存在形式、生命周期、资源分配角色上的五大关键差异。 文章接着拆解了进程的内部构成,重点呈现了进程状态的演进——从经典的三种状态模型,到更贴近实际的五种、七种状态切换图,这直观反映了现代操作系统对进程调度的精细化控制。在调度层面,文章清晰列举了先到先服务、优先级、最短作业优先、循环轮转以及多级队列这五种经典算法,为理解CPU资源如何公平高效地分配给不同进程提供了具体思路。 此外,文章也涵盖了进程间通信的七种主要方式(如管道、共享内存、套接字等),并最终引向了更轻量的执行单元——线程,明确了进程与线程在资源分配与调度层面的分工关系。整篇内容结构清晰,从定义到组件,再到调度与通信,最后延伸到线程,为构建操作系统进程管理的完整知识图谱提供了扎实的路线。

IT 累计浏览 2,226

内存异常排查

这是一篇典型的故障排查与技术思考文章。作者参与排查一个C++程序的崩溃问题:一个包含百余个对象指针的vector,在对象析构时发现第95个指针异常,偏移了1-3字节,导致程序崩溃。 文章的核心在于作者层层递进的推断逻辑。从对象声明为const、仅读取的特性,排除了人为改写和常见的内存越界写入可能。指针地址非对齐(变为奇数)且仅此一处异常,让作者将怀疑重点转向了更隐蔽的“悬空指针”问题。他推断,可能是某个已被引用计数机制正确析构释放的对象,其内存被新对象复用后,残留的旧指针在析构链中被意外调用,其减引用操作误将后来对象的数据当作计数值进行递减,最终导致了这起离奇的崩溃。 作者最终给出的排查建议也极具针对性:为所有涉及引用计数的操作(包括标准库智能指针)添加断言,确保引用值在合理范围内,以防悬空指针的二次破坏。文章结尾,作者还延伸吐槽了C++生态中项目对高性能内存分配器的强依赖,并反思了语言“信任程序员”背后可能引致的工程混乱问题。

IT 累计浏览 3,312

空指针的解引用

这篇讲的是C语言中空指针解引用的一个反直觉现象——通常会导致程序崩溃的NULL指针访问,在某些特定情况下居然可以成功。 作者从C程序员最常遇到的“空指针访问异常”问题切入,但并未停留在常规的排查层面。文章通过几个具体的代码示例,揭示了在内存布局、编译器优化(如 `-fno-strict-aliasing`)以及特定系统内存映射等条件下,对地址 0(即 NULL)进行读写操作反而不会触发段错误。这些例子直观地说明了“空指针不可解引用”这一准则在实践中存在的灰色地带。 文章的核心价值在于,它并非鼓励滥用这一特性,而是引导读者深入理解指针、内存模型与底层硬件交互的复杂性。作者指出,这种“可解引用”的情况高度依赖于平台、编译器和运行时状态,具有不可移植性,因此在生产代码中必须严格避免。对于想夯实C语言功底、理解系统编程陷阱的开发者而言,这篇文章提供了一个从反例中学习规范的好视角。

IT 累计浏览 5,378

为什么Linux不需要磁盘碎片整理

这篇讲的是为什么Linux系统几乎不需要磁盘碎片整理。作者从Linux和Windows文件系统的核心设计差异出发,解释了Linux文件系统(如ext4)如何通过智能机制避免碎片产生。例如,ext4采用块分配算法,在写入时尽量将文件数据连续放置在磁盘上,同时结合延迟分配技术——系统会暂存写入请求,待收集足够数据后再一次性分配,从而大幅减少碎片。此外,Linux的inode和块组结构有助于优化存储布局,保持文件局部性。相比之下,Windows的NTFS文件系统在频繁安装、删除或修改文件后,容易产生碎片,导致磁头频繁寻道,性能下降,因此需要定期运行碎片整理工具来重组数据。 文章指出,这种设计差异让Linux在长期运行中碎片率极低,提升了I/O效率,同时也让用户省去了维护碎片整理的负担。对于系统管理员或从Windows转来的用户而言,这意味着在Linux环境下可以更专注于应用开发和日常使用,而不必担心磁盘性能退化。整体上,这篇内容通过具体的技术对比,清晰揭示了Linux存储管理的优势,提供了实用的操作系统见解。

IT 累计浏览 3,872

编程珠玑番外篇-K. Plan 9 的故事(修订版)

这篇修订版的番外篇重新讲述了Plan 9操作系统的故事,并得到了博文视点编辑的专业协助。作者从上世纪80年代贝尔实验室的创新环境切入,梳理了Plan 9作为Unix“精神续作”的诞生背景——其核心设计目标是彻底解决分布式计算中资源统一访问的问题。 文章特别聚焦了Plan 9极具前瞻性却又颇为“怪异”的技术思想:它将所有系统资源(包括网络)都抽象为文件,通过一套简洁的协议实现跨节点透明操作。这种极致的统一性在当时的硬件和网络条件下显得过于超前,却深刻影响了后来Linux等系统的设计。 修订版不仅厘清了早期版本中的技术细节和轶事,更探讨了Plan 9为何未能取代Unix成为主流。它指出,Plan 9的困境源于其纯粹的理念与现实的商业生态、用户习惯之间的鸿沟,但它作为一次大胆的“操作系统实验”,为分布式系统留下了宝贵的设计遗产。

IT 累计浏览 4,450

UNIX 痛恨者手册读后笔记

这篇讲的是技术圈一本相当奇特的书——《UNIX 痫恨者手册》的读后感。作者从这本由对 UNIX 深恶痛绝的邮件组讨论汇编而成的书出发,梳理了书中抱怨的历史背景与现实意义。文章指出,以今天的眼光看,书中约一半批评已非 UNIX 特有问题,但另一半则生动展现了早期 UNIX 系统的原始面貌,也反衬出 Linux 等继承者在文件系统、安全性与稳定性上的长足进步。 更深层地,作者将这本书视为三种设计哲学交锋的案例:追求优雅与统一的 MIT 哲学(以 LISP 机器为代表),注重友好一致体验的 GUI 系统哲学,以及 UNIX 那种基于松散标准、如积木般可组合的开放式哲学。这种从“吐槽”中提炼出的技术演化脉络与设计思辨,或许比单纯的技术批评更能引发对操作系统设计本质的思考。

IT 累计浏览 2,883

WindowsPhone7初体验

这篇讲的是作者第一时间入手HTC 7 MOZART T8698后,对WindowsPhone7系统的真实感受。文章从开箱讲起,坦诚地提到手机外观并没有带来多少惊喜,作者甚至觉得这是因为看惯了当时大屏幕手机的缘故。这种不加修饰的初印象,反而让体验显得格外真实。 作者随后将思绪拉回前一年,对比了当时给他留下深刻印象的SONY ERICSSON X10。通过这个简短的对比,读者能直观感受到不同系统、不同设计思路的手机在带给用户的冲击力上的差异。这不仅仅是一篇简单的开箱,更是作者通过个人视角,对WindowsPhone7这个新系统起点所做的一次细腻观察与记录。 文章捕捉了技术爱好者面对一个全新平台时最本真的好奇与评判,那种新鲜感与既往经验交织的复杂心态,或许正是许多准备尝试新系统的读者所能共鸣的。

IT 累计浏览 5,455

虚拟内存的作用

这篇讲的是“虚拟内存”这个概念在不同操作系统下的体现差异。作者从用户的直观感受出发,清晰地区分了Windows与Linux两大阵营对它的典型理解。 在Windows用户看来,虚拟内存通常表现为一个具体的、在硬盘上划出的交换文件,用于弥补物理内存的不足,是一种可感知的“备用内存”。而Linux的语境则更侧重于进程视角,每个进程都拥有独立的虚拟地址空间,由系统内核负责将其高效地映射到有限的物理内存和磁盘交换区中。 这种差异不仅是操作习惯的不同,背后其实反映了两种系统在内存管理哲学上的分野。文章没有停留在简单的概念解释,而是通过用户感知的对比,帮助读者更直观地理解虚拟内存作为操作系统核心机制,是如何在不同的设计框架下,为程序提供稳定、连续的内存视图这一根本作用的。

IT 累计浏览 2,788

大家能给魅族条活路不?

这篇讲的是作者在旧手机Sony Erisccon M608于普吉岛海域意外沉没后,选择新手机的个人历程。作者使用了这款索尼爱立信手机四年,它的损毁被

IT 累计浏览 1,999

[基础]什么是块设备和什么是字符设备

这篇讲的是操作系统中设备分类的基础概念:块设备与字符设备。文章首先聚焦于块设备,指出它们能够随机访问固定大小的数据块,比如硬盘、软盘驱动器和闪存,这些设备通常被格式化后安装文件系统来使用。接着,文章引入字符设备作为对比,这类设备如终端或打印机,数据以连续字节流的方式顺序处理,没有固定的数据块结构。关键差异在于访问模式:块设备支持高效的随机读写,适合大容量存储场景;字符设备则强调数据的顺序传输,更适用于输入输出设备和实时交互场合。通过这种清晰的对比,文章不仅解释了两者在技术实现上的核心区别,还暗示了在Linux系统设计中如何根据需求选择合适的设备类型。对于学习设备驱动或系统基础的开发者来说,这种基础区分是理解后续复杂概念的前提。

IT 累计浏览 3,076

Unix版权史

这篇讲的是Unix操作系统从诞生到普及过程中,那段交织着商业巨头、学术机构和自由软件理想主义的复杂版权纠葛。 作者从1969年AT&T贝尔实验室的内部项目Unix讲起,剖析了这份源代码最初并未被视作商业产品,而是以极低成本分发给大学和研究机构。正是这种开放,催生了伯克利软件发行版(BSD)等重要分支。转折点发生在80年代,AT&T开始意识到Unix的商业价值并收紧版权,引发了与BSD长达数年的激烈法律诉讼。这场“Unix战争”不仅耗费巨资,更险些让当时蓬勃发展的互联网基础设施——基于BSD的代码——陷入法律不确定性。 文章的核心观点在于揭示:正是AT&T的版权高压,意外地刺激了理查德·斯托曼发起GNU计划与自由软件运动,Linus Torvalds后来在Linux内核中采用的GPL协议,正是对那段历史的直接回应。我们今天所熟知的开源软件生态,其底层规则和协作模式,很大程度上是作为对当年版权封锁的一种反叛和重构而建立的。 这段历史提醒我们,技术演进从来不只是代码的竞赛,更是商业模式、法律框架与社区理念共同作用的场域。理解Unix的版权史,或许能让我们更清醒地审视当下开源与闭源之间的每一次博弈。

IT 累计浏览 4,526

算法的意义

作者从大学时期学习算法的经历出发,坦言自己是班上学得最差的那个,因为他总忍不住追问:“这个算法到底是为什么?” 而老师往往难以给出令他满意的回答。 这并非一篇传统的算法教程,而更像是在探讨算法学习的本质。它指出,许多人(包括曾经的老师)对算法的理解,可能还停留在“如何实现”的工具层面,而忽略了算法作为一种“思维方式”的核心意义——它如何抽象问题、权衡取舍,并最终优雅地解决问题。 文章的核心观点在于,理解算法背后的“为什么”,比单纯掌握其“怎么做”更为重要。这种追问驱动着学习者从机械记忆转向深度思考,真正领略算法设计中那种对效率与结构的极致追求。当我们开始思考“为什么”,算法就不再是课本上冰冷的伪代码,而成为了锻炼逻辑与洞察力的绝佳途径。