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

Linux进程的内存管理之缺页异常

通过《Linux进程的内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程的vma,但还没有建立虚拟地址和物理地址的映射关系。...当进程访问这些还没建立映射关系的虚拟地址时,处理器会自动触发缺页异常。 ARM64把异常分为同步异常和异步异常,通常异步异常指的是中断(可看《上帝视角看中断》),同步异常指的是异常。...如果是写访问,用alloc_zeroed_user_highpage_movable分配新的物理页,并用0填充,然后映射到虚拟页上去 如果是先读后写访问,则会发生两次缺页异常:第一次是匿名页缺页异常的读的处理...(虚拟页到0页的映射),第二次是写时复制缺页异常处理。...由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存当作swap cache,用来缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。

2.4K31

linux内核缺页中断处理

5.如果选择的页框脏了,则将该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程让其他进程运行直到写入磁盘结束。且回写的页框必须标记为忙,以免其他原因被其他进程占用。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...pmd_present(*pmd_k)) return NULL; //如果缺页进程的pmd项为空,则将init进程的pmd项赋值给缺页进程的pmd项,i386下就是pte //项的复制 if...pmd_present(*pmd)) set_pmd(pmd, *pmd_k); //如果缺页进程的pmd项不为null,则init进程缺页进程的这一项必须不能相等 else BUG_ON

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

linux缺页异常处理--内核空间

缺页异常被触发通常有两种情况—— 程序设计的不当导致访问了非法的地址 访问的地址是合法的,但是该地址还未分配物理页框. 下面解释一下第二种情况,这是虚拟内存管理的一个特性。...尽管每个进程独立拥有3GB的可访问地址空间,但是这些资源都是内核开出的空头支票,也就是说进程手握着和自己相关的一个个虚拟内存区域(vma),但是这些虚拟内存区域并不会在创建的时候就和物理页框挂钩,由于程序的局部性原理...,程序在一定时间内所访问的内存往往是有限的,因此内核只会在进程确确实实需要访问物理内存时才会将相应的虚拟内存区域与物理内存进行关联(为相应的地址分配页表项,并将页表项映射到物理内存),也就是说这种缺页异常是正常的...,而第一种缺页异常是不正常的,内核要采取各种可行的手段将这种异常带来的破坏减到最小。...缺页异常的处理函数为do_page_fault(),该函数是和体系结构相关的一个函数,缺页异常的来源可分为两种,一种是内核空间(访问了线性地址空间的第4个GB),一种是用户空间(访问了线性地址空间的0~

1.9K20

linux缺页中断源码分析(基于linux0.11)

缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。 系统在初始化的时候注册了缺页中断的处理函数。中断号是14。...do_no_page // 缺页处理,进程的内容还没有加载到内存,访问的时候导致缺页异常 void do_no_page(unsigned long error_code,unsigned long address...= current, and that they * share the same executable. */ // 使得另一个进程的页目录和页表项指向另一个进程的正在使用的物理地址 static...(线性地址),取得p进程的页目录项地址,再加上address算出的偏移 from_page += ((p->start_code>>20) & 0xffc); // 取得当前进程的页目录项地址...最后重新执行触发缺页中断的地址。这时候可以找到对应的内容了。

1.8K10

Linux虚拟内存和缺页中断

Linux虚拟内存地址空间 为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏,采用了虚拟内存。 虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独自占有了当前系统的4G内存。...还有进程运行过程中,要动态分配内存,比如malloc时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。...操作系统中的缺页中断 malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。...当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。 缺页中断:在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。...缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤: 1、保护CPU现场 2、分析中断原因 3、转入缺页中断处理程序进行处理 4、恢复CPU现场,继续执行 但是缺页中断是由于所要访问的页面不存在于内存时

6K10

Linux内核虚拟内存管理之匿名映射缺页异常分析

作者简介 韩传华,就职于南京大鱼半导体有限公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。...前面讲到过写时复制缺页异常(COW),一般用于父子进程之间共享页,而我们会常见一种缺页异常是匿名映射缺页异常,今天我们就来讨论下这种缺页异常,让大家彻底理解它。...注:本文使用linux-5.0内核源代码。文章分为以下几节内容: 1.匿名映射缺页异常的触发情况 2.0页是什么?为什么使用0页?...,如:进程的堆、栈等。...一个是它的数据都是被0填充,读的时候数据都是0,二是节约内存,匿名页面第一次读的时候数据都是0都会映射到这页中从而节约内存(共享0页),那么如果有进程要去写这个这个页会怎样呢?

2.8K32

linux通过进程名杀死进程_linux关闭进程命令

笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程的id     # 2使用kill -9 强制终止进程...函数功能:根据进程名杀死程序     参数:进程名     返回值:无 !...————————————————————— # 根据进程名查询包含进程名的进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep

15.8K20

Linux进程学习【进程状态】

本文将会带着大家认识的各种 进程 状态 ---- 正文 在谈 进程状态 之前,首先要回顾下之前的 进程 相关知识 OS管理的本质是先描述,再组织 OS并非直接管理 进程 ,而是管理 进程 的 PCB(...,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样的 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习的正是 Linux 中的 进程 状态 进程是何种状态,取决于此进程的PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往的认知来说...父进程,此时 子进程 会被OS领养 子进程 的 父进程 变为 1号进程进程 就变成了一个 孤儿进程 发出指令终止 父进程 假设 子进程 不被 1号进程 领养 子进程 退出时就会无人回收...,成为一只游离的僵尸 僵尸进程 有 内存泄漏 的风险 因此 子进程 会被OS领养 ---- 总结 以上就是关于进程学习【进程状态】的全部内容了,我们简单学习了 进程 的相关状态,知道了何为 阻塞、进程

18230

Linux进程学习【进程地址】

因为每个进程都有属于自己的空间,OS 在管理进程时,能够以统一的视角进行管理,效率很高 光有 虚拟地址空间 是不够的,还需要一套完整的 ‘‘翻译’’ 机制进行程序寻址,如 Linux 中的 页表 +...️写时拷贝 Linux 中存在一个很有意思的机制:写时拷贝 这是一种 赌bo 行为,OS 此时就赌你不会对数据进行修改,这样就可以 使多个 进程 在访问同一个数据时,指向同一块空间,当发生改写行为时...),当程序实际使用到这块空间时,OS 才会去申请内存给程序使用 OS是一个讲究人,不允许任何空间浪费或低效率行为 假设没有 缺页中断 机制,给程序分配空间后,程序又不用,此时空间属于闲置状态,这是不被...OS 认可的低效浪费行为 图片来源:3.2.2 OS之请求分页管理方式(请求页表、缺页中断机构、地址变换机构) ---- 虚拟地址空间存在的意义 总结一下,虚拟内存+页表+MMU 这种管理方式的好处...Linux进程学习【进程地址】的全部内容了,我们从一个有趣的小问题切入,见识到了 虚拟地址空间 与 物理地址空间 的奇妙关系,在种种机制的加持之下,OS 对进程的管理变得更加得心应手,系统也因此得以高效运行

14120

Linux进程调度_linux进程的查看和调度

对于处理器消耗型的进程,调度策略往往是降低他们的执行频率,延长运行时间。 Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...一、普通进程Linux 中普通进程依赖称之为 nice 值 的东东来进行进程的优先级描述。nice 值的范围是 [-20, 19]。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...也可以用 pidstat -w 命令查看进程切换的每秒统计值: pidstat -w 1 Linux 3.10.0-229.14.1.el7.x86_64 (bj71s060) 02/01/2018

20.5K10

Linux】静态进程和动态进程

引言 在Linux环境中,进程的加载方式涉及到静态进程和动态进程两个概念。这两种方式都有各自的优势和劣势,而正确选择加载方式对于应用程序的性能和管理至关重要。...本文将深入探讨静态进程和动态进程的特点、优劣势,并为你提供在不同场景下的选择建议。 1....静态进程适用于不经常更新和部署的应用,以及对独立性和部署简便性要求较高的环境。 2. 动态进程 动态进程是一种加载方式,它在程序运行时依赖外部的共享库(动态链接库)。...相对于静态进程,动态进程的可执行文件较小,因为它只包含程序自身的代码,而共享库的加载则在程序启动时由动态链接器完成。...无论选择静态进程还是动态进程,了解它们的特点以及在不同情况下的适用性,可以帮助开发者更好地优化程序的性能和管理。 结论 静态进程和动态进程各有优劣,选择合适的加载方式取决于项目的具体需求。

10810

Linux进程基础

这个进程是执行/bin/init这一文件(程序)生成的。当Linux启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。...如何创建一个进程 实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程Linux内核并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。...当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。...进程与线程(thread) 尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间可以共享内存空间和IO接口。...所以,进程Linux程序的唯一的实现方式。 总结 程序,进程,PID,内存空间 子进程,父进程,PPID,fork, wait 觉得本文对你有帮助?请分享给更多人。

5K40

Linux进程编程

Linux进程编程 3.1 fork系统调用 3.1.1 fork工作原理 3.1.2 fork函数 3.1.3 fork编程示例 3.1.4 小结 3.2 exec系统调用 3.2.1 exec函数族作用...执行过程如下: Linux内核在进程表中为子进程分配一个表项,然后分配PID。...子进程表项的内容来自父进程,fork会将父进程的表项复制为副本,并分配给子进程Linux内核使父进程的文件表和索引表的节点自增1,创建用户及上下文; 将父进程上下文复制到子进程上下文空间中; fork...这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。...我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统和用户做出任何贡献了,他就可以发挥最后一点余热,调用任何一个exec,让自己以新的面貌重生;或者,更普遍的情况是,如果一个进程想执行另一个程序

7.8K20

Linux 进程总结

进程创建的进程(通常称为子进程),它们和父进程存在隶属关系。子进程又可以创建进程,这样形成一个进程家族。子进程可以继承其父进程几乎所有的资源。 ?...孤儿进程 孤儿字面意思就是没有父母的孩子,那孤儿进程的意思就是没有父进程进程。这种情况是怎么发生的呢?就是父进程先于子进程结束,这时子进程被init进程收养,init的进程号为1。...僵尸进程 当一个子进程终止时,如果它的父进程还在运行,内核会为这个终止的子进程保留一定量的信息。父进程可以根据这些信息知道子进程的情况。直到父进程对其进行了善后处理,子进程才会完全终止。...进程组 每个进程都属于某个进程组。进程组是一个或多个进程的集合。通常它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。...每个进程组都有一个组长进程进程ID等于进程组ID的进程就是组长进程。 ? 会话 会话(session)是一个或多个进程组的集合。

5.5K20

Linux进程状态

二.通过系统调用获取标识符 linux中可以通过 系统调用接口:getpid 获取该进程的PID,getppid可以获取父进程的PID  例: #include #include...} 三.fork函数的认识与理解 fork认识  linux输入 man fork 可以看到以上信息:       1.fork包含在头文件 中;       2.返回值是 pid_t...一般情况下,子进程和父进程也是共享数据的,但是一直共享数据也不现实,因为当我们要修改数据时,会把两个进程的数据都改了,这并不是我们想要的,但是重新开一块空间拷贝父进程的数据又有点浪费,所以linux就使用了一种叫写时拷贝的技术...挂起:         当内存严重不足时,系统会把一些进程的代码和数据换出到外设中(通常是磁盘),只留              PCB在内存中,需要的时候再把代码和数据换入到内存中,处于此状态的进程称为挂起状...linux进程的状态 linux中的进程状态分为这几种 static const char * const task_state_array[] = { "R (running)", /* 0

16710

linux进程管理

一.基本介绍 1.在 LINUX 中,每个执行的程序(代码)都称为一个进程。...每一个进程都分配一个 ID 号 2.每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程 3.每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。...查看进程树 pstree [选项] -p 查看进程pid -u 查看进程所属用户 三.结束进程 kill 进程号 #停止进程 kill-9 进程号 #强迫进程立即停止 killall...进程名称 #停止所有相同的进程名称 四.ps指令详解 BSD风格 详解 user 用户名称 pid 进程号 %cpu 进程占用cpu百分比 %%mem 进程占用物理内存的百分比 vsz...stat 进程状态 S:睡眠 s:会话的先导进程 N:进程拥有比普通优先级更低的优先级 R:正在运行 D:短期等待 Z:僵尸进程 T:被跟踪或者被停止 start 进程启动时间 time

8K10
领券