【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 人民邮电出版社出版 立即下载

相关推荐

CF鼠标宏防封指南:手把手教你调校罗技G HUB压枪脚本的延迟与随机数

本文详细解析了如何通过罗技G HUB的Lua脚本功能调校鼠标宏,实现拟真操作体验。重点介绍了随机数应用、动态后坐力补偿和智能操作序列等高级技术,帮助玩家在不违反游戏规则的前提下提升操作精度。

weixin_26841957的博客 334

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

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1335

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

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

weixin_42581177的博客 5930

密码学小白必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学初学者提供了系统获取和阅读三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文的实战指南。详细介绍了通过IACR官方渠道、ePrint预印本等权威资源免费下载论文的方法,并分享了高效筛选、精读核心章节及构建个人知识体系的具体策略,帮助读者快速切入密码学研究前沿。

weixin_28363123的博客 396

手把手教你用Sentinel-1和SNAP处理InSAR数据:从下载到生成沉降图(附Python脚本)

本文详细介绍了如何使用Sentinel-1数据和SNAP软件处理InSAR数据,从下载到生成地表沉降图的全流程。通过Python脚本实现自动化处理,适用于城市扩张和地质脆弱带的地表沉降监测,提供高性价比的毫米级形变监测方案。

weixin_26800111的博客 267

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

用户进程

zhangyang249的博客 2101

逆变器专题(9)-基于dq坐标系的逆变器解耦控制建模与实时仿真分析

本文深入探讨了基于dq坐标系的逆变器解耦控制建模与实时仿真分析。通过生动的比喻和详细的数学推导,阐述了如何通过坐标变换和前馈补偿实现d轴与q轴的独立控制,从而提升系统动态性能与稳定性。文章还介绍了在MATLAB/Simulink中搭建仿真模型、分析动态响应与稳定性的方法,并展望了硬件在环(HIL)实时仿真的高级验证手段,为新能源并网与电机驱动领域的工程师提供了宝贵的实践指南。

gold的博客 547

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

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

Edidaughter的博客 430

微信小程序 - 强力解决播放视频卡顿问题,小程序使用video组件播放视频或第三方视频插件,会出现卡顿或者无法播放的各种奇怪问题(微信小程序苹果ios/安卓播放视频很卡不流畅、视频太长或文件大等情况)

微信小程序视频组件播放卡顿,微信小程序video组件出现无法播放或卡顿,微信小程序video组件播放时会出现卡顿,微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,微信小程序安卓视频播放卡顿问题,微信小程序苹果ios手机播放视频不流畅很卡,加cdn还是卡,uniapp播放视频会有明显的卡顿问题,video视频时卡顿不流畅问题,为什么video组件播放视频卡顿?苹果微信小程序通过video组件播放视频时卡顿,怎么解决?微信小程序video组件出现无法播放或卡顿,设置custom-cac

🏆 前端领域优质创作者 1万+

数据库系统概论第五版课后习题答案第十二章

对元组的插入、删除、修改;语义检查的具体做法是,DBMS读取数据字典,检查是否存在与该语句中的表、视图或索引等要创建的对象相同的对象名,检查该用户是否具有创建数据库对象的权限。答:操作系统提供的封锁机制和DBMS的封锁机制在封锁对象、封锁对象的状态、封锁的粒度、及封锁的类型上存在很大的差别,操作系统的封锁机制不能直接应用在DBMS中,DBMS必须重新设计,来满足复杂的封锁需求。数据库的建立和维护包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组织和重构造以及性能监测分析等功能。

wenling54321的博客 693

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

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

Edidaughter的博客 840

宇树G1开发实践--PPT汇报(遥控版)

本文介绍了一种基于遥控器交互的机器人演示控制系统。系统通过DDS中间件接收遥控器信号,采用位掩码边沿检测技术实现按键精准响应,将不同按键映射为播放控制命令(暂停/重播、跳转、跳过等)。核心交互逻辑包含主播放循环、命令处理和暂停机制,支持播放过程中的实时控制。与自动顺序播放版相比,该系统显著提升了演示灵活性,适用于需要人机互动的演讲场景。使用前需确保网络连接和设备安全,并熟悉按键功能映射。该系统实现了专业级的人机协同演示体验。

m0_47999117的博客 680

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

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

techdashen的博客 239

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

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

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

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

Edidaughter的博客 553

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

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

【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、付费专栏及课程。

余额充值