DMA 与 scatterlist 技术简介

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

NVMe 设计逻辑与原理解析

需要深入的研究 NVMe 整个协议以及他的驱动实现逻辑,特此做一定的记录于此,一方面方便自己记忆,另一方面可以给后来者一个参考。 目录 NVMe 命令 NVMe 有两种命令,一种叫做 Admin Command, 用来对 Host 进行管理以及控制 SSD;另外就是 I/O Command,用来处理…

Linux 内存布局

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

Linux 内核的缓存简介

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

Linux 内核的 RCU 实现逻辑

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

ARM64 的 Linux 内核 kgdb/kdb 调试

目录 什么是 gdb、kdb、kgdb? GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具,功能强大,支持远程调试、交叉调试等。被广泛应用于 UNIX 环境下的应用程序调试。kgdb 是仅用于调试内核的一种源码级调试器,kgdb 运行在核内,自身不能单独用来调试内核,需要远端…

ARM64 中断处理流程

如果说 Linux 内核是个身体,保罗万象,那么中断就如同是其中更为关键的神经系统,有了他的存在,中央处理器才能了解各个外设所处的状态,并且及时的给与支持响应。 本章的重点不是介绍如何使用中断与中断 API,更不是为了了解软件中断、硬件中断、tasklet 微任务以及工作队列有何分别,我们仅仅只是为…