VMA
  • 2024-08-26内存管理-31-进程内存占用-3-/proc/pid/maps‌
    基于msm-5.4一、初探此文件描述了进程使用的每个内存段的信息,但是并不是所有的段,也不是一个段的所有部分都加载到内存中了,除非使用了对应的页面。1.打印格式#cat/proc/593/maps5e0cb16000-5e0cc1a000r--p00000000fc:03100868352/system/bin/su
  • 2024-08-26内存管理-31-进程内存占用-4-/proc/pid/smaps
    基于msm-5.4一、初探1.打印格式#cat/proc/593/smaps...7e5a528000-7e5a626000r--p0000000000:1f5/dev/binderfs/hwbinderSize:1016kBKernelPageSize:4kBMMUPageSize:4kBRss:
  • 2024-08-23为什么通过clear_refs可以使进程触发缺页?
    平台ARM64Linux6.10作者[email protected]背景最近在学习Linux的缺页异常时突然奇想,在不进行内存换出的情况下,如何让进程再次触发缺页?基于对ARMv8的理解,它的MMU的页表项中有个AF位,当AF为0时,当访问到对应的虚拟页时,会触发缺页。如果AF位为0,当访问到对应的虚拟页时
  • 2024-08-14crash+awk:统计vma的大小
    正常的vm命令输出:crash_new>vmPID:2380TASK:ffffff88414bddc0CPU:5COMMAND:"xxx"MMPGDRSSTOTAL_VMffffff880a997c00ffffff882574700016565804k44535380kVMASTARTENDFLAG
  • 2024-08-10多元时间序列分析统计学基础:基本概念、VMA、VAR和VARMA
    多元时间序列是一个在大学课程中经常未被提及的话题。但是现实世界的数据通常具有多个维度,所以需要多元时间序列分析技术。在这文章我们将通过可视化和Python实现来学习多元时间序列概念。这里假设读者已经了解单变量时间序列分析。1、什么是多元时间序列?顾名思义,多元时间序列是
  • 2024-06-15linux内存管理(八)- 反向映射RMAP
    这里有一篇博客讲的不错。linux内存管理笔记(三十八)----反向映射_linux反向映射-CSDN博客页表是把虚拟地址映射到物理页面,但是如何根据一个物理页找到所有映射它的pte呢?答案是用反向映射ReverseMapping(RMAP)。这在页面回收中很有用。回收页面需要将到物理页的映射断开(改一下pte
  • 2024-06-11linux内存管理(四)- 用户空间的内存分配在kernel中的实现
    malloc是常用的用户态分配内存的接口,它会调用brk系统调用来请内存分配内存。下面看看该系统调用的实现。插一句,每次调用malloc的时候未必都会调用brk去从kernel分配实际的内存,因为每次系统调用都是有开销的,为了避免频繁的陷入内核,malloc会多申请一部分内存当作内存池,之后要申请内
  • 2024-06-11linux内存管理(七)- 写时复制
    在fork进程的时候子进程会共享父进程的页表,但并没有分配新页。此时页表时只读的,如果父进程或者子进程写内存就会触发pagefault,内核会重新分配内存更改页表,从此分道扬镳。因此写时复制包含两部分内容,第一是fork进程时复制页表并设置pte为只读,第二是写内存发生pagefault。先来看
  • 2024-06-11linux内存管理(五)- 缺页处理
    分析一下缺页的处理。缺页的意思是在访问内存的时候该地址还没有建好页表,页面尚未分配,或者页面被swap出去或者没有权限。缺页是同步异常,用户态发生缺页异常会等待内核解决,当然这一切对于用户态都是透明的。缺页处理的核心函数是do_page_fault,这个函数是架构相关的所以这个函数分布
  • 2024-06-10【操作系统】页表映射
    页表的一些术语现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语:全局目录项,PGD(PageGlobalDirectory)上级目录项,PUD(PageUpperDirectory)中间目录项,PMD(PageMiddleDirectory)页表项,(PageTable)大家在看内核代码时会经常看的以上术语,但在ARM的
  • 2024-06-07【Linux驱动设备开发详解】11.内存与I/O访问
    1.内存管理单元高性能处理器一般会提供一个内存管理单元(MMU),用于辅助操作系统尽心修改内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。1.1MMU基本概念1.1.1概念含义1.TLB(TranslationLookasideBuffer):旁路转换缓存,TLB是MMU的核心
  • 2024-04-04CSC3150Unix的教学操作系统
    CSC3150-说明书-A3介绍这项任务使用xv6,一个简单的、类似Unix的教学操作系统,作为平台指导您实现mmap和munmp系统调用。这两个用来共享进程之间的内存,并将文件映射到进程地址空间。一般来说,这项任务的重点是内存映射文件。支持内存映射的机制文件可以处理文件,就好像它们是程序内存
  • 2024-02-23[MIT 6.S081] Lab: mmap
    Lab:mmap在本次实验中,我们要实现的是一个比较简简单的mmap实现,将文件映射到内存中的某个块,并根据权限设置这块内存的行为,以及为其提供延迟分配策略。mmap对于将文件映射到内存,其实是先规划好一块区域给文件使用,为什么要提供延迟分配,是因为如果需要映射一个文件时,就规划好一
  • 2024-02-14【XV6】 mmap
    代码:https://github.com/JasenChao/xv6-labs.git文件映射到进程地址题目要求实现两个系统调用:mmap和munmap。主要功能就是将文件映射到进程的内存中。题目给出了mmap和munmap的声明:void*mmap(void*addr,size_tlen,intprot,intflags,intfd,off_toffset)
  • 2024-02-11[转帖]linux参数之max_map_count
    https://www.cnblogs.com/duanxz/p/3567068.html “Thisfilecontainsthemaximumnumberofmemorymapareasaprocessmayhave.Memorymapareasareusedasaside-effectofcallingmalloc,directlybymmapandmprotect,andalsowhenloadingsharedlibr
  • 2024-02-04Bounds checking strategy - mprotect()-based protection - why does not saturate the CPU like other me
    Boundscheckingstrategy-mprotect()-basedprotection-DoesnotsaturatetheCPUlikeothermechanismsSourceSzewczyk,R.,Stonehouse,K.,Barbalace,A.,&Spink,T.(2022).Leapsandbounds:AnalyzingWebAssembly’sperformancewithafocusonboun
  • 2024-01-28linux内存管理(三)进程地址空间(上)v5.0
    每个进程都有自己的虚拟机地址空间。在task_struct数据结构中有一个mm_struct专门用来描述进程的虚拟地址空间。structtask_struct{...structmm_struct*mm;...}structmm_struct{struct{structvm_area_struct*mmap;/*listofVMAs*
  • 2023-12-23linux内核中的zero-page
    zero-page操作系统给用户新分配的内容(通过mmap或者brk)都是清零过的,但是这些虚拟地址通常都是按需分配物理页面。这里的“按需”的需求可能是读取,也可能是写入。如果只是读取,只要保证读取内容是零即可,在MMU的基础上,可以让“所有”虚拟地址都映射到内容为0的物理页面中。这样如
  • 2023-12-17mmap内存映射 --- 字符设备驱动,用户空间和内核空间映射到同一个物理内存
    内存映射可实现用户程序对设备驱动内存的直接存取示例代码:驱动层#include<linux/init.h>#include<linux/module.h>#include<linux/miscdevice.h>#include<linux/fs.h>#include<linux/slab.h>//定义kmalloc接口#include<asm/io.h>//定义virt_to_phys接
  • 2023-12-05Unevictable LRU Infrastructure (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/latest/mm/unevictable-lru.htmlIntroductionThisdocumentdescribestheLinuxmemorymanager's"UnevictableLRU"infrastructureandtheuseofthistomanageseveraltypesof"unevictable"folios
  • 2023-11-08一次Binder通信最大可以传输多大的数据?
    前言在第六章中,我通过匿名共享内存的方式解决Binder通信是无法传递大数据的问题,一次Binder通信最大可以传输是1MB-8KB(PS:8k是两个pagesize,一个pagesize是申请物理内存的最小单元)但是这个答案对不对呢,我只能说不准确,接下来我们来仔细研究一下1MB-8KB的限制来源于哪里frameworks/
  • 2023-11-01android ebpf之uprobe原理和检测方法
    uprobe通过内核层对用户层进程的指定地址的原指令copy到其他位置,然后写入指定类型中断指令,然后内核中设置对应的中断处理程序,中断处理程序中执行uprobe设置的回调过滤函数,然后设置单步执行copy的原指令后恢复寄存器状态继续执行。ida查看被uprobehook的函数头部,指令被修改为了中断
  • 2023-09-28编译链接概念,VMA/LMA是什么
    编译基础概念为了描述链接器脚本语言,我们需要定义一些基本概念和词汇。链接器干的主要事情就是把输入文件整合成一个输出文件。那么输入是什么?输出是什么?怎么整合?整合的是什么信息?输入和输出文件都是object文件格式。它们都称为目标文件。输出文件又称为可执行文件。它们的内容
  • 2023-09-24crash —— 查看进程的vma结构体
    crash提供了vm命令来输出进程的vma相关的信息。输出当前当进程的vma列表crash>vmPID:3319TASK:ffff889760358000CPU:6COMMAND:"kvm"MMPGDRSSTOTAL_VMffff893ada165000ffff893a8c4e200045772k9535832kVMA
  • 2023-07-04字符设备驱动另一种写法—mmap方法操作LED
    最近在看韦老师的视频,讲解了很多种字符设备的驱动写法。经过自己的研究之后,我发现还有另外一种写法,直接在应用层操作,省去了内核中的地址映射部分,使得用户可以在应用层直接操作LED。       mmap方法是把设备物理地址直接映射到用户空间的一种系统调用方法,他