jackieliu

这个人太懒什么东西都没留下

Linux 内核 Buddy 系统

Linux 的内存管理部分很复杂,涉及到了方方面面的原理,众所周知 Linux 内核由全世界各个地区的优秀工程师集智而成,所以这里面包含了许许多多的令人赞叹的设计,今天我们要来学习的伙伴系统就是这其中的臻品之一。在内核初始化完成之后,所有的内存申请与释放都交给了伙伴系统来完成,他就像是一个厨师,总是…

ARM64 芯片的 Jiffies 更新流程

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

DMA 与 scatterlist 技术简介

DMA 是一项很古老的技术,在 Wiki 中是这样定义的:直接内存访问(Direct Memory Access,DMA)是计算机科学中一种内存访问技术,它允许某些计算机内存的硬件子系统(外设)可以独立且直接的访问系统内存,不需要 CPU 的参与。在同等程度的处理器负担情况下,DMA 是一种快速的数…

NVMe 设计逻辑与原理解析

需要深入的研究 NVMe 整个协议以及他的驱动实现逻辑,特此做一定的记录于此,一方面方便自己记忆,另一方面可以给后来者一个参考。 Contents1 NVMe 命令1.1 NVMe 支持的 Admin Command1.2 NVMe 支持的 I/O Command2 NVMe 的三大部件详解3 NV…

Linux 内存布局

关于内存分配,一般的 C 语言开发者使用的更多的是 glibc 库提供的 malloc 和 calloc 等函数,这些函数执行成功,这会返回一个进程所需要的内存起始地址,当然,他们是针对 CPU 端的虚拟地址。Linux 内核负责与硬件打交道,针对 CPU 端的虚拟地址很多场景下都不满足需要,固这些…

Linux 内核的缓存简介

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

Linux 内核的 RCU 实现逻辑

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

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

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

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

Linux Qt 无边框窗体移动的问题 网上有多种移动无边框 Qt 程序的方法,集中在通过 MousePressEvent 以及 MouseMoveEvent 两个事件的处理上,不过在 Linux 平台上,他们实现的移动效果不能满足我的要求,因为在 Gnome 的环境中无法移动出屏幕左侧(Ubunt…

ARM64 的 Linux 内核 kgdb/kdb 调试

Contents1 什么是 gdb、kdb、kgdb?2 ARM64 平台下的 kgdb 完善2.1 Target 端的 kgdb 完善2.2 Host 端的 gdb 更改3 ARM64 平台下 kgdb 远程调试示例3.1 target 端和 host 端的准备3.2 KGDB 的基本使用3.3 …