自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (2)
  • 收藏
  • 关注

原创 Linux的系统调用

Linux应用程序通过glibc标准API(如exit())发起系统调用。编译后,exit(1)转为三条汇编:mov指令将系统调用号存入eax,参数存入ebx,int 0x80触发中断。CPU通过中断描述表找到system_call()入口,根据eax值查询系统调用表(如syscall_64.tbl),匹配对应的内核函数(如sys_read)。内核函数通过SYSCALL_DEFINE宏定义,最终执行__do_sys_xxx实现具体功能。整个过程实现了用户态到内核态的安全切换。

2025-08-29 15:58:01 131

原创 Linux内存管理 - LRU机制

本文介绍了Linux内核中的LRU(最近最少使用)内存管理机制。内核通过LRU链表将内存页分为活跃(热页)和不活跃(冷页)两类,当内存不足时由kswapd线程回收冷页。文章详细解析了LRU的数据结构实现,包括lruvec结构体、5种LRU链表、PG_referenced标志位的作用机制,以及从pagevec到folio_batch的演进过程。这些机制共同实现了高效的内存回收策略,通过批量处理folio结构优化了内存管理性能。

2025-08-29 15:54:58 405

原创 Linux的页表管理

本文摘要: Linux内存管理机制解析,重点介绍了物理帧号(PFN)与页表结构的关系。32位系统使用二级页表(PDE-PTE),64位系统使用四级页表(PGD-PUD-PMD-PTE)。文章详细阐述了页错误(Page Fault)的触发机制与处理流程,包括内核页表init_top_pgt的初始化过程。同时分析了进程切换时页表更新的机制,指出内核通过clone_pgd_range将部分内核页表(273-511项)拷贝到用户进程页表,既保证内核页表不变,又防止用户空间越界访问内核区域。最后对比了32位与64位系

2025-08-14 14:36:17 681

原创 Linux中vmalloc的实现

本文分析了Linux内核中vmalloc的实现机制。vmalloc用于在内核空间分配虚拟连续但物理不连续的内存,其核心流程包括:1)通过__get_vm_area_node在vmalloc区域查找可用虚拟地址,使用红黑树管理vmap_area结构;2)通过__vmalloc_area_node从buddy系统分配物理页,建立页表映射;3)处理缺页异常时,通过vmalloc_fault将init进程的页表项复制到当前进程。该机制通过init_mm共享内核页表,实现了进程间内核地址空间的同步。

2025-08-11 16:38:52 956

原创 kmalloc

摘要:kmalloc是Linux内核中用于分配小块连续内存(≤4K)的核心机制,底层依赖slab(小内存)或buddysystem(大内存)。其分配策略为:≤8K从slab分配(预定义kmalloc_caches管理不同尺寸的slab,如8B~8K),>8K则直接调用buddysystem(最大支持4M)。内存地址通过内核启动时已建立线性映射(PA=VA-FixedOffset)。实现上,kmalloc通过编译优化区分常量/非常量请求,最终调用___kmalloc_large_node(buddysyst

2025-08-11 16:30:33 1002

原创 Slub(Slab)

本文摘要: Linux内核SLUB内存分配器是对SLAB的改进版本,采用分层管理结构。核心数据结构包括kmem_cache(描述缓存池)、kmem_cache_cpu(CPU本地缓存)、kmem_cache_node(NUMA节点缓存)和slab(内存页管理单元)。SLUB采用两级回收机制(CPU级和Node级),通过freelist实现快速分配。当本地CPU缓存不足时,会依次检查partial链表和伙伴系统获取内存。调试特性包括红区检测和kfence工具。关键函数kmem_cache_create/all

2025-08-11 16:28:58 802

原创 Per-CPU pages

这些缓存在pcp中的页框,若释放到free_area中则可能可以与其它页框合并成order更高的内存块,从而减少系统的内存碎片。PS: 通过per_cpu_ptr(zone->per_cpu_pageset, cpu_x);得到一个指针,指向cpu_x的那个struct per_cpu_pages空间。(1)为每个zone调用setup_zone_pageset分配并初始化per_cpu_pageset。(2)初始化每个cpu的struct per_cpu_pages的每个变量, 这里是给每个变量都赋0。

2025-08-11 16:24:16 809

原创 Buddy system

Linux引入了伙伴算法(buddy system)来解决内存外碎片问题。该算法将物理内存划分为2^n大小的块,并按大小组织成不同阶(order)的链表。分配时,先查找合适阶的链表,若没有则从高阶分割出所需块;释放时,会检查相邻空闲块是否为伙伴关系,是则合并成高阶块。核心数据结构free_area数组管理各阶空闲链表,通过__rmqueue_smallest等函数实现分配,释放时通过合并减少碎片。算法还支持不同迁移类型(MIGRATE_TYPES)的内存管理,并包含fallback机制处理分配失败情况。

2025-08-11 16:19:19 917

原创 Linux内核对物理内存组织与分配

Linux物理内存管理采用分层结构:NUMA架构下引入node概念,每个node对应一个物理内存节点,由pglist_data结构表示。node进一步划分为多个zone(如DMA、NORMAL等),由zone结构描述。物理内存以page为单位管理,通过mem_map全局数组跟踪所有页框。Linux采用四种机制管理不同粒度的内存分配:伙伴系统处理大块连续内存(>32K),per-CPU页缓存优化小内存分配(≤32K),slab缓存管理小块对象(<4K),vmalloc机制提供虚拟连续的内存空间。这

2025-08-11 16:12:37 792

原创 Cache和内存一致性

本文主要探讨缓存一致性与内存一致性的区别。内存(DIMM)是物理存储设备,而缓存(CPU芯片内的L1-L3)是高速暂存区,采用分级结构。缓存一致性通过MESI协议(四种状态)确保多核CPU访问同一数据时的正确性,分为Snooping和Directory两种模式。内存一致性则涉及NUMA架构,解决多处理器访问内存的性能问题,其中cc-NUMA在NUMA基础上支持缓存一致性。文章详细对比了二者的工作原理和实现机制,帮助理解计算机系统中的这两种重要一致性概念。

2025-08-11 16:02:41 478

原创 x86/64-物理地址、虚拟地址、线性地址、逻辑地址

文章摘要:本文梳理了x86架构中的地址转换机制。总结了物理地址、虚拟地址、线性地址、逻辑地址的定义和相互转换关系。

2025-06-25 15:30:10 612

原创 一文读懂NPEM(Native PCIe Enclosure Management)

本文从PCIe协议即软件的角度和硬件实现的角度,详细介绍讨论了NPEM(Native PCIe Enclosure Management)。

2024-01-24 11:19:31 3538 4

原创 IPMI的SOL (Serial Over LAN)原理与使用

本文档介绍了在服务器上配置和使用SOL远程控制Linux和ESXi直接控制台的方法。

2024-01-08 15:29:42 9947

原创 如何使用pyvmomi在ESXi中创建虚拟机并配置其相关硬件

使用pyvmomi创建VM使用的API是createVM_Task, 具体使用说明如下:接下来我们一步一步来看怎么实现。

2023-06-19 11:22:43 443

原创 通过pyvmomi给ESXi现有VM添加一个SCSIcontroller

通过web手动添加SCSIcontroller的时候可以知道,ESXi的VM只能添加ParaVirtualSCSIController。

2022-10-11 16:21:55 422

原创 SONiC系统概要、使用及移植

文档概述文档目的本文档从多个方面介绍了SONiC及其移植、安装和使用等。旨在帮助没有接触过SONiC的工程师,快速入门、了解SONiC,并学会移植和简单的使用SONiC。文档背景SONiC 是一个为网络设备开发的开源操作系统项目。与ONL一样,SONiC需要通过ONIE环境安装系统到磁盘或者flash分区中。SONiC简介SONiC是一个基于Linux的开源的网络操作系统,运行在多个供应商的交换机和ASIC上。SONiC提供一整套的网络功能,例如BGP和RDMA,这些功能已经在一

2022-05-21 16:17:58 9721

原创 Linux插入华为无线网卡无法识别问题

内核版本较老,版本3.18.16。插入后无法例化出网口,看dmeg打印发现系统检测到了

2020-03-24 11:27:29 832

原创 ATCA基础入门学习总结

       最近刚开始学习ATCA,尝试调试写一套板卡机框管理程序,分享记录学习的过程和总结,对一些知识理解还较为浅显片面,欢迎大家指正共同学习,还有不停陆续完善此文。1.什么是ATCA        ATCA,又称先进通信计算机体系架构,是PICMG开发的业内最新的开放标准之一,说简单通俗一点儿,就是为电信级平台创建了一种硬件规格(标准刀片式板卡 + 标准机箱)和软件规范(管理的通信协议...

2019-02-18 13:13:58 5072

原创 Nuttx系统添加自启动脚本(上电后自动运行程序)

步骤1 : 进到你的工程目录下我的工程目录是/home/truman/work/nb/nuttx所以输入命令cd /home/truamn/work/nb/nuttx步骤2 : 找到etc文件压缩包输入指令find -name "etc*"会得到以下路径./configs/sim/include/etc.tar.gz进到该文件夹下cd configs/s...

2019-02-18 09:37:04 460

原创 git clone时出错 提示需要密码

2018-01-26 09:50:40 297

STM32L071_MDK工程模板

最近在做STM32L071上的开发,官方给的资料包中没有 STM32L071的工程,遂自己参照正点原子的形式建了一个,可用。

2018-11-06

数字图像实训报告

一共四个实验 有程序和处理结果图片 实验一、计算图象统计参数及直方图变换 实验二 傅里叶变换及空间域和频率域滤波 实验三 彩色图像处理 实验四 形态学图像处理 车牌识别图像预处理技术:

2017-06-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除