Linux 内核 Buddy 系统

Linux 内核 Buddy 系统

Linux Linux 的内存管理部分很复杂,涉及到了方方面面的原理,众所周知 Linux 内核由全世界各个地区的优秀工程师集智而成,所以这里面包含了许许多多的令人赞叹的设计,今天我们要来学习的伙伴系统就是这其中的臻品之一。在内核初始化完成之后,所有的内存申请与释放都交给了伙伴系统来完成,他就像是一个厨师,总是很勤劳的买菜、洗菜做饭等等,而且不论客人如何对待他,他也总是笑脸相迎,默默付出不求回报,等待着客人用…

ARM64 芯片的 Jiffies 更新流程

ARM64 芯片的 Jiffies 更新流程

ARM64 最近在调试 arm64 机器时遇到了一个比较蛋疼的时钟问题,这个时钟问题会导致在部分机器类型上导致无法启动,为了深入了解并解决掉这个问题,特定决定研究一下整个 jiffies 的更新逻辑过程,本篇文章写于 site 上传之前的半年前,所以可能存在某些纰漏,检查也不够细致但是希望能够为后来者多少提供 jiffies 的一个基本的逻辑架构描述,让大家少走弯路,针对于别的平台,jiffies 的更新也相…

DMA 与 scatterlist 技术简介

DMA 与 scatterlist 技术简介

DMA DMA 是一项很古老的技术,在 Wiki 中是这样定义的:直接内存访问(Direct Memory Access,DMA)是计算机科学中一种内存访问技术,它允许某些计算机内存的硬件子系统(外设)可以独立且直接的访问系统内存,不需要 CPU 的参与。在同等程度的处理器负担情况下,DMA 是一种快速的数据传递方式,所以很多的硬件都会使用到 DMA,以及操作系统也会对 DMA 进行足够的支持,比如我们常…

NVMe 设计逻辑与原理解析

NVMe 设计逻辑与原理解析

NVMe 需要深入的研究 NVMe 整个协议以及他的驱动实现逻辑,特此做一定的记录于此,一方面方便自己记忆,另一方面可以给后来者一个参考。 NVMe 命令 NVMe 有两种命令,一种叫做 Admin Command, 用来对 Host 进行管理以及控制 SSD;另外就是 I/O Command,用来处理 Host 和 SSD 之间的数据传输,下面表格列举当前的 NVMe 1.2 版本手册协议中定义支持的命令…

Linux 内存布局

Linux 内存布局

Linux 关于内存分配,一般的 C 语言开发者使用的更多的是 glibc 库提供的 malloc 和 calloc 等函数,这些函数执行成功,这会返回一个进程所需要的内存起始地址,当然,他们是针对 CPU 端的虚拟地址。Linux 内核负责与硬件打交道,针对 CPU 端的虚拟地址很多场景下都不满足需要,固这些函数在内核状态下无法运行,所以内核提供了自己的一套专门的内存申请释放函数1。 进程在执行过程中,Li…

Linux 内核的缓存简介

Linux 内核的缓存简介

Linux 提笔之前,对于 Linux 的缓存与预读这个机制尚且没有一个完整的概念,只能边看边学习然后记录,这篇文章仅仅只能作为一个参考学习资料,并不能作为技术文档载入各位的知识体系,当然,作为课外阅读来讲,还是足够的,毕竟干货还是不在少数,我会一步步的深入缓存与预读的各个体系以及在某一次调试过程中与缓存以及内存碎片相关的 BUG 进入一个探讨,方便读者以及自己能够有个清晰的记忆,也是为了能够对整个知识体系有…

Linux 内核的 RCU 实现逻辑

Linux 内核的 RCU 实现逻辑

Linux 一直都对 Linux 的锁机制很感兴趣,也花过一段时间对各种类型的锁进行研究。本文对类似自旋锁、互斥锁、信号量的基本锁不进行深入介绍也默认读者能够通过查找迅速获得这些锁的一个基本使用场景和原理。很多时候,我们需要更为细粒度的锁,譬如对于读多写少的情况,我们希望读者与读者之前不需要锁,让他们能够尽快的 Pass,这个时候我们就需要用到一种更为快速的锁那就是读写锁,读写锁的设计逻辑就是读者与读者之间不…

MacOS 平台开机自动运行 aria2c 脚本

MacOS 平台开机自动运行 aria2c 脚本

aria2 我个人用的是 MacBook Pro,而且还是一个程序猿,所以平常喜欢折腾这台电脑,最近有个很蛋疼的事情就是迅雷下载很呵呵,就算开了会员下载也那样,同时很多你懂的资源也全部都禁止了,别想错,就是一些有版权的电影是无法下载了。那么作为一个新时代的在习近平同志正确领导下的为了新中国特色社会主义奉献终生的无产阶级程序猿又该如何办呢? 首先你得有个 Chrome 浏览器,为什么呢?国产的不是很好用吗?我想…

Linux Qt 无边框窗体的移动以及禁止使用窗体的最大化

Linux Qt 无边框窗体的移动以及禁止使用窗体的最大化

Linux Linux Qt 无边框窗体移动的问题 网上有多种移动无边框 Qt 程序的方法,集中在通过 MousePressEvent 以及 MouseMoveEvent 两个事件的处理上,不过在 Linux 平台上,他们实现的移动效果不能满足我的要求,因为在 Gnome 的环境中无法移动出屏幕左侧(Ubuntu 系统中),这一点很不友好;在 QML 程序中,通过对 MouseArea 中重载 onClick…

ARM64 的 Linux 内核 kgdb/kdb 调试

ARM64 的 Linux 内核 kgdb/kdb 调试

ARM64 什么是 gdb、kdb、kgdb? GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具,功能强大,支持远程调试、交叉调试等。被广泛应用于 UNIX 环境下的应用程序调试。kgdb 是仅用于调试内核的一种源码级调试器,kgdb 运行在核内,自身不能单独用来调试内核,需要远端的 gdb 通过串口或网络远程连接上来进行调试,连上之后就可以像调试核外应用程序一样调试内核,如设置断点、…

加载更多