当前位置: 首页 > news >正文

【lesson12】理解进程地址空间

文章目录

  • 什么是进程地址空间?
  • 进程地址空间的作用
  • 扩展内容
    • 初步理解
    • 深入理解

什么是进程地址空间?

故事:
背景有一个大富豪,家里的存款有10亿美元,他有三个私生子三个人之间彼此互不相识,只有富豪知道他们的存在。
人物介绍
在这里插入图片描述
有一天富豪分别找他们谈话:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从谈话中我们可以看出,富豪分别对他三个儿子画了个大饼。而三个儿子之间也不知道彼此的存在,所以他们就相信了。
我们类比到今天到学习的内容:
在这里插入图片描述
在这里插入图片描述
那么饼要不要管理呢?
要!
例子公司的老板给所有人都画过大饼,这天老板给张三说表现不错下次给你升经理。第二天老板又说张三干的不错,昨天我跟你说过干的好升部长没忘记吧。这时候张三懵了,不是经理吗,怎么又变部长了。

所以我们就会明白饼也是要管理的。
如何管理:
先描述,再组织。

内核中的地址空间,本质将来也一定是一种数据结构。将来一定要和特定的进程关联起来

进程地址空间的作用

历史计算机是直接访问物理内存的。
在这里插入图片描述
物理内存本身是随时可以被读写的。
而这就导致了一个问题:特别不安全。
如果进程A内的代码要跳转到进程B,这如果进程A崩溃可能也会导致进程B的崩溃,这样进程间就没有独立性了。

现代计算机提出了一下的方式
在这里插入图片描述
这是可能就会有人有疑问这不还是要访问物理地址码?
万一虚拟地址是非法的呢?
举故事说明:
背景过年了张三收到了每个亲戚的压岁钱,加起来一共有五百块。妈妈不放心于是找张三商量
在这里插入图片描述
于是接下来小明有需要的时候,就找妈妈拿钱。
在这里插入图片描述
在这里插入图片描述
我们可以看到妈妈是可以拒绝我们非法的请求的。
在这里插入图片描述
这里我们可以推广到今天讲的内容
张三:虚拟内存
妈妈:映射机制
超市:物理内存

如果地址非法,映射机制禁止映射也变向的保护了物理内存。

虚拟地址究竟是什么?
映射关系的维护究竟是谁做的?
这两个问题之后再讲解。

我们都知道进程地址空间有区域划分,区域被划分为了:代码区、堆区、栈区等等区域,那么如何理解区域划分。

故事理解
假设小胖和小美是同桌他们共用一张桌子。
在这里插入图片描述
而小胖不注意卫生每天脏兮兮的,于是小美就在桌子上画了一条线,让小胖不能越界。
在这里插入图片描述
假设桌子长100cm
[0,50]属于小胖
[51,100]属于小美

而小美划分桌子的本质就是在做区域划分。
那么是如何用代码实现区域划分的呢?
在这里插入图片描述

每个进程都有地址空间,地址空间是一种内核数据结构,它里面至少要有各个区域的划分。
在这里插入图片描述
所以所谓的区域划分本质就是在一个范围里定义start和end,而所谓的范围变化本质就是对end和start进行加或者减一个特定的范围值。
Linux具体的区域划分:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
只要做到每个进程的页表,映射的是物理内存的不同区域,就能做到进程直接不会互相干扰,保证进程独立性。

解释初识地址空间博客中的一个现象:
同一地址的g_val有不同的值。
在这里插入图片描述
我们可以看到当父进程和子进程分别进行映射的时候,他们各自的页表分别把它们映射到不同的物理地址所以一个g_val才会有两个值
两个进程直接g_val的虚拟地址可以是一样的。

同时也发生了写时拷贝。

这也回答了我们之前学进程的时候fork有两个返回值的问题。
在这里插入图片描述

return会被执行两次,return的本质就是对id进行写入,此时就发生了写时拷贝,所以父子进程各自在物理内存中有属于自己的id变量空间。只不过在用户程用同一个变量(虚拟地址)来标识。

扩展内容

初步理解

当我们程序在编译的形成可执行程序,没有被加载到内存中的时候。
请问我们程序内部有地址吗?

在这里插入图片描述
我们看到我们并没有运行可执行程序,就已经有地址VMA了,而VAM就是虚拟地址空间
所以可执行程序编译的时候内部其实已经有地址了!
所以地址空间不仅仅是OS内部要遵守,其实编译器也要遵守!
即编译器编译代码的时候,就已经给我们形成了各个区域:代码区,数据区等等。并且采用和Linux内核中一样的编址方式,给每个变量,每一行代码都进行了编址。故程序在编译的时候,每一个字段早已经具有了一个虚拟地址!!!
在这里插入图片描述

程序内部的地址依旧用的是编译器编译好的虚拟地址。
当程序加载到内存的时候,每行代码,每个变量具有了一个物理内存地址。

当CPU读到指令的时候指令内部有地址,这个地址就是虚拟地址。

深入理解

在这里插入图片描述

这里就有问题地址空间和业表最开始的时候数据是从哪里来的?
当数据要被加载到内存的时候,可执行程序要用编译好的虚拟地址填充进入其中。
每一个函数和变量都有地址->编译器给的
同样的也一定被加载带物理内存中。

相关文章:

【lesson12】理解进程地址空间

文章目录 什么是进程地址空间?进程地址空间的作用扩展内容初步理解深入理解 什么是进程地址空间? 故事: 背景:有一个大富豪,家里的存款有10亿美元,他有三个私生子三个人之间彼此互不相识,只有富…...

计算机里的神灵(SCIP)

计算机程序的构造和解释 我找到计算机里的神灵了,开心一刻 下面是从MIT官网下载的 SCIP求值器(解释器)的代码,这个官网是个宝藏库 还有其他视频课程和 SCIP的问题答案和可运行代码 链接:https://ocw.mit.edu/courses/6…...

基于微信小程序的公交信息在线查询系统小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...

【STM32】IAP升级01 bootloader实现以及APP配置(主要)

APP程序以及中断向量表的偏移设置 前言 通过之前的了解 之前的了解,我们知道实现IAP升级需要两个条件: 1.APP程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始; 2.APP程序的中断向量表相应的移动,移动的偏移量为 x&#xff…...

ruoyi(若依)接口拦截路径配置,接口访问要授权,放开授权直接访问

1.找到文件SecurityConfig.java文件,里面配置相应的放行路径...

Ctfshow web入门 XSS篇 web316-web333 详细题解 全

CTFshow XSS web316 是反射型 XSS 法一&#xff1a; 利用现成平台 法二&#xff1a; 自己搭服务器 先在服务器上面放一个接受Cookie的文件。 文件内容&#xff1a; <?php$cookie $_GET[cookie];$time date(Y-m-d h:i:s, time());$log fopen("cookie.txt"…...

watch()监听vue2项目角色权限变化更新挂载

<template><div><el-form:model"updateRole"ref"roleForm"label-width"100px"label-position"right"style"width: 400px":rules"roleRules"><el-form-item label"角色名称" prop&…...

轻量化设计、佩戴更舒适——轻律 Umelody U1头戴式蓝牙耳机

头戴式耳机不像以前那么笨重&#xff0c;身边很多人都在用&#xff0c;而且拍照还巨出片&#xff0c;拍照累了还能听歌放松&#xff0c;何乐而不为&#xff0c;国庆节即将来临&#xff0c;秋冬季节也就快要到了&#xff0c;棕色在合适不过了&#xff0c;最近有一款高颜值的复古…...

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作 第三章 硬件知识_LED 原理图3.1 先来讲讲怎么看原理图 第四章 普适的 GPIO 引脚操作方法4.1 GPIO 模块一般结构4.2 GPIO 寄存器操作4.3 GPIO 的其他功能&#xff1a;防抖动、中断、唤醒 第五章 具体单板的 GPIO 操作…...

外贸人员如何选择适合的邮箱服务

随着互联网和数字技术的快速发展&#xff0c;电子邮件已经成为商务沟通的主要方式之一。对于外贸人员来说&#xff0c;选择一个合适且高效的邮箱服务至关重要。本文将探讨外贸人员在选择外贸邮箱时应考虑的因素&#xff0c;以便找到最适合自己的解决方案。 “外贸人员如何选择合…...

pt29django教程

文件上传 文件上传必须为POST提交方式&#xff0c; 表单<form>中文件上传时必须有带有enctype"multipart/form-data" 时才会包含文件内容数据。 表单中用<input type"file" name"xxx">标签上传文件 名字xxx对应request.FILES[xx…...

【操作系统笔记七】进程和线程

进程的组成 进程要读取 ELF 文件&#xff0c;那么&#xff1a; ① 要知道文件系统的信息&#xff0c;fs_struct② 要知道打开的文件的信息&#xff0c;files_struct 一个进程除了需要读取 ELF 文件外&#xff0c;还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…...

Kakfa高效读写数据

1.概述 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff1a;一是 Producer 生产的数据存到 broker&#xff0c;二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了&#xff0c;本文也是从这两个方面去剖析Kafk…...

C++ 类和对象(4)构造函数

C的目标之一是让使用类对象就像使用标准类型一样&#xff0c;但是常规的初始化语法不适用于类似类型Stock&#xff1a; int year 2001&#xff1b; struct thing {char * pn;int m; }; thing amabob {"wodget",-23}; //有效初始化 Stock hot {"Sukies Autos…...

数据结构————广度寻路算法 Breadth First Search(广度优先算法)

(一)基础补充 二叉树的基本定义 1)二叉树就是度不超过2的树,其每个结点最多有两个子结点 2)二叉树的结点分为左结点和右结点 代码实现二叉树 #include <stdio.h> #include <stdlib.h> struct Node {int data;struct Node* pLeft;struct Node* pRight; }…...

安卓桌面记事本便签软件哪个好用?

日常生活及工作中&#xff0c;很多人常常会遇到一些一闪而现的灵感&#xff0c;这时候拿出手机想要记录时&#xff0c;却找不到记录的软件。在这个快节奏的时代&#xff0c;安卓手机是我们日常生活不可或缺的伙伴。然而&#xff0c;正因为我们的生活如此忙碌&#xff0c;记事变…...

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中&#xff0c;成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业&#xff0c;通过打造一双步力宝健康鞋&#xff0c;他们以功能性智能科技穿戴品为核心&#xff0c;成功创造了一种结合智能康养与时尚潮流的独特产品…...

反射获取Constructor、Field、Method对象

1、获取构造器 Constructor [ ] getConstructor s ( ) 获取全部的构造器&#xff1a;只能获取 public 修饰的构造器 package com.csdn.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.junit.Test; import jav…...

【Netty】 ByteBuf的常用API总结

目录 一、ByteBuf介绍 二、ByteBuf创建 1.池化创建 ByteBufAllocator 2.Unpooled &#xff08;非池化&#xff09;创建ByteBuf 3.ByteBufUtil 操作ByteBuf 三、读取ByteBuf数据 1.get方法 2.read方法 3.set方法 4.write方法 5.索引管理 6.索引查找 7.索引查找 8.其…...

热门敏捷开发管理工具

敏捷管理研发工具可以协助团队更好地进行敏捷开发和管理。以下是几种流行的敏捷管理研发工具&#xff1a; Leangoo&#xff1a;Leangoo领歌一款永久免费的专业敏捷研发管理工具&#xff0c;它覆盖了敏捷项目研发全流程&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷…...

Java分支结构:一次不经意的选择,改变了我的一生。

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、顺序结构二、分支结构1、if语句2、switch语句 好久不见&#xff01;命运之轮常常在不经意间转动&#xff0c;有时一个看似微…...

Unity中Shader需要了解的点与向量

文章目录 前言一、点和向量的区别二、向量加法减法1、向量加法2、向量减法(可以把向量减法转化为向量加法) 三、向量的模四、标量![在这里插入图片描述](https://img-blog.csdnimg.cn/03df81df3cdf47989a11605d5f5e7da5.png)1、向量与标量的乘法 前言 Unity中Shader了解使用的…...

Java初始化大量数据到Neo4j中(一)

背景&#xff1a;我们项目第一次部署图数据库&#xff0c;要求我们把现有的业务数据以及关系上线第一时间初始化到Neo4j中。开发环境数据量已经百万级别。生成环境数据量更多。 我刚开始开发的时候&#xff0c;由于对Neo4j的了解并没有很多&#xff0c;第一想到的是用代码通用组…...

Excel·VBA日期时间转换提取正则表达式函数

标准日期转换 Function 标准日期(ByVal str$) As DateDim pat$, result$arr Array("(\d{4}).*?(\d{1,2}).*?(\d{1,2})", "(\d{4}).*?(\d{1}).*?(\d{1,2})")If Len(str) < 8 Then pat arr(1) Else pat arr(0)With CreateObject("vbscript.r…...

Django中的缓存

Django中的缓存 缓存的定义 定义: 缓存是-类可以更快的读取数据的介质统称&#xff0c;也指其它可以加快数据读取的存储方式。一般用来存储临时数据&#xff0c;常用介质的是读取速度很快的内存 意义:视图渲染有一定成本&#xff0c;数据库的频繁查询过高;所以对于低频变动的页…...

Python 编程基础 | 第二章-基础语法 | 2.4、while 语句

一、while 语句 1、循环语句 Python 编程中 while 语句用于循环执行程序&#xff0c;其基本形式为&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)……例如&#xff1a; count 0 while (count < 9):print(count)count 1while 语句时还有另外两个…...

Qt Charts简介

文章目录 一.图标类型Charts分类1.折线图和样条曲线图2.面积图和散点图3.条形图4.饼图5.误差棒图6.烛台图7.极坐标图 二.坐标轴Axes类型分类三.图例四.图表的互动五.图表样式主题 一.图标类型Charts分类 图表是通过使用系列类的实例并将其添加到QChart或ChartView实例来创建的…...

MinGW、GCC、GNU和MSVC是什么?有什么区别?

在C和C开发中&#xff0c;常常会遇到MinGW、GCC、GNU和MSVC这些术语。本教程将向您解释它们的含义以及它们之间的区别&#xff0c;帮助您更好地理解这些常见的编译工具和开发环境。 MinGW&#xff08;Minimalist GNU for Windows&#xff09;&#xff1a; MinGW是一个开源的软件…...

引入easyExcel后,导致springboot项目无法开启tomcat

报错信息&#xff1a; Caused by: java.lang.annotation.IncompleteAnnotationException: org.terracotta.statistics.Statistic missing element type at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:81) at com.sun.proxy…...

Doris数据库FE——启动流程源码详细解析

Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。代码路径&#xff1a;doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java 环境检查 在启动FE的时候&#xff0c;主要做环境检查。检查一些启动时必要的环境变量以及初始化配置…...

免费做封面网站/网络推广渠道和方法

1.1 主服务器配置1.安装插件2.mysql > INSTALL PLUGIN rpl_semi_sync_master SONAME semisync_master.so; 3.查看全局变量4.mysql > show global variables like %semi%;设置主服务器的半同步复制全局变量mysql > set global rpl_semi_sync_master_enabledON; 开启半同…...

怎么做可以聊天的网站/关键词查询工具软件

连接控制QUIT 关闭连接AUTH (仅限启用时)简单的密码验证 适合全体类型的命令EXISTS key 判断一个键是否存在;存在返回 1;否则返回0;DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4TYPE key 返回某个key元素的数据类型 ( none:不存在,string:字符,list,set,zset,ha…...

东莞定制网站建设/企业网站网页设计

网络下载图片方法一&#xff1a;//处理图片url---下载图片---保存图片到相册 //-(void)dealDownloadImageStr{ // dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // dispatch_semaphore_t semaphore dispatch_semaphore_cre…...

做淘宝内部优惠券网站要钱么/百度关键词工具入口

Hello, I’m Shendi 最近小程序要接入微信的内容安全方面 这里记录一下 获取 Token 封装 首先这两个接口都需要使用到 Token 这里我直接贴上代码&#xff0c;其中的参数都是直接追加在 url 上 JSON方面使用的是 fastjson /** * 判断返回的数据是否为错误数据.* param json…...

免费下载软件的网站/广告联盟论坛

我是极简主义者&#xff0c;崇尚简洁明快的代码风格&#xff0c;这也可能是我不喜欢Java全家桶的原因……当然我说的简洁是要建立在不降低可读性的前提下&#xff0c;即不影响代码本身的表现力。如果为求代码精简而让代码晦涩艰深同样不可取。本文会介绍10个条款&#xff0c;后…...

做网站 报价/合肥网站推广公司排名

目录1.获取Field2.反编译Field3.通过反射机制访问对象属性4.可变长度参数5.反射Method(了解)6.反编译(了解)7.反射机制调用方法8.反射Constructor9.反射机制调用构造方法10.获取父类和父接口在前面一节我们介绍了反射机制的详细内容反射机制&#xff0c;本节我们将介绍通过反射…...