Home
little Joy Personal
Cancel

内核内存分配接口

前文介绍了内核内存管理的相关概念,伙伴系统是内存分配较底层的实现,在其基础之上,还有一些抽象的上层分配方式。 页面分配器 page allocator Linux系统对物理内存分配的核心是伙伴系统,它就是建立在页面级之上的。 在内核中(如驱动程序),如果要分配较大的地址空间,就可以使用这一层面(页面分配器)提供的接口函数。 它提供了几个函数和宏定义函数,主要特点是只能分配 2^n(2的幂...

内核内存管理

几个总结的常识 linux系统中,物理内存管理的最小单元是页,不管是内核还是应用程序,最后在内核中分配内存时,都是以页为单位分配的, 即总是分配多少个页。 页的大小是在内核编译时决定的,且通常是固定的。常见是4KB,主要受限于硬件架构,MMU等。 linux系统中,页的分配是按照2的幂次方来进行的,即1个页,2个页,4个页,8个页这样。和伙伴系统有关。 Linux物理内存管...

字符设备驱动

linux设备驱动 根据分层抽象的思想,linux将设备分为3类: 字符设备 块设备 网络设备 其中字符设备最常见,主要定义的特性是只能顺序访问,比如典型的串口,鼠标,键盘,一般来说只能是有什么数据来,就读什么,总体上不能过去的数据,对于这种模型, 内核中也没有提供缓存机制;块设备常见于磁盘,主要是支持任意顺序访问,想读写哪里就读写哪里,内核中为其提供一个快速缓冲。块设备...

NUMA内存模型

在多处理器系统中,管理物理内存的模型主要有两个,UMA(Uniform Memory Access)模型的系统 和NUMA(Non-Uniform Memory Access)模型系统。它们的主要区别在于内存访问的延迟和带宽分配。 UMA模型 这个是早期模型了,UMA模型主要特点是各个处理器对称访问内存,所有的处理器通过共享总线互连,内存控制器也是连到总线上, 这种模型下,内存控制器是在...

内核模块概要

内核模块 linux内核模块可以在系统运行期间动态扩展功能,无须重启或重新编译内核。不过内核模块通常要和内核版本匹配,否则可能出现不匹配无法加载。 linux驱动程序最常见的形式就是编译为一个内核模块来加载使用,其他形式,也可以编译进内核或将主要IO映射到用户空间,由用户空间来完成驱动主体部分。 不过,编译为ko模块还是linux驱动最常见的形式。ko文件就是elf可重定位目标文件的内部格...

VSCode+GDB远程调试

在VSCode中,支持使用GDB调试器,可以以图形界面远程调试linux环境的程序。用户通过在图形界面操作,由VSCode代为操作GDB,比较直观, 同时也支持用户输入gdb调试指令。 前置条件 在linux系统中安装gdb调试器。sudo apt install gdb。准备好待调试的程序。 在VS Code中安装C/C++扩展,点击侧边栏中的扩展图标,搜索”C/C++”,然...

linux lspci 工具

查看手册 $ man 8 lspci 该工具最好以root 权限运行,否则有些关于pcie设备的信息无法获取。 显示系统中扫描到的PCIe设备(OS枚举完毕后的) 直接使用 lspci 命令即可。 $ sudo lspci 00:00.0 Host bridge: Intel Corporation Device 4668 (rev 02) 00:01.0 PCI bridge: I...

PCIe 热拔插

某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行, 为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。 注:热切换(Hot Swap)和热插拔的主要区别是应用领域不同,热插拔主要应用于PC以及服务器的主板上的板卡连接, 而热切换主要针对的是CPCI(CompactPCI ,一种常用于仪器仪表的...

PCIe 复位机制

PCIe总线中定义了四种复位名称:冷复位(Cold Reset)、暖复位(Warm Reset)、热复位(Hot Reset)和功能层复位(Function-Level Reset,FLR)。 其中FLR是PCIe Spec V2.0加入的功能,因此一般把另外三种复位统称为传统的复位方式(Conventional Reset)。 其中冷复位和暖复位是基于边带信号PERST#的,又被统称为基本...

PCIe中断机制

为了能够让一些优先级高的事务得到优先处理,PCI总线支持外设中断用以提高总线性能。 PCIe总线继承了PCI总线的所有中断特性(包括INTx和MSI/MSI-X),以兼容早期的一些PCI应用层软件。 PCI总线最早采用的中断机制是INTx,这是基于边带信号的。后续的PCI/PCI-X版本,为了消除边带信号, 降低系统的硬件设计复杂度,逐渐采用了MSI/MSI-X(消息信号中断)的中断机制。...