- 博客(39)
- 资源 (3)
- 收藏
- 关注
原创 Linux内存管理(九): 页面回收
page reclaim##1. 内存回收系统在运行一段时间后,内存逐渐的被分配过去, 空闲内存会越来越少,为了保证之后的程序有足够的内存可用, linux 内核会通过“page reclaim”机制 回收一部分内存。1.1 页面回收主要会做哪些动作将count = 01.1 哪些page可以被回收count = 0? page cache? swap? 进程?1.2 什么时候触发内存回收?1.3 页面回收算法1.4 水位内核实现2.1 数据结构lru, scan contrl
2022-02-20 20:12:44
3137
2
原创 Linux内存管理(四):paging_init分析
上文介绍了启动页表的创建,通过fix map建立DTB物理地址的映射,以及memblock管理物理内存。现在我们能够通过memblock进行物理内存的分配,但分配的内存还不能够进行访问,我们需要对memblock管理的内存进行映射,这就是paging_init的一部分工作paging_initvoid __init paging_init(void){ pgd_t *pgdp = pgd_set_fixmap(__pa_symbol(swapper_pg_dir)); -------- (1
2020-10-28 00:41:33
5549
原创 Linux内存管理(三):“看见”物理内存
上文介绍了xxx,本文基于xxx, 平台是x’x’x.启动页表的创建在arm64体系架构上,在进入start_kernel之前的汇编代码初始化阶段会进行两次的页表映射:Identity mapping 和 kernel image mapping.表格:identity mapping:(arm64 kernel image mapping的变化)用来打开mmukernel image mapping:用来跑内核代码,内核代码是在vmalloc区域一旦设定完了页表,那么打开MMU之后
2020-10-06 19:51:42
5326
1
原创 PCIe学习笔记之Max payload size
Max payload size和max read request size1. 概述1.1 max payload size1.2 max read request size1.3 两者的关系Max payload size对性能的影响改变max payload size的大小2. 内核实现
2020-07-01 22:18:22
29220
11
原创 linux内存管理(一): arm64内核内存布局
1. 内核内存配置AArch64 Linux通常使用以下配置:4KB页面, 使用3级或4级转换表,支持39位(512GB)或48位(256TB)的虚拟地址。64KB页面,使用2级转换表,支持42位(4TB)虚拟地址。他们的内存布局是一致的。以内核defconfig默认的4KB page + 4 levels配置为例,LINUX在arm架构上把虚拟地址空间划分为2个空间, 虚拟地址和...
2020-03-03 23:19:57
14353
原创 Linux内核笔记之PCIe hotplug介绍及代码分析
前言本文基于Linux kernel 4.19.0, 体系结构为aarch64.PCIe hotplug
2020-02-01 23:29:07
17778
1
原创 ARM GICv3 ITS介绍及代码分析
前言:在ARM gicv3中断控制器,有提到过ITS的作用,本篇就ITS进行更详细的介绍以及分析linux 内核中ITS代码的实现。inux从4.9开始,gic驱动的代码为了实现acpi的功能,代码进行过一些调整,因为个人对acpi了解有限,所以本文基于linux 4.8.17,介绍DT方式初始化的ITS代码。ITS概述:在GICv3中定义了一种新的中断类型,LPI(locality-sp...
2020-01-29 20:30:35
13465
23
原创 Linux 内核笔记之高层中断处理
本文基于Linux kernel 4.19.0, 体系结构是aarch64中断处理入口在ARM GICv3 GIC代码分析一文中,有分析到在GIC 控制器初始化时会设置ARM中断控制器的中断处理函数 handle_arch_irq。static int __init gic_init_bases(void __iomem *dist_base, struct redist_re...
2019-08-18 22:01:33
4783
2
原创 ARM GICv3中断控制器
GIC,Generic Interrupt Controller。本文主要介绍GIC v3控制器, 基于linux kernel 4.19.0。
2019-02-17 21:55:45
13712
3
原创 Linux内核笔记之KASLR
KASLR, kernel address space layout randomization,内核地址空间布局随机化,是linux内核的一个非常重要的安全机制。KASLR技术可以让kernel image映射的地址相对于链接地址有个偏移,安全性上有一定的提升。
2019-01-20 18:48:38
15758
3
原创 linux内核驱动编程的一道陷阱题
在面试时遇到过一道linux 内核驱动编程的题目,我觉得这道题很有价值,能够很好的反应个人的编程水平。题目很简单,凭记忆整理了下,代码如下:#include <linux/init.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/kthread.h&am
2018-12-01 17:42:57
701
原创 ARM aarch64汇编学习笔记(三):寄存器概述
ArmV8 寄存器简单概念:ARMv8拥有两种执行模式: AArch64执行A64指令,使用64bit的通用寄存器; AArch32执行A32/T32指令,使用32bit的通用寄存器; 注: A32: 32位定长ARM指令集,需要4字节边界对齐;通过不同架构变体增强部分,32位架构执行环境现称为AArch32; T32: 16位定长Thumb指令集,需要2字节边界对齐,在...
2018-07-31 22:49:29
10128
1
原创 ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用
工欲善其事,必先利其器。 使用Qemu 虽然可以进行模拟开发,但在Qemu调试汇编有一些困难。 DS-5 (即ARM Development Studio 5) ,是一款针对 ARM 支持的 Linux 和 Android 平台的全面的端到端软件开发工具套件。DS-5 安装从官网选择一个ARM DS-5版本进行下载 我选择的版本是5.26.2, 已经支持Arm v8了。 ...
2018-07-14 19:05:45
7105
5
原创 ARM aarch64汇编学习笔记(一):搭建编译环境
最近,对arm的汇编产生了兴趣,之前对汇编的知识掌握的不深,算是从零学习吧,用blog记录下学习的点滴,希望能够坚持下去。环境搭建市面上其实是有一些arm64位的服务器可以供选择的,比如cavin的thunder x2,华为的泰山服务器等。 不过没有arm的服务器并不代表学不了arm64汇编,我主要是在x86的虚拟机上使用QEMU和cross- toolchain学习aarch64汇...
2018-05-20 23:44:26
10361
1
原创 CPU体系结构之cache小结
1.What is cache?CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量...
2018-03-25 13:51:11
28814
6
原创 稀疏矩阵概念及简单实现
稀疏矩阵:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。特性: 1.稀疏矩阵其非零元素的个数远远小于零元素的个数,而且这些非零元素的分布也没有规律。 2.稀疏因子是用于描述稀疏矩阵的非零元素的比例情况。设一个n*m的稀疏矩阵A
2018-03-12 21:51:48
96152
17
原创 PCIe设备发现过程
PCIe在调试过程中,经常会出现扫描不到对端EP设备的问题,在问题定位过程中,了解内核中pcie枚举流程至关重要。PCIe枚举过程一般分为三步: 1.创建根节点 2.扫描根节点下设备 3.为根节点下设备分配资源那么如何发现设备? 从总线扫描pcie设备的函数pci_scan_child_bus开始分析unsigned int pci_scan_child_bus(struc
2017-05-01 23:40:00
14272
5
原创 linux 内核笔记--中断子系统之softirq
linux把处理硬件中断的过程分为两部分。上半部简单快速,执行时禁止部分或全部中断。下半部稍后执行,并且执行期间可以响应所有的中断。这样的设计会使系统处于中断屏蔽的状态尽可能的短,从而提高系统的响应能力。 下半部的处理方式主要有soft_irq,tasklet,workqueue三种,他们在使用方式和适用情况上各有不同。soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,在中断上下文
2017-03-19 19:09:27
5979
IHI_0070_C_a_System_Memory_Management_Unit_Arm_Architecture_Specification.pdf
2020-04-09
HI0069E_gic_architecture_specification_v3.pdf
2020-01-29
GICv3_Software_Overview_Official_Release_B.pdf
2020-01-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人