/* * linux/mm/memory.c * * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds */ /* * demand-loading...* Idea by Alex Bligh (alex@cconcepts.co.uk) */ #include #include #include #include #include #include ...#include #include #include #include ...#include #include #include #include unsigned
文章目录 一、系统初始化 二、内存管理 三、虚拟文件系统 四、网络管理 一、系统初始化 ---- 系统初始化 的入口源码是 " linux-5.6.18\init\ " 目录下的 main.c 源文件...; 二、内存管理 ---- 内存管理 的源码在 " linux-5.6.18\mm\ " 目录下 ; 内存管理模块源码中 , 核心类是 " linux-5.6.18\mm\memory.c " 文件...; 三、虚拟文件系统 ---- 虚拟文件系统 的源码在 " linux-5.6.18\fs\ " 目录下 ; 四、网络管理 ---- 网络管理 的源码在 " linux-5.6.18\net\ "...目录下 ; 其中的 " linux-5.6.18\net\socket.c " 是网络套接字相关的源码 ;
报道称,Linux内核中出现了一个新的安全漏洞,可能允许用户在目标主机上获得更高的权限。...该漏洞被称为StackRot(CVE-2023-3269,CVSS评分:7.8),影响Linux 6.1至6.4版本。迄今为止,没有证据表明该漏洞已经在野外被利用。...北京大学安全研究员李瑞晗说:"由于StackRot是一个在内存管理子系统中发现的Linux内核漏洞,它几乎影响到所有的内核配置,且仅需要最少的功能来触发"。...Torvalds指出:我想将所有堆栈扩展代码移动到自己的全新文件中,而不是将其拆分为 mm/mmap.c 和 mm/memory.c,我试图保持补丁最小化,但由于无论如何都必须回传到最初的maple treeVMA...https://thehackernews.com/2023/07/researchers-uncover-new-linux-kernel.html
// mm/memory.c vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address,...return ret; } EXPORT_SYMBOL_GPL(handle_mm_fault); 该方法又调用了__handle_mm_fault方法: // mm/memory.c static vm_fault_t...,先找到pmd,有关什么是page walk,请看下面这篇文章: https://lwn.net/Articles/717293/ 再之后,又调用了handle_pte_fault方法: // mm/memory.c...// mm/memory.c static vm_fault_t do_anonymous_page(struct vm_fault *vmf) { struct vm_area_struct
# 前言 开发过单片机的小伙伴可以看一下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。...memory.c /** * * 驱动初始化 */ /* Necessary includes for device drivers */ #include // #include #include #include /* printk()...*/ #include /* kmalloc() */ #include /* everything... */ #include <linux...of memory.c functions */ int memory_open(struct inode *inode, struct file *filp); int memory_release(
Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性。它主要由内存节点node、内存区域zone和物理页框page三级架构组成。...Linux内核中使用数据结构pg_data_t来表示内存节点node。如常用的ARM架构为UMA架构。...又如,由于Linux内核采用 • 物理页框page 2....Linux虚拟内存三级页表 Linux虚拟内存三级管理由以下三级组成: • PGD: Page Global Directory (页目录) • PMD: Page Middle...项和虚拟地址,获取相关的pte项(即物理页的起始地址) 其示意图如下图所示: 2.4 根据虚拟地址获取物理页的示例代码 根据虚拟地址获取物理页的示例代码详见<mm/memory.c
前言: Memory Balloon作为虚拟化平台上的一个重要内存QoS方案,作者在前文《[linux][memory]balloon技术分析 》中做过原理性的简要分析。...分析: 1,pfn array 代码选自linux-4.4.69/drivers/virtio/virtio_balloon.c ?...2,tell host 代码选自linux-4.4.69/drivers/virtio/virtio_balloon.c ?...4,madv dontneed 上一步的madvise,进入到内核态执行linux-4.4.69/mm/madvise.c执行madvise_dontneed: ?...逻辑判断之后继续执行linux-4.4.69/mm/memory.c中的: ?
//file:mm/memory.c int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long...为了好区分,Linux 还给每一级页表都起了一个名字。...二级页表:Page Upper Dir,简称 pud 三级页表:Page Mid Dir,简称 pmd 四级页表:Page Table,简称 pte 看一下下面这个图就比较好理解了 //file:mm/memory.c...//file:mm/memory.c static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned...其实在 Linux 栈地址空间增长是分两种方向的,一种是从高地址往低地址增长,一种是反过来。大部分情况都是由高往低增长的。本文只以向下增长为例。
posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio, and more), I/O priorities (for newer Linux...It supports Linux, FreeBSD, NetBSD, OpenBSD, OS X, OpenSolaris, AIX, HP-UX, Android, and Windows....tickmarks.h cgroup.c examples flist.h ghelpers.c ioengines.c memory.c
1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope Linux内核由于存在page...在Linux内核中,因为跟踪脏页会涉及到文件回写、缺页异常、反向映射等技术,所以本文也重点讲解在Linux内核中如何跟踪脏页。...//mm/memory.c handle_pte_fault ->do_fault ->do_shared_fault ->__do_fault...调用链如下: //mm/memory.c handle_pte_fault ->if (vmf->flags & FAULT_FLAG_WRITE) { //vma可写 if
开源协议: BSD协议 Github地址: https://github.com/DNSPod/dnspod-sr dnspod-sr作为一个运行在Linux平台上的高性能递归DNS服务器软件,具备高性能...测试环境: 千兆网卡、4核CPU、4G内存、Linux 64位系统 测试结果: · dnspod-sr:15万QPS; · BIND9.9:7万QPS; · Unbound4.7:8万QPS。...详见 memory.c 中的相关接口。 7.
在linux内核中,所有的物理内存都用struct page结构来描述,这些对象以数组形式存放,而这个数组的地址就是mem_map。...mem_map的定义 /* \linux\mm\memory.c */ #ifndef CONFIG_NEED_MULTIPLE_NODES /* use the per-pgdat data instead...*/ alloc_node_mem_map源码分析 /* \linux\mm\page_alloc.c */ static void __ref alloc_node_mem_map(struct pglist_data
// 进程退出后 , 进程相关内存信息也会同时销毁 while (1); return 0; } 函数打印结果 : han@ubuntu:~/vscode/memory$ gcc memory.c.../libc-2.23.so 7f3534c5f000-7f3534e5f000 ---p 001c0000 08:01 1723650 /lib/x86_64-linux-gnu.../libc-2.23.so 7f3534e5f000-7f3534e63000 r--p 001c0000 08:01 1723650 /lib/x86_64-linux-gnu.../libc-2.23.so 7f3534e63000-7f3534e65000 rw-p 001c4000 08:01 1723650 /lib/x86_64-linux-gnu.../ld-2.23.so 7f353508f000-7f3535090000 rw-p 00026000 08:01 1723642 /lib/x86_64-linux-gnu
Zabbix 的监控采集类型很丰富,我最常用的是Agent方式,因此,就挑选Linux的内存监控(Zabbix内置key:vm.memory.size)为例来梳理一下监控项数据采集流程。...五、监控项vm.memory.size 采值实现 vm.memory.size监控项在不同的操作系统下实现各不相同,Linux系统下的实现,在src/libs/zbxsysinfo/linux/linux.c...VM_MEMORY_SIZE函数(位置在:src/libs/zbxsysinfo/linux/memory.c) 用来接受参数,并对应调用对应的取值函数进行数据采集,并返回数据。...具体实现如下: 从源码中可以看到,Linux系统支持的模式包括如下参数,与官方文档中所列的参数不同。...(1)调用sysinfo函数 Linux中sysinfo()函数是用来获取系统相关统计信息的函数。它会将结果存储在struct sysinfo结构体中。
Linux中有后备文件支持的页称为文件页,如属于进程的代码段、数据段的页,内存回收的时候这些页面只需要做脏页的同步即可(干净的页面可以直接丢弃掉)。...2.内核原理 下面我们从Linux内核的层面来解析发生以上神奇现象的原理。...缺页异常调用链如下: "mm/memory.c" 处理器架构相关异常处理代码 -> handle_mm_fault -> __handle_mm_fault -> handle_pte_fault...下面给出调用链: "mm/memory.c" handle_pte_fault ->if (vmf->flags & FAULT_FLAG_WRITE) { -----------1
/init.h> #include #include #include /* printk() */...#include /* kmalloc() */ #include /* everything... */ #include /* error codes */ #include /* size_t */ #include #include /* copy_from/to_user */ MODULE_LICENSE("Dual BSD/GPL"); /* Declaration of memory.c...complete “memory” driver By joining all of the previously shown code, the complete driver is achieved: <memory.c
中断描述符表内可以存放256个描述符,分别对应256个中断 ---- 处理中断page fault page_falut中断程序执行肯定要进入内核,首先就是把用户栈相关寄存器状态压栈,也被称为保护现场 //在linux...若共享操作不成功,那么只能从相应文件中读入所缺的数据页面到指定线性地址处 //在linux/mm/memory.c中 //错误码和对应产生错误的虚拟地址 void do_no_page(unsigned...; } ---- put_page put_page用来完成物理页面与一个线性地址页面的挂接,从而将一个线性地址空间内的页面落实到物理地址空间内, page为物理地址,address为线性地址 //在linux.../mm/memory.c中 unsigned long put_page(unsigned long page, //物理地址 unsigned long address){ unsigned long...---- 参考 Linux内存管理之copy_page_tables源码理解
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux
Linux文件操作 Linux中,一切皆文件(网络设备除外)。 硬件设备也“是”文件,通过文件来使用设备。 目录(文件夹)也是一种文件。...boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件。...deb:deb是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。...系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。...---- Linux文件的操作方式 文件描述符fd fd是一个大于等于0的整数。 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件。
---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。
领取专属 10元无门槛券
手把手带您无忧上云