【linux内核分析与应用-陈莉君】进程用户空间管理机制

用户态进程/线程的创建 fork/vfork/pthread_create forkfork 函数创建子进程成功后,父进程返回子进程的 pid,子进程返回0。具体描述如下:fork返回值为-1, 代表创建子进程失败fork返回值为0,代表子进程创建成功,这个分支是... 阅读详情

目录

 

1.创建进程用户空间

2.写时复制技术

3.虚存映射

4.VMA的新建方法

5.进程中的虚拟映射示例

6.进程的虚拟区举例

7.与用户空间相关的主要系统调用

8.编写虚存区内核模块

9.请页机制--实现虚存管理的重要手段

10.缺页异常处理

11.用户进程访问内存分析引入

12.参考资料与思考


1.创建进程用户空间

 

用户空间如何被创建?
实际上是通过拷贝或者共享父进程的用户空间来实现的.
也就是说内核调用copy_mm函数来实现的.
这样就为新进程建立了所有的页表和mm_struct结构.
通常来说每个进程都有自己的用户空间,但是如果调用的clone函数
创建的内核线程它是共享父进程的用户空间.
如果是创建子进程,则会采用写时复制技术来快速创建进程.

2.写时复制技术

3.虚存映射

4.VMA的新建方法

内核通过怎样的方式新建一个一个虚存区呢?
在用户空间我们可以用mmap()的方法获取do_mmap()的功能.
在内核空间我们可以直接调用do_mmp()创建一个新的虚存区.

共享虚存区:
如果一个进程对一个共享虚存区进行写的话其他进程可以感觉到它的写,而且还会修改
磁盘上对应的文件,文件的共享就可以采用这种方式.

私有虚存区:
进程创建这种映射只是为了读文件而不是为了写文件,因此对虚存区的写操作就不会修改
磁盘上对应的文件,由此可以看出私有映射的效率是要比共享映射的效率高的.

匿名映射:
映射与文件无关.

5.进程中的虚拟映射示例

6.进程的虚拟区举例

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char **argv)
{
   int i;
   unsigned char *buff;
   buff = (char*)malloc(sizeof(char)*1024);
   printf("My pid is :%d\n",getpid());
   for(i = 0;i<60;i++)
   {   
      sleep(60);
   }   
   return 0;
}

 

7.与用户空间相关的主要系统调用

8.编写虚存区内核模块

9.请页机制--实现虚存管理的重要手段

当一个进程运行的时候,CPU访问的是用户空间的虚地址,linux仅仅把当前需要使用的
少量页面装入到内存中,需要的时候通过请页机制将特定的页面调入到内存,当访问的
页不在内存中的时候,就会产生也故障并且报告故障的原因.

10.缺页异常处理

linux缺页有两种情况,
首先要看这个缺页是由编程引起的还是由缺页引起的.
如果是由编程引起的异常而且发生在内核态,此时要毫不含糊地杀死该进程.
如果是发生在用户态,说明是一个无效的内存引用,程序需要停止执行.

如果是真正缺页引起的异常且是有合法的权限,此时才进入到缺页异常处理
程序.本节第二张图中只有圈出的两个分支是真正的请求分页的处理,
在看这张图的时候首先查看正常的处理分支,然后再查看异常的处理分支,
在对整体流程了解了以后想要真正理解异常处理程序还是需要看代码,
代码名do_page_fault().

11.用户进程访问内存分析引入

用户态进程独占虚拟地址空间,两个进程的虚拟地址空间可能完全是相同的,
在访问用户态虚拟地址空间的时候如果没有映射到物理地址空间,此时就要
通过请页机制发出缺页异常的请求,缺页异常陷入内核态,分配物理地址空间,
与用户态虚拟地址空间就建立起映射关系,到底如何分配物理内存,见下一讲分析.

12.参考资料与思考

 

 

深入分析Linux内核源码 陈莉君.pdf 深入分析Linux内核源码 陈莉君.pdf 人民邮电出版社出版 立即下载

相关推荐

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3207

Linux mem 1.1 用户态进程空间的创建 --- execve() 详解

文章目录1. 原理介绍1.1 固定地址映射1.2 随机地址映射(ASLR)1.3 文件映射1.4 stack2. 代码详解2.1 execve()2.1.1 bprm_mm_init()2.1.2 copy_strings()2.1.3 security_bprm_check()2.2 load_elf_binary()2.2.1 flush_old_exec()2.2.2 setup_new_exec()2.2.3 setup_arg_pages()2.2.4 elf_map()2.2.5 load_el

pwl999的博客 2807

Unity3d实现红外热成像效果

1.将需要在红外图像中高亮的物体设置到图层PostProcessing。 2.新建一个相机CameraHighLight,设置其Culling Mask为PostProcessing,也就是在这个相机中只有PostProcessing图层的物体可见。 3.新建一个RenderTexture,命名为HightLightRt,将CameraHighLight的Target Texture设HightLightRt。 4.新建一个相机Camera2,这个相机用于显示其他物体。 接下来将CameraHigh

zouxin_88的专栏 8327

进程的概念以及进程的创建

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。子进程所独有的只有它的进程号,计时器等。此外,在可剥夺的操作系统中,当有更高优先级的进程就 、 绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。: 任何进程( 除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。

weixin_42581177的博客 5930

NIDS——suricata(一)

NIDS——suricata环境安装和规则编写

weixin_58666006的博客 1273

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析

本文详细解析了使用Gromacs进行蛋白质-小分子对接和分子动力学模拟的全流程,包括文件准备、拓扑生成、复合物构建、溶剂化处理、能量最小化及平衡模拟等关键步骤。通过实战案例,帮助研究者验证药物分子与靶标蛋白的结合稳定性,提升分子动力学模拟的效率和准确性。

weixin_29216353的博客 380

八、用户进程:TSS、用户进程的创建、用户进程的执行(通过调度函数)

用户进程

zhangyang249的博客 2101

最适合入门的100个深度学习项目

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 12万+

【linux内核分析与应用-陈莉君】进程的一生

1.进程与线程 2.TASK_STRUCT结构的统一性与多样性 3.进程API的实现

Edidaughter的博客 430

电磁阀颤振工作原理

颤振 颤振,弹性结构在均匀气(或液)流中受到空气(或液体)动力、弹性力和惯性力(见达朗伯原理)的耦合作用而发生的大幅度振动,它是气动弹性力学中最重要的问题之一。 随着机电液一体化技术的发展,电液比例控制技术的应用越来越广泛。电液比例控制系统范围较广,在液压传动与控制过程中,系统能够接受模拟信号或数字信号,使输出的流量或压力连续成比例地变化,都属于此类。该控制系统的优点是充分利用了液压控制与电气控制的长处,即功率传递靠液压,信号处理靠电气的优化措施。 电液比例控制原理与要求 液压控制系统中两个最重要的被控参数

小幽余生不加糖 1万+

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1648

【Linux内核分析与应用-陈莉君老师】课程相关索引

1.【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址 2.【Linux内核分析与应用-陈莉君老师】从程序到进程 3.【linux内核分析与应用-陈莉君老师】进程的一生 4.【Linux内核分析与应用-陈莉君老师】进程的调度 ...

Edidaughter的博客 840

AI大模型探索之路-应用篇11:AI大模型应用智能评估(Ragas)

随着人工智能技术的飞速发展,AI大模型(LLM)已经成为了推动技术创新和应用的关键因素。这些大模型在语言理解、图像识别、自然语言生成等领域展现出了惊人的能力。然而,随着模型规模的增大,它们对计算资源的消耗、环境适应性、模型稳定性、安全性和可解释性等方面也提出了新的挑战。因此,对AI大模型进行智能评估变得至关重要,以确保它们在实际应用中的稳定性、可靠性和有效性。本文将详细介绍Ragas框架,一个专为AI大模型设计的智能评估工具。

寻道AI,探索AI无限可能! 5543

Linux内核分析与应用4-内存管理

当用户程序通过系统调用,申请内存时,首先陷入内核,建立虚拟地址空间的映射,获得一块虚拟内存区VMA. 当进程对这块虚存区进行访问时,如果物理内存尚未分配,此时发生一个缺页异常,通过getfreepage申请一个或者多个物理页面,并将此物理内存和虚拟内存的映射关系写入页表.当一个进程运行的时候,CPU访问的是用户空间的虚地址, Linux仅把当前要使用的少量页面装入到内存, 需要时通过。将特定的页面调入到内存;如果是一个真正的缺页引起的异常,而且有合法的权限,这时会进入到缺页异常处理程序。

techdashen的博客 239

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

linux应用软件epub,Linux操作系统原理与应用(第2版)

Linux操作系统原理与应用(第2版) 下载 mobi epub pdf☆☆☆☆☆陈莉君,康华 著下载链接在页面底部发表于2021-05-03类似图书 点击查看全场最低价图书介绍出版社: 清华大学出版社ISBN:9787302278368版次:2商品编码:11894570包装:平装丛书名: 21世纪高等学校规划教材 ,开本:16开出版时间:2012-01-01用纸:胶版纸页数:255字数:4310...

weixin_33872754的博客 536

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【linux内核分析与应用-陈莉君】内核同步概述

1.内核同步机制的引入 如果把内核看做不断地对各种请求进行响应的服务器的话,那么正在CPU上执行的进程发出中断请求 的外部设备等相当于客户,正如服务器一直要响应客户的请求一样,内核 ...

Edidaughter的博客 553

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【linux内核分析与应用-陈莉君】Linux内存管理机制

1.内存层次

Edidaughter的博客 885

【linux内核分析与应用-陈莉君】设备驱动概述

1.为什么要引入设备驱动程序 计算机中三个最基础的物质基础是: CPU 内存 输入输出设备. 与I/O设备相比,文件系统是一种逻辑意义上的存在,它只不过使得对设备的操作更方便,更有组织,更接近人类的 思维方式,可以说文件操作是对设备操作地组织与抽象,而设备操作时对文件操作的最终实现. 如何让机器般冰冷的硬件设备拥有灵性,从而使得控制设备像操作文件一样方便有效,这个是本章需要讨论的设备驱动问题. 2.设备驱动程序的作用 ...

Edidaughter的博客 518

【linux内核分析与应用-陈莉君】动手实践--内核多任务并发实例

1.内核多任务并发示意图 本节我们会用一个实例来看看在linux中是如何使用这些

Edidaughter的博客 847

【linux内核分析与应用-陈莉君】动手实践-编写一个文件系统

1.一些数据结构 file_system_type--文件系统类型的结构体 super_block --每个注册的文件系统都会有对应的超级块,用于存储特定文件系统的习性 inode --存放具体文件的信息 dentry --目录项,方便查找文件 vfsmount --用于挂载,这个是老版本的,新版本的将vfsmount放在了mount结构体中 编写文件系统的过程实际上就是填充这些数据结构并添加进系统的过程. ...

Edidaughter的博客 1432

陈莉君 linux内核演讲_梁金荣:Linux内核之话说进程

大家好,小白又来试水啦!回望笔者之前发的技术博客,中规中矩,阅读量更是不尽人意,看来没帮到多少人,不行,文风要改,要大改。于是乎,笔者金荣摇身一变,化作Linux OS的一个进程,我是一个进程,我来讲述我的故事。我从哪里来进程:“若要问我从哪里来,这还要从操作系统的发展说起。”(进程的回忆开始了)那是在20世纪50年代中期,出现了第一代计算机,那时候还需要程序员亲自手工操作穿孔的纸带卡片...

weixin_29022299的博客 315

【Linux内核分析与应用-陈莉君】进程的调度

1.基本调度模型 进程的调度实际上就是从就绪队列中选择一个进程投入CPU运行,从图中可以看出: 调度的主战场就是就绪队列, 核心就是调度算法, 实质性的动作是进程的切换, 对于以

Edidaughter的博客 530

用户态--fork函数创建进程

总结来说,进程的创建过程大致是父进程通过fork系统调用进入内核_do_fork函数,如下图所示复制进程描述符及相关进程资源(采用写时复制技术)、分配子进程的内核堆栈并对内核堆栈和thread等进程关键上下文进行初始化,最后将子进程放入就绪队列,fork系统调用返回;而子进程则在被调度执行时根据设置的内核堆栈和thread等进程关键上下文开始执行。

青衫客36的博客 1326

【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址

1.地址转换 进程中不直接对物理地址直接操作,CPU在运行时指定的地址需要经过内存管理单元MMU 转换后才能访问到真正的物理内存,地址转换的过程分为两块:分段和分页. 分段机制简单地来说就是讲进程的代码,数据,栈分在不同的虚拟地址段上,从而避免 进程间的互相影响,分段之前的地址我们称之为逻辑地址,由两部分组成:高位的段选择 符和低位的段内偏移,在分段时,我们先用段选择符在响应的段描述符表中找到段描述符-- 也就是某个段的基地址,再加上段内偏移量就得到对应的线性地址,线性地址也称之为 虚拟地址,在实际应用

Edidaughter的博客 922

【linux内核分析与应用-陈莉君】设备驱动模型

1.设备驱动模型的引入 为什么要引入设备驱动模型? 由于linux支持世界上所有的不同功能的硬件设备,导致linux中有一般的代码是设备驱动而且随着硬件的快速 升级换代,设备驱动的代码量也快速增长,为了设备多样性带来的linux驱动开发的复杂度以及设备热插拔处理 电源管理等,linux内核提出了设备模型,也成为了driver module的概念. 2.sys文件系统 ...

Edidaughter的博客 612

linux环境如何给每个新的用户进行分区

7. 最后,更新`/etc/fstab`文件以使新分区在系统启动时自动挂载。2. 使用`fdisk`命令对磁盘进行分区。1. 首先,确保你已经安装了`fdisk`工具。- 输入分区结束扇区(例如,输入`+1G`表示从起始扇区开始,直到可用空间用完)。3. 在`fdisk`命令行界面中,按照提示进行操作。- 输入分区号(例如,输入`1`表示第一个分区)。- 选择分区类型(例如,输入`p`表示主分区)。- 输入分区起始扇区(例如,输入`2048`)。- 输入`w`保存更改并退出。- 输入`n`创建新分区。

weixin_42242420的博客 697
上一篇: 【linux内核分析与应用-陈莉君】Linux内存管理机制
下一篇: 【linux内核分析与应用-陈莉君】物理内存分配与回收机制上
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值