首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核 MMU的工作原理

用户空间和内核空间 通常操作系统把虚拟地址划分为用户空间和内核空间,例如 X86平台的Linux 系统虚拟地址空间是0x00000000 - 0xFFFFFFFF,前3GB(0x00000000 - 0xBFFFFFFF...用户程序加载到用户空间,在用户模式下执行,不能访问内核中的数据,也不能跳转到内核代码中执行。 这样可以保护内核,如果一个进程访问了非法地址,顶多这一个进程崩溃,而不会影响到内核和整个系统的稳定性。...事实上,整 个内核就是由各种中断和异常处理程序组成的。...段错误 段错误是这样产生的:用户程序要访问一个VA, 经MMU 检查无权访问,MMU 产生一个异常,CPU 从用户模式切换到特权模式,跳转到内核代码中执行异常服务程序。...内核把这个异常解释为段错误,把相发异常的进程终止掉。

1.8K20

深入理解Linux内核mmu-gather操作

1开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 本文讲解Linux内核虚拟内存管理中的mmu_gather...8,也就是local批次最大积聚8 * 4k = 32k的内存大小,这因为mmu_gather结构通常在内核栈中分配,不能占用太多的内核栈空间,而多批次由于动态分配批次积聚结构所以每个批次能积聚更多的页面...2.3 tlb_gather_mmu 这个函数主要是初始化从进程内核栈中传递过来的mmu_gather结构。.../释放各个批次积聚结构的物理页 } tlb_flush_mmu_tlbonly的实现: static inline void tlb_flush_mmu_tlbonly(struct mmu_gather..., end); //刷mm的tlb,释放所有积聚物理页,释放所有积聚结构相关物理页 4.总结 Linux内核mmu-gather用于积聚解除映射的相关物理页面,并保证了刷tlb和释放物理页面的顺序。

2K52
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

文章目录 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二、Linux 内核架构层次 三、Linux 系统调用接口 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU...: Linux 内核启动后 , 一直 驻留在内存 中 , 应用程序 不能 读写 内核空间数据 , 不能直接调用 内核源码 中的函数 ; 只能通过 " 系统调用 " 间接调用 内核函数 ; ③ 硬件..." ; 二、Linux 内核架构层次 ---- 整个操作系统 由 应用层 , Library Routine , 内核 , 硬件 组成 ; 层次架构如下 : Linux 内核 需要 " 管理硬件 "...如 : 系统调用 ; 三、Linux 系统调用接口 ---- " 系统调用 " 接口 , 可以调用 " " Linux 内核 " 中的如下功能 : ① 进程调度 : 内核 调用 CPU 处理器 实现...进程调度 ; ② 内存管理 : 内核 调用 物理内存 实现 内存管理 ; ③ IPC 跨进程通信 ④ VFS 虚拟文件系统 ⑤ 网络管理 : 内核 调用 网络接口 , 实现 网络管理 ; " 设备管理

9.5K40

实时Linux内核实现

目前Linux内核主线不支持软实时,而是使用下面2个仓库存放和Linux内核主线的版本对应的实时内核的源代码。...(3)如果使用内核线程执行中断处理函数,那么原来禁止硬中断的临界区不需要禁止硬中断,为了兼顾非实时内核和实时内核,引入本地锁,非实时内核把本地锁映射到禁止内核抢占和禁止硬中断,实时内核把本地锁映射到基于实时互斥锁实现的自旋锁...(3)在实时内核中大多数禁止内核抢占的临界区可以变成可抢占的,为了兼顾非实时内核和实时内核,引入本地锁,非实时内核把本地锁映射到禁止内核抢占和禁止硬中断,实时内核把本地锁映射到使用实时互斥锁实现的自旋锁...为了能够合并到内核主线(Linux是通用操作系统,需要满足不同场合的需求),软实时Linux内核采用非常灵活的策略,划分了5种内核抢占模型,如下。...14.参考文档 (1)A realtime preemption overview,https://lwn.net/Articles/146861/,(说明:Linux内核没有完全按照这篇文档实现) (

6K40

linux内核设计与实现

每个线程拥有独立的程序计数器,进程栈和一组进程寄存器 内核调度的对象是线程,而不是进程 linux的线程实现非常特别,并不特别区分线程和进程 进程提供两种虚拟机制:虚拟处理器和虚拟内存 同一个进程内的线程可以共享虚拟内存...线程在linux中的实现 4.1 liunx线程概述 一组线程共享进程内的内存地址空间,打开的文件和其他资源 线程机制支持并发程序设计技术,多处理器上保证真正的并行处理 linux实现线程的机制非常独特...,从内核角度看,没有线程的概念 linux把所有线程都当做进程来实现内核没有特别的调度算法或数据结构来表征线程,被视为一个使用某些共享资源的进程 每个线程有自己的task_struct,就像一个普通的进程...,这个进程和其他进程共享某些资源 与其他系统(windows,solaris)实现差异巨大,这些系统内核专门提供线程的支持 4.2 linux线程创建 线程的创建和普通进程创建类型,只不过调用clone...调度算法 3.1 概述 linux调度程序定义与kernel/sched.c 2.5版本内核重写调度算法,和以前版本区别很大,实现以下目标 充分实现O(1)调度,不管多少进程或什么输入,每个算法能在恒定时间内完成

2.8K52

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.2K32

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

Linux 内核动态追踪技术的实现

前言:之前的文章介绍了基于 tracepoint 静态追踪技术的实现,本文再介绍基于 kprobe 的动态追踪即使的实现。同样,动态追踪也是排查问题的利器。...kprobe 是内核提供的动态追踪技术机制,它允许动态安装内核模块的方式安装系统钩子,非常强大。下面先看一个内核中的例子。...#include #include #include #define MAX_SYMBOL_LEN...总结:内核通过劫持的方式实现了 kprobe,基于 kprobe 的动态追踪技术可谓是非常复杂而强大,我们可以利用这个机制,动态修改逻辑,收集信息。...不过实现过于复杂,涉及到对 CPU 架构和内存模型的了解,本文也是大致分析了一下流程,有兴趣的同学可以自行查看源码。

69522

linux 内核pollselectepoll实现剖析(经典)-下

epoll实现 epoll 的实现比poll/select 复杂一些,这是因为: 1. epoll_wait, epoll_ctl 的调用完全独立开来,内核需要锁机制对这些操作进行保护,并且需要持久的维护添加到...单个文件的状态改变可能唤醒过多监听在其上的epoll,产生唤醒风暴 epoll各个功能的实现要非常小心面对这些问题,使得复杂度大大增加。...因为ep_call_nested中已经对死循环和过深的递归做了检查,实际的ep_loop_check_proc的实现只是递归调用自己。...epoll的实现中考虑到了此问题,在每次添加新文件到epoll中时,就会首先检查是否会出现这样的唤醒风暴。...epoll_event epds; error = -EFAULT; if (ep_op_has_event(op) && // 复制用户空间数据到内核

1K20

Linux 内核静态追踪技术的实现

而这些方向往往都涉及到底层的东西,所以就自然需要去了解内核提供的一些技术,内核提供的能力,经过多年的发展,可谓是百花齐放,而且非常复杂。本文简单分享一下内核的静态追踪技术的实现。...下面来通过一个例子看一下 Tracepoint 的使用和实现(例子来自内核文档 tracepoints.rst)。分析之前先看一下两个非常重要的宏。第一个是 DECLARE_TRACE。...2 trace event 有了 Tracepoint 机制后,我们就可以写模块加载到内核实现自己的插桩点。但是内核也为我们内置提供了非常多的插桩点。具体是通过 trace event 来实现的。...我们可以看到插桩的这种机制是一种静态的机制,我们通常需要依赖当前版本的内核所支持的桩,从而获得对应的信息,但其实内核也提供了动态追踪的能力,可以实现热插拔获取信息的能力。...总的来说,Linux 下的追踪技术多种多样,虽然非常复杂,但是上层也提供了各种更方便的工具,这些能力是我们深入排查问题的利器。

1.7K20

linux 内核pollselectepoll实现剖析(经典)-下

epoll实现 epoll 的实现比poll/select 复杂一些,这是因为: 1. epoll_wait, epoll_ctl 的调用完全独立开来,内核需要锁机制对这些操作进行保护,并且需要持久的维护添加到...单个文件的状态改变可能唤醒过多监听在其上的epoll,产生唤醒风暴 epoll各个功能的实现要非常小心面对这些问题,使得复杂度大大增加。...epoll的核心数据结构 // epoll的核心实现对应于一个epoll描述符 struct eventpoll { spinlock_t lock; struct mutex...epoll的实现中,所有可能产生递归调用的函数都由函函数ep_call_nested进行包裹,递归调用过程中出现死循环或递归过深就会打破死循环和递归调用直接返回。...因为ep_call_nested中已经对死循环和过深的递归做了检查,实际的ep_loop_check_proc的实现只是递归调用自己。

87710

linux内核编程_linux内核是什么

net:网络相关代码,实现了各种常见的网络协议。 scripts:包含用于配置内核的脚本文件。 security:主要包含SELinux 模块。...usr:实现了用于打包和压缩的cpio等。 Linux内核的有哪些组成部分?...当CPU提供内存管理单元(MMU)时,Linux 内存管理完成为每个进程进行虚拟内存到物理内存的转换。 进程的地址空间时怎样划分的?...如何实现从用户空间到内核空间的控制转移? 只能通过系统调用和硬件中断完成 Linux内核的编译及加载 内核的配置系统由哪既部分组成?...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。

18.8K30

LINUX内核

一、Linux内核2.6特点: 1.新的调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核的组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如i386,arm,powerpc,mips等。...)mm:内存管理代码,而和平台相关的代码放在arch/*/mm目录下 13)net:网络相关代码,实现各种网络相关协议 14)scripts:配置内核中脚本文件 15)security:主要是SELinux...模块 16)sound:ALSA,OSS音频中设备的核心代码和常用设备驱动 17)usr:实现了用于打包和压缩的CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间的控制转移

13.9K30
领券