狂刷KPI
文章平均质量分 78
进程管理,块设备,文件系统
鸭鸭打瞌睡
这个作者很懒,什么都没留下…
展开
-
07_03文件系统怎么玩的
文件对象通过域f_dentry找到它对应的dentry对象,再由dentry对象的域d_inode找到它对应的索引节点(通过索引节点又可以得到超级块的信息,也就可以得到最终操作文件的方法,在open文件的时候就是使用这样一个过程),这样就建立了文件对象与实际的物理文件的关联。f_op也是很重要的!我们看到,Linux系统的文件目录树就是靠上图中的这一系列的链表穿针引线给串在一起的,就像缝制一件衣服一样,最终的成衣就是我们看到的Linux系统目录树,而缝制这件成衣的线以及指导走线的规则便是VFS本身了。原创 2023-10-14 12:02:46 · 257 阅读 · 0 评论 -
04_22 vma(进程下的每个虚拟内存区域查看)对象实战
vma不太懂的可以往前翻03_008内存映射原理_虚拟内存区域vm_area_struct详解,和mmap系统钓调用及物理内存结构体完全分析vam 虚拟内存区域 每个进程下有多个vma 这次是查看每个vma的起始地址 结束地址和大小使用1.进程在用户空间调用mmap也就是上面那个函数。2.在当前进程的地址空间当中寻找一段连续的空虚的虚拟地址3.给这块虚拟地址分配一个vm_area_struct的结构并对其各个区域进行初始化。原创 2023-09-03 15:44:13 · 232 阅读 · 0 评论 -
04_21 slab分配器 分配对象实战
mycaches"的slab描述符,小为40字节, align为8字节, flags为0。从这个slab描述符中分配个空闲对象。在目录 /proc/sys/slab 查看刚刚创建的slab对象。( slab块分配器分配内存),编写个内核模块,创建名称为。原创 2023-08-27 22:51:36 · 137 阅读 · 0 评论 -
04_20 直接使用代码 创建内核模块获取物理内存信息
好像和 free得出来有关 和/proc/meminfo 有关。但是下面是全部的物理页。原创 2023-08-27 18:29:35 · 90 阅读 · 0 评论 -
04_19linux自己撸内存池实战,仿造slab分配器
自己撸一个内存池 其实就相当于linux里面带的 slab分配器 可以翻翻之前的章看看slab 和伙伴分配器的不同在学习c语言时,我们常常会使用到malloc()去申请一块内存空间,用于存放我们的数据。刚开始我们只要知道申请内存时使用用malloc去申请一块就可以,而其中的原理我们并不关心。但是随着我们对运行环境的要求越来越多样化,复杂化,以及对稳定性以及性能问题的要求逐渐变得越来越重要时,我们往往需要关注到性能问题。原创 2023-08-27 16:49:01 · 412 阅读 · 0 评论 -
04_18内存反碎片技术,什么时候适合进行内存碎片整理
内存碎片分为内部碎片和外部碎片,内部碎片指内存页里面的碎片,外部碎片指空闲的内存页分散,很难找到一组物理地址连续的空间内存页,无法满足超过一页的内存分配请求。原创 2023-08-20 23:55:27 · 131 阅读 · 0 评论 -
04_17页回收问题和水位线和swap交换空间和oom,内存性能微调
应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页中断函数)处理。缺页中断处理函数会看是否有空闲的物理内存,如果有,就直接分配物理内存,并建立虚拟内存与物理内存之间的映射关系。扯到之前的内存分配了。原创 2023-08-20 17:32:00 · 241 阅读 · 0 评论 -
04_15页表缓存(TLB)和巨型页
linux里面每个物理内存(RAM)页的一般大小都是4kb(32位就是4kb),为了使管理虚拟地址数变少加快从虚拟地址到物理地址的映射 建议配值并使用HugePage巨型页特性。原创 2023-08-19 15:12:59 · 1425 阅读 · 0 评论 -
04_14缺页异常,虚拟空间加深印象,匿名页,文件页
写代码想知道某段时间内存够不够用 想更清楚高低水位 清楚虚拟ram和物理ram的关系CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存、I0设备等等, 但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而一个虚拟地址,由MMU将虚拟地址转换成物理地址再从地址总线上发出,MMU上的这种虚拟地址和物理地址的錾关系是需要创建的,并且MMU还可以设备这个物理面是否可以进行写操作,当没有创建一个虚拟地址到物理地址的映射,或者创建了这样的映射,原创 2023-08-13 23:34:50 · 115 阅读 · 0 评论 -
03_013内存分配api以及页表详解
之前文章中物理ram中的最小单位一直用页来表示这次又描述的详细了点物理ram的最小单位 有的地方叫 块,框,页帧 在虚拟空间中最小单位也叫页 需要好好区分不过后来想想管你虚拟页还是物理ram页 都存在物理ram上 都能想成一 一对应的关系 所以大家都叫页好像也行。原创 2023-08-13 17:14:55 · 154 阅读 · 0 评论 -
03_012slab块分配器,管理内核内存分配,管理高速缓存
伙伴系统的实现是为了减少物理内存碎片化,每个zone通过自己的伙伴系统减少内存碎片。slab分配器使得内存重复利用,减少物理内存的分配和释放。即通过slab分配器减少了物理内存的碎片化。在Linux中除了slab分配还有slub、slob分配器。他们都是通过缓存对象,来减少实际内存的分配和释放。在linux中通过伙伴系统管理大内存,slab管理小内存。Linux通过这套体系减少了物理内存的碎片化。原创 2023-08-07 00:48:03 · 175 阅读 · 0 评论 -
03_010物理内存ram分配器,内存区域页分配及水位线等分析
伙伴系统(Buddy System)是一种管理物理内存的算法,主要于管理大块的内存区域,如页框。伙伴系统通过将大的内存块不断分割成两个较小的伙伴块,然后按照块大小将伙伴块归入不同的空闲链表中,以便快速找到符合要求的内存块。伙伴系统通常用于分配物理内存,由于内核中的物理内存总量比较有限,因此在分配物理内存时需要考虑内存碎片的问题。而slab则是用于管理内核对象的内存分配器。它的设计目的是为了提高内核对象的内存分配效率,减少内存碎片,提高内存分配的速度。原创 2023-08-06 18:03:22 · 250 阅读 · 0 评论 -
03_008内存映射原理_虚拟内存区域vm_area_struct详解,和mmap系统钓调用及物理内存结构体完全分析
上一个记录中的 虚拟地址里的虚拟内存区域没有说的很完全这次补充一下 同时记录一些 物理地址空间 内存映射原理 最后直接通过进程使用函数完成虚拟空间到物理空间的映射1、mmap0----创建内存映射为什么要使用mmap映射呢 直接读写文件不香吗???1.系统调用mmap():进程创建匿名的内存映射,把内存的物理页映射到进程的虚拟地址空间。2.进程把文件映射到进程的虚拟地址空间,可以像访问内存一样访问文件,不需要调用系统调用read()/write()访问文件,原创 2023-07-15 21:50:53 · 534 阅读 · 0 评论 -
03_007linux内存管理架构以虚拟内存空间布局架构(用户地址空间+内核地址空间)
malloc()/free()是 glibc库的内存分配器ptmalloc提供的接口,在内存碎片化的时候,申请连续物理页的成功。MMU包含一个页表缓存, 保存最近使用过的页表映射,避免每次把虚拟地址转换为物理地址都需要查询内存中的页表。当内存碎片化的时候,找不到连续的物理页,内存碎片整理通过迁移方式得到连续的物理。如果使用新的指针 p_new 接收 sbrk 系统调用返回的堆内存指针 , 则分配的是新的地址;比较低,可以申请不连续的物理页,映射到连续的虚拟页,即虚拟地址连续而物理地址不连续。原创 2023-07-10 01:09:07 · 978 阅读 · 0 评论 -
02_06内核cpu信息及内存布局及堆管理及内存使用情况
虚拟地址也同样最大支持48位寻址,所以在处理器架构设计上,把虚拟地址空间划分为两个空间,每个空间最大支持256TB,如果虚拟地址对应的物理页不在物理内存这时候产生一个缺页中断,此时分配一个真正的物理地址,此时更新一些进程页表 如果此时物理内存已经耗尽,会根据内存替换规则的算法设计,删除一些页面保存。堆是进程中主要用于动态分配变量和数据的内存区域,堆的管理对应程序员不是直接可见的。用户空间使用malloc 系统空间使用brk()是系统调用,实际是设置进程数据段的结束地址,将数据段的结束地址向高地址移动。原创 2023-07-09 17:50:13 · 316 阅读 · 0 评论 -
02_05链表调度使用RCU机制,防治优化建立内存屏障
RCU优势是读线程没有任何同步开销:不需要获取任何的锁,不需要执行原子指令,不需要执行内存屏障。2、CPU执行优化:提高流水线的性能,CPU的乱序执行可能会让后面的没有寄存器冲突和汇编指令先于。RCU记录所有指向共享数据的指针的使用者,当要修改该共享数据时,首先创建一个副本,所有读访问线程都离开读临界区之后,指针指向新的修改后副本的指针,并且。1、编译器优化:提高系统的性能,编译器在不影响逻辑的情况下会调整指令的顺序。将新的链表元素new添加到表头为head的链表头部, 而list_原创 2023-07-03 00:17:17 · 429 阅读 · 0 评论 -
02_04_02实时调度类_线程优先级代码实战
普通调度策略(SCHED_ NORMAL/SCHED_ BATCH/SCHED_ _IDLE) ,始终返回0,即普通任务调度的函数。SCHED OTHER它不支持优先级使用,而SCHED RR/SCHED FIFO支持优先级使用,它们分析为1-99, 数值越大优。备注:如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主。实时调度策略(SCHED_ FIFO/SCHED_ RR) 优先级最大值为99;SCHED_ OTHER分时调度策略;原创 2023-07-02 17:46:26 · 120 阅读 · 0 评论 -
02_04实时调度类及SMP多核处理器的实时操作系统体系结构
上一篇文章说的是普通进程的调度但同时还有实时进程在linux上面进行运行这边来看看实时进程在linux里面怎么调度 同时linux操作系统对实时任务的处理方式和设计思想。原创 2023-07-02 16:54:29 · 307 阅读 · 0 评论 -
01.4进程原理和系统调用--->经典的CFS调度器
操作系统作为硬件的使用层,提供使用硬件资源的能力,进程作为操作系统使用层,提供使用操作系统抽象出的资源层的能力。进程:是指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。sched_class结构体表示调度类,定义在kernel/sched/sched.h。原创 2023-06-24 15:09:44 · 364 阅读 · 0 评论