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

标签:operating systems

共 5 篇相关文章

IT 累计浏览 6,146

如何实现一个malloc

很多用C语言的程序员都熟悉 `malloc` 这个函数,但它既不是C关键字也不是系统调用,其背后的实现原理常被忽略。这篇讲的是如何从零开始实现一个简易的 `malloc`,帮助读者理解内存分配器的核心思想。 文章从现代操作系统的内存管理基础讲起,清晰梳理了虚拟内存、页表、Linux进程内存布局等关键概念,特别聚焦于堆内存管理和 `brk`/`sbrk` 系统调用。作者先给出了一个只增不减的“玩具实现”,直观展示如何用 `sbrk` 划拨内存,进而引导读者思考如何设计元数据、管理空闲块以实现真正的分配与释放。 虽然这个为了教学而简化的实现效率不及 glibc 中的生产级代码,但它与真实 `malloc` 的实现原理一致。对于想深入理解内存管理、打破 `malloc` 黑盒的开发者而言,这篇文章提供了一条清晰且可动手实践的路径。

IT 累计浏览 6,404

malloc()之后,内核发生了什么?

作者从一个常见的用户空间操作出发,即进程调用 `malloc()` 后尝试访问内存,一路追踪到内核空间的真实发生过程。文章的核心在于揭示,用户感知到的“内存分配”在内核层面主要通过 `brk` 系统调用来实现,其背后是一套从修改堆描述符到最终响应缺页异常的精密机制。 讲解路径非常清晰:首先,`malloc()` 会触发 `brk` 系统调用,通过 `SYSCALL_DEFINE1(brk,...)` 服务例程来调整进程的堆边界。文中展示了该例程如何检查资源限制、对齐地址,并根据是扩大还是缩小堆,分别调用 `do_brk()` 或 `do_munmap()`。 文章的巧妙之处在于指出,此时内核通常并未立即分配物理内存。`do_brk()` 的核心工作是在进程的虚拟地址空间中分配或合并一个线性区间(VMA),为后续可能的操作“预留地盘”。真正的魔法发生在第二步:当进程首次访问这块新地址时,CPU 会因页表项无效而触发缺页异常。文章接着深入异常处理流程,从 `page_fault` 入口,到 `do_page_fault()` 判断异常类型,最终由 `handle_mm_fault()` 接手。 在 `handle_mm_fault()` 中,内核才开始真正“分配”物理内存——它确保页目录结构完整,然后调用 `handle_pte_fault()` 完成页框的分配与映射。整个过程生动地体现了 Linux 内存管理中“延迟分配”的核心思想:先给予虚拟承诺,待实际使用时再兑现物理资源,从而优化了内存使用效率。这对于理解内存分配的全链路至关重要。

IT 累计浏览 2,220

保持简单----纪念丹尼斯o里奇(Dennis Ritchie)

这篇文章是作者受财新网之邀,为纪念刚离世的计算机大师丹尼斯·里奇所写。文章没有罗列其作为C语言和Unix创造者的丰功伟绩,而是抓住了里奇一生所践行的核心编程哲学——“保持简单”。 作者从里奇那些看似简洁甚至“简陋”的设计入手,阐述了这种简单并非简陋,而是一种深刻的洞察力与工程上的克制。文中探讨了里奇如何用最少的元素构建出强大而灵活的系统,以及这种哲学如何深刻影响了整个现代软件世界的根基。它提醒我们,在追求功能与炫技的时代,真正的智慧往往体现在对复杂性的有效驯服与舍弃上。 这篇文章更像是一次对技术初心的回望,让读者在缅怀大师的同时,重新思考自己编码与设计时的根本立场。

IT 累计浏览 6,443

读高性能Mysql-操作系统和硬件优化

这篇讲的是作者精读《高性能MySQL》第七章后,对操作系统和硬件如何影响数据库性能的梳理。作者没有停留在理论层面,而是聚焦于几个最关键的调优点:比如为什么ext4文件系统常被推荐,RAID卡缓存配置不当可能导致数据丢失,以及CPU核心数与线程数的关系如何影响并发处理能力。 文章特别强调了“配置错误比硬件不足更常见”这个观点。例如,许多团队在部署MySQL时直接使用默认的内核参数和磁盘调度策略,这可能让昂贵的硬件发挥不出应有的效能。作者对比了在读密集和写密集两种场景下,不同硬件配置带来的实际性能差异,指出没有万能方案,只有基于业务负载的精准选择。 最后,文章将讨论从纯硬件层面延伸到了监控与迭代。它提到,即使是优化后的配置,也需要通过持续的性能监控来验证效果,并随着业务增长重新评估。这种从具体技术参数到整体运维思路的延伸,让这篇读书笔记不止于知识罗列,更提供了一套可落地的优化思维框架。

IT 累计浏览 4,335

IT人员的必经之路(图解)

这篇讲的是IT从业者的典型职业成长路径,用一张图解把抽象的经验变成了清晰可见的阶段地图。作者没有堆砌大道理,而是直接从IT人的真实日常切入——从刚入行时面对海量基础知识和工具的手足无措,到逐步找到方向、深耕某个技术领域,再到后期需要权衡是继续走技术专家路线还是转向管理岗。 图里很可能把“新手村”的迷茫期、“打怪升级”的技能积累期,以及最终面临“职业十字路口”的选择期都形象地标示了出来。它没有泛泛而谈“要努力学习”,而是点出了不同阶段的核心挑战:比如前期如何建立知识体系、中期怎样构建自己的核心竞争力、后期又该为哪些软技能做准备。这种把时间线和关键节点可视化的方式,能让读者快速对号入座,看清自己正处于哪个阶段,下一步该往哪里突破。 对于正在规划技术路线的读者,这张图或许能提供一个清晰的参考框架,帮助减少在职业发展中的盲目试错。