程序地址空间(下)

news2024/12/24 8:19:17

目录 :

            1.接上部分内容再谈谈地址空间是什么??

            2.页表+MMU(硬件设备)

            3.为什么要搞个虚拟地址映射到物理地址

            4.解释为什么最开始的问题???

  -------------------------------------------------------------------------------------------------------------------------

1.接上部分内容再谈谈地址空间是什么??

操作系统在创建进程的同时不仅仅创建PCB块,还必须创建这个进程对应的进程地址空间

所以操作系统既然要对进程管理,当然也对进程的地址空间进行管理

操作系统对进程的管理是通过对应的数据结构进行管理

那么操作系统对地址空间的管理也是通过一种数据类型  (进程地址空间本质是内核中一种数据类型)

struct mm_struct{

//进程地址空间

}

 对进程地址空间作进一步理解(引出虚拟地址的概念)

小时候你的同桌是一位爱干净的女孩子,然而你是一位非常不爱干净的男孩子,老是流口水什么的,所以你的同桌小女孩非常的反感你,决定和你划分界限

 所以我们的mm_struct 本质就是一个一个的区域

struct mm_struct

{

         unsigned int code_start

         unsigned int code_end;

         unsigned int init_data_star;

         unsigned int init_data_end;

         ……

}

 虽然这里只有star 和 end 但是每个进程都可以认为mm_struct 代表整个内存,且所有的地址为

0x00000000  - 0xFFFFFFFFFF

2.页表+MMU

 这就要引出页表和MMU(硬件设备)

 页表的核心工作就是将虚拟地址转换成物理地址

 3.为什么要搞个虚拟地址映射到物理地址

为什么要这么干???????

所以我们在进程和物理内存当中添加了一个角色   --》 操作系统

而进程地址空间和页表就是操作系统的对应的一个真正管理者角色

虚拟地址转换成物理地址,是通过页表和MMU,那么是谁帮助页表在转换呢???

当然是操作系统了,操作系统帮助页表和MMU去转化。

常量字符串不可被修改的根本原因

 1.通过添加一层软件层,完成有效的对进程操作内存进行风险管理,本质是为了保护物理内存以及各个进程的数据安全

 我们申请了1000个字节,我们立马能使用1000个字节嘛?????

不一定,可能会存在暂时不会全部使用,甚至暂时不用!!!

那肯定不能闲置着阿,我们来看看操作系统是怎么处理的

 所以操作系统拿着这在进程地址空间开辟的虚拟地址空间返回给了进程

过了一段时间进程要使用刚刚在堆区上开辟的100字节空间了,但是这时候这块100字节空间还没有在物理内存上开辟,操作系统说等等

操作系统这时候在去物理内存上给你申请一部分空间,接下来把你在进程地址上的虚拟地址和物理内存上的地址在页表建立映射关系。

完成之后,在让进程去对刚刚开辟的100字节空间进行内存操作

当你真正需要用的时候,操作系统在去物理内存上开辟(这种叫做基于缺页中断进行物理内存申请)

2.将内存申请和内存使用的概念在时间划分清楚,通过虚拟地址空间,来屏蔽地层申请内存的过程,达到进程读写内存和OS进行内存管理操作,进行软件上面的分离

我们先来思考一个问题 CPU是怎么知道你的第一行代码在哪里呢???

如果没有地址空间那么CPU读取我们内存的时候

 这样子的话CPU就生气了,一气之下决定每次都只从0x1234的地址出读取代码

那么有了页表,CPU就方便了

CPU将程序的代码和数据加载到物理内存当中,将物理内存的地址保存在这个进程对应的页表物理地址当中,而CPU设定了只从0x1234开始读,那么我们将虚拟地址0x1234和我们的刚刚保存的将代码和数据加载到内存当中的物理地址进行映射

每一个进程的正文代码的虚拟地址相同,只需要我们页表的映射不同,CPU不就可以通过页表的映射快速的找到每一个进程的在物理内存当中的数据和代码了嘛

3.站在CPU和应用层的角度,进程统一可以看作统一使用4GB空间,而且每个空间区域的相对位置是确定的!!!

并且我们进程的数据和代码可以加载到物理内存的任意位置(只需要我们的页表和我们的虚拟地址形成映射即可)

OS最终这样设计的目的,只为了达到一个目标 :每个进程都认为自己是独占系统资源的

4.解释为什么最开始的问题???

 

 只要父子进程都不对数据进行修改,那么父子进程对数据都是用同一份的,当父子进程要对数据进行修改时,那么就会发生写实拷贝

 父子进程一般的代码是共享的

所以,所有的只读数据,一般可以只有一份

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

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

相关文章

Spring 的 IoC(控制反转)

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,也是一个概念,同时是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 在这里说 IoC 之…

Java ---包装类

(一)包装类概念 官方说法: Java是面向对象的语言,但是为了便于开发者的使用,Java中却沿用了C语言的基本数据类型,在进行基本的数据计算时,开发者可以直接使用基础类。但是当需要和Java其他对象…

如何理解ThreadLocal

ThreadLocal的基本概念 在并发编程中,多个线程访问同一个变量,可能会出现线程安全问题、为了保证在多线程环境下访问共享变量的安全性,通常在访问共享变量的时候加锁,以实现线程同步的效果。 使用同步锁机制保证多线程访问共享变…

ChatGPT | 一文详解ChatGPT(学习必备)

本文概要 本篇文章主要介绍ChatGPT的产生和使用体验,适合不了解ChatGPT或者了解不够透彻的小伙伴,文中的描述非常详细,干货满满,感兴趣的小伙伴快来一起学习吧! 🌟个人简介 ☀️大家好!我是新人…

信息的相关性和冗余度:信息在整个文明中的作用

文章目录 I 古埃及的象形文字1.1 罗塞塔石碑1.2 古埃及文字音节和希腊字母的对应表1.3 破解古埃及文字 I 古埃及的象形文字 1.1 罗塞塔石碑 这个石碑是在公元前196年埃及国王托勒密五世加冕一周年的诏书。 在此前大约一百年,埃及已经被来自希腊北方城邦的亚历山大…

C++------引用

一、 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 类型& 引用变量名(对象名) 引用实体; int main() {//一个变量可以有多个引用…

LWIP协议与TCP/IP

1. 学习一个东西,先了解这个东西是干什么用的,哪些场景会用到它,与自己已经掌握的其他知识的联系 a. 例如:LWIP这个东西是干什么用的:他就是一个裁剪后保持大部分TCP/IP功能的协议。用少量的资源消耗实现一个较为完整的…

大数据实战 --- 淘宝用户行为数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup hiveserver2 1>/dev/null 2>…

从零开始的ChatGLM 配置详细教程

从零开始的ChatGLM配置教程 文章目录 从零开始的ChatGLM配置教程一,前言二,环境配置1、下载ChatGLM项目2、配置程序运行环境 三、在HuggingFace下载chatGLM-6B模型1,安装 Git Lfs2,下载相关文件3,在HuggingFace中下载相…

什么是隔离放大器

隔离放大器(也称为单位增益放大器)是一种提供隔离的运算放大器电路电路的一部分与另一部分电路不同,这样就不会在电路的一部分中使用、消耗或浪费功率。 现在将对此进行彻底解释,因为这乍一看似乎是一个令人生畏的话题&#xff0c…

【TCP Wrappers】

目录 一、保护原理二、TCP Wrappers 保护机制的两种方式三、TCP Wrappers 的访问策略四、TCP Wrappers 机制的基本原则1、允许所有,拒绝个别2、允许个别,拒绝所有实列 一、保护原理 二、TCP Wrappers 保护机制的两种方式 1.直接使用 tcpd 程序对其他服务…

JavaFx 自定义封装 DateTimePicker 时间选择组件(支持时分秒)

JavaFx DateTimePicker 时间选择组件 javaFx 自定义时间选择组件 DateTimePicker, javaFx 源代码不支持时分秒选择,该代码组件支持时分秒选择,同时也支持清空、取消、此刻等操作! 效果如下图所示: 源码地址&#xff…

AXI4总线学习笔记

AXI4 总线是 ARM 公司开发的一种总线,广泛应用于 Xilinx 的 IP 核中,比如笔者近期涉及 DDR 的读写控制,需要用到 MIG IP 核,这个 IP 核就通过 AXI4 总线进行控制。 AXI4 共有 5 种通道:读地址通道 ARC,读数…

虽然音视频开发只是功能组件开发,但薪资远高于普通开发岗……

首先要明白一件事情,音视频开发是功能组件开发而不是应用开发。应用开发的具体需求基本上是定制化的,而且需求一直在改,比如今天加个按钮,明天改个风格,只要应用还在天天都有活干。而功能组件开发的需求大多都比较统一…

一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

目录 Filter过滤器 作用 应用场景 拦截器Interceptor Aspect切片 三者对比 执行顺序 拦截层面 过滤器Filter和拦截器Interceptor的区别 Filter过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤…

vue3组件间怎么通信?简述一下通信方式

在写 vue3 的项目中,我们都会进行组件通信,除了使用 pinia 公共数据源的方式除外,我们还可采用那些更简单的API方法呢?给大家介绍介绍几种父子组件和子父组件通信的方式。 1、父子组件通信 1.1 defineProps 父子组件通信我们第一…

【Redis】Redis数据结构——链表

【Redis】Redis数据结构——链表 注意事项: 本文第三点redis中操作列表的相关命令可参考博文: 【Redis】Redis基础命令集详解_Etui۹(・༥・)و ̑̑的博客-CSDN博客 本文参考内容如下: 1、Redis数据结构——链表 - 随心…

MySQL_第07章_单行函数

第07章_单行函数 讲师:尚硅谷 - 宋红康(江湖人称:康师傅) 官网: http://www.atguigu.com 1. 函数的理解 1.1 什么是函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我…

音视频八股文(3)--ffmpeg常见命令(2)

07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: ffplay -window_title "test time" -ss 2 -t 10 -autoe…

[计算机图形学]辐射度量学、渲染方程与全局光照(前瞻预习/复习回顾)

一、前言 我们前面讲到的Blinn-Phong着色,Whitted-Style光线追踪都有一定问题,那就是它们并没有严格的按照物理规则定义各个变量。比如,Blinn-Phong中的光的强度,并没有一个确切的单位。同时Whitted-Style光线追踪我们也做了很多简…