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

标签:systems programming

共 3 篇相关文章

IT 累计浏览 3,958

Linux下互斥量加锁与解锁操作的C代码实现

这篇讲的是在多线程编程中如何安全地保护共享资源。作者从一个常见问题出发:当多个线程需要修改同一全局变量时,必须确保操作的原子性,否则容易引发不可预知的错误。 文章核心是演示一套完整的互斥量加锁与解锁C语言实现。作者没有停留在理论,而是直接给出了可运行的代码文件“LockAndUnlock.c”。其中,自定义的`MutexLock`函数封装了`pthread_mutex_timedlock`,并通过`gettimeofday`获取系统时间,巧妙地计算出带超时(5秒)的绝对等待时间,避免了线程可能被永久阻塞的风险。`MutexUnLock`函数则简洁地封装了解锁操作。 代码结构清晰,包含了宏定义、函数声明和完整的错误处理逻辑。文章最后还附上了在Linux下的具体编译命令(gcc -pthread)和运行结果,形成了一个从问题、方案到验证的闭环。对于需要在C程序中使用POSIX线程互斥机制的开发者来说,这套封装好的函数可以直接作为参考或API使用。

IT 累计浏览 6,146

如何实现一个malloc

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

IT 累计浏览 6,972

Linux操作系统内核3.3版本I/O Stack的流图

这张流程图拆解了Linux 3.3内核的I/O栈结构,由thomas-krenn.com在2012年公开。它从应用层的O_Direct调用开始,清晰地展现了数据路径的完整旅程。 整个流程被分解为几个核心模块:首先涉及直接I/O或经过页缓存的路径,随后进入虚拟文件系统(VFS)层进行文件系统与网络通信的抽象。数据随后到达块I/O层,经过特定的I/O调度算法处理,再由SCSI子系统适配,最终抵达磁盘硬件。 这份资料最大的价值在于其系统性和直观性。它将原本隐含在内核代码中的复杂数据流向,转化为一张可触摸的全局地图。对于需要理解系统底层性能瓶颈、存储调优或文件系统实现的工程师而言,这相当于一份清晰的导航图,帮助准确定位数据在软件与硬件边界之间的每一跳。