进程地址空间(Linux虚拟内存机制)

在这里插入图片描述

文章目录

  • 一.Linux进程地址空间的结构
  • 二.Linux管理进程地址空间的方式
  • 三.Linux进程使用物理内存的模型
  • 四.进程地址空间的存在意义

本章理论基于32位平台的Linuxkernel 2.6.32版本内核

一.Linux进程地址空间的结构

  • 为了保证内存安全,现代操作系统不允许应用程序(进程)直接访问物理内存空间

  • 一般来说,操作系统和编译器会给每一个进程设置一个独立的虚拟内存空间一张映射页表,虚拟内存空间称为进程地址空间,虚拟内存地址通过特定的映射关系与物理内存地址建立联系

  • Linux的进程地址空间从0x00000000 ~ 0xffffffff进行编号,结构如下:在这里插入图片描述

  • 进程中的指令想要访问物理内存,就必须借助虚拟内存地址进行映射,进程的虚拟地址与物理内存通过页表进行映射:在这里插入图片描述

  • 在应用层视角中,应用程序代码中的变量和函数(数据)的内存地址以及指令本身的内存地址全部都是虚拟内存地址!!!所有的这些虚拟内存地址以及它们与物理内存地址的映射关系在应用程序编译时就已经确定了,因此进程的虚拟内存机制本质上是操作系统和编译器协同形成的一种内存管理机制

    • CPU内部在执行指令的时候,其使用的内存地址也是虚拟内存地址

二.Linux管理进程地址空间的方式

  • 每一个进程都有自己独立的进程地址空间映射页表
  • Linux内核中,进程地址空间由一个struct mm_struct来维护,每个进程的PCB结构体(进程控制块)都会指向一个struct mm_struct结构体:在这里插入图片描述
  • struct mm_struct结构体维护进程地址空间的具体方式类似于用指针来维护地址区间:在这里插入图片描述
  • 当内存中加载了多个进程时,操作系统中就会存在多个struct mm_struct结构体和映射页表,因此Linux进程地址空间的本质是操作系统中的struct mm_struct结构体和映射页表构成的内核数据结构

三.Linux进程使用物理内存的模型

  • Linux进程的PCB(task_struct)和进程地址空间(mm_struct)的存在形式:
    在这里插入图片描述
  • 进程指令集访问物理内存的方式:
    在这里插入图片描述

四.进程地址空间的存在意义

  1. 借助映射页表操作系统可以拒绝应用进程的非法访问内存的请求,保证了计算机系统的内存安全
  2. 在操作系统的设计意义上,虚拟内存机制使得操作系统的内存管理模块进程管理模块完成了解耦合,当内存管理算法需要调整时,不会影响到进程管理模块的设计(只需修改映射页表中的物理地址即可),同样,当进程管理模块需要重新设计时,不会影响到内存管理模块
  3. 虚拟内存机制其实是一种物理内存的延迟分配策略,当进程PBC指令集被加载到内存中后,操作系统不会立即为该进程中的对象分配物理内存(即使进程中每个对象都有一个虚拟地址),只有当进程对某个对象进行读写操作时,操作系统才会通过页表映射为对象分配物理内存,这种内存的延迟分配策略提高了各进程并发执行过程中计算机内存的使用效率
  4. 由于进程虚拟地址空间的存在,在应用程序的视角中,各对象的内存地址都是有序地,紧凑地排布的,使得开发人员可以更方便地进行内存操作,同时操作系统也可以更方便地对进程使用内存的情况进行监视和管理,实现物理内存的即时分配和释放.
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(二十八)大数据实战——Flume数据采集之kafka数据生产与消费集成案例

前言 本节内容我们主要介绍一下flume数据采集和kafka消息中间键的整合。通过flume监听nc端口的数据,将数据发送到kafka消息的first主题中,然后在通过flume消费kafka中的主题消息,将消费到的消息打印到控制台上。集成使用flume作为kafka的生产…

基于Protege的知识建模实战

一.Protege简介、用途和特点 1.Protege简介 Protege是斯坦福大学医学院生物信息研究中心基于Java开发的本体编辑和本体开发工具,也是基于知识的编辑器,属于开放源代码软件。这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发…

高阶导数的概念与公式

目录 高阶导数的概念 常用的高阶导数的公式 隐函数补充 反函数补充 高阶导数的概念 高阶导数是指一阶或二阶及以上的导数。这些导数可以通过连续进行一阶导数的计算来得到。然而,实际计算高阶导数时,存在一些问题,例如对抽象函数高阶导数…

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一)

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 第一部分:组态配置 具体步骤可参考以下内容: 如下图所示,新建一个项目后,添加一个安全型PLC,这里以1516F-3 PN/DP为例进行说明, 如下图所示,添加CPU完成后,可以看到左侧的项目树中比普通的PLC多了几个选项…

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

【Docker】Docker简介

Docker简介 📋导航 1. Docker简介1.1 什么是Docker?1.2 什么是容器?1.3 容器的优势?1.4 Docker的优势?1.5 虚拟技术与容器技术Docker的区别?1.6 为什么学习Docker? 2. 安装Docker3. Docker架构4. Docker命…

Vue3样式绑定

文章目录 Vue3样式绑定1. class 属性绑定1.1 v-bind:class 设置一个对象,从而动态的切换 class1.2 在对象中传入更多属性用来动态切换多个 class1.3 直接绑定数据里的一个对象1.4 绑定一个返回对象的计算属性。这是一个常用且强大的模式1. 5 数据语法1.6 errorClass…

JAsper:专注于营销领域的AIGC

【产品介绍】 Jasper 由 Dave Rogenmoser(CEO)、Chris Hull(COO)和 John Phillip Morgan(CTO)在2021 年成立,是一款领先的 AI 营销工具以及写作助手。整个jasper官网都会强调自己对营销领域的理…

了解冒泡排序

package com.mypackage.array;import java.util.Arrays;public class Demo07 {public static void main(String[] args) {int[] a {3,2,6,7,4,5,6,34,56,7};int[] sort1 sort1(a); //调用我们自己写的排序方法后,返回一个排序后的数组System.out.println(Array…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等) 准备文件,这里我放在resource下的templates路径 在pom中配置构建打包的资源,更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

台积电的战略布局:“曲线”抢单 | 百能云芯

郭明錤最新的分析引发了广泛关注,他指出台积电采取了一系列重大战略投资举措,旨在争夺未来的半导体订单,尤其是来自苹果和英伟达的12纳米订单。这些战略举措包括认购英特尔手中的IMS Nanofabrication Global股权以及投资安谋(Arm&…

Linux:基础开发工具之yum,vim,gcc的使用

文章目录 yumvimgcc 本篇主要总结的是Linux下开发工具 yumvimgcc/g yum 什么是yum? 不管是在手机移动端还是pc端,不管是什么操作系统,当用户想要下载一些内容或者工具的时候,都需要到一个特定的位置进行下载,例如在…

点云从入门到精通技术详解100篇-从全局到局部的三维点云细节差异分析

目录 前言 国内外研究现状 细节差异分析相关研究 三维点云的相似性相关研究 存在的问题 三维点云对比的相关技术 2.1 三维点云的采集设备 2.2三维点云的存储格式 2.3三维点云的空间变换 2.4三维点云相似度分析 2.4.1点云特征的提取 2.4.2特征相似度计算 本文篇幅较长&#xff0…

获取Windows 10中的照片(旧版)下载

Windows 10中的新版照片应用,目前发现无法直接打开部分iOS设备上存储的照片。需要使用照片(旧版)才行。 但目前应用商店中无法直接搜索到照片(旧版),因此笔者提供如下链接,可以直接访问并呼出W…

PostgreSQL数据库IPC——SI Message Queue

SI Message Queue代码位于src/backend/storage/ipc/sinvaladt.c和src/backend/storage/ipc/sinval.c文件中,属于PostgreSQL数据库IPC进程间通信的一种方式【之前介绍过PostgreSQL数据库PMsignal——后端进程\Postmaster信号通信也是作为PostgreSQL数据库IPC进程间通…

Ubuntu安装Android Studio

一、Android Studio安装 官方教程:安装 Android Studio | Android Developers 1、下载:Download Android Studio & App Tools - Android Developers,选择linux版本 2、 提取/解压 将下载的安装包提取出来 3、 64位ubuntu系统&#…

vite+react 使用 react-activation 实现缓存页面

对应的版本 "react": "^18.2.0", "react-activation": "^0.12.4", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0",react-activation 这是一个npm包,在react keep alive…

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目 前言一. 相交链表(邻接图和DFS) 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相交链表(邻接图和DFS) 原题链接 public int reachableNodes(int n, int[][] ed…

《算法竞赛·快冲300题》每日一题:“点灯游戏”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…

【精品】商品规格 数据库表 设计

特点 同一类商品的规格项分组一样同一类商品的规格项一样不同商品的规格值是不同的 规格参数规格组规格项:规格值本博客对应的SQL文件下载地址:https://download.csdn.net/download/lianghecai52171314/88306884 方案一 数据库设计 查询17号商品的规…