进程地址空间,零基础最最最详解
目录
建议全文阅读!!!
建议全文阅读!!!
建议全文阅读!!!
一、什么是地址空间
1、概念
2、主要组成部分
3、特点和作用
(1)虚拟化:
(2)隔离性:
(3)动态分配:
(4)管理和保护:
二、如何理解地址空间?(建议全文阅读)
1、为什么要有地址空间
(1)理由一
(2)理由二
(3)理由三
2、如何理解页表?
3、如何理解虚拟空间
一、什么是地址空间
1、概念
进程地址空间是指:操作系统为每个正在运行的进程分配的虚拟内存空间。每个进程都有自己的独立地址空间,使得每个进程在运行时都感觉自己拥有整个计算机的内存和资源。
2、主要组成部分
组成部分 | 描述 | 功能 |
---|---|---|
代码区(Text Segment) | 存放执行代码的机器语言指令。 | 执行程序的实际指令,通常是只读的。 |
数据区(Data Segment) | 存放已初始化的全局变量和静态变量。 | 存储全局变量和静态变量的数据。 |
堆区(Heap Segment) | 用于动态分配内存,大小可动态调整。 | 通过 malloc 、calloc 等函数分配的动态内存。 |
栈区(Stack Segment) | 存放函数的参数值、局部变量值、返回地址等。 | 支持函数调用、参数传递及局部变量的存储。 |
内存映射区域(Memory-mapped Segment) | 映射文件或设备,如共享库、动态链接库等。 | 将文件或设备映射到进程的地址空间,使得它们可以像内存一样访问。 |
内核空间(Kernel Space) | 保留给操作系统及其内核模块使用的地址空间。 | 只能通过系统调用访问,用于操作系统内部功能和服务。 |
3、特点和作用
(1)虚拟化:
每个进程认为自己拥有整个计算机的内存空间,实际上操作系统通过虚拟内存管理机制将其映射到物理内存或者磁盘上。(这是因为一般情况下,一个进程是很难占用掉整个物理内存)
(2)隔离性:
不同进程的地址空间是独立的,这意味着一个进程无法直接访问另一个进程的地址空间,从而增强了系统的安全性和稳定性。(确保进程的独立性)
(3)动态分配:
进程可以动态地在堆区分配和释放内存,使得程序可以根据需要动态调整内存使用,提高了内存的利用率。(具体的表现为写时拷贝)
(4)管理和保护:
操作系统负责管理和保护进程的地址空间,确保各个进程之间不会相互干扰或者篡改对方的数据。(具体的表现如写时拷贝)
二、如何理解地址空间?(建议全文阅读)
程序地址不是物理地址,而是虚拟地址
每一个进程都有自己的虚拟地址空间,
同时,操作系统会创建一个页表,
每一个进程都有自己独立的页表
页表的作用是:虚拟地址映射物理地址
进程上层使用的地址,都是虚拟地址,而不是真正的物理地址
那么多的进程,即有很多对应的地址空间
地址空间的本质就是内核中的一个结构体对象
先描述,在组织
子进程会把父进程的很多内核数据结构拷贝一份继承
也就是说页表也会被继承
那么,子进程和父进程的虚拟地址是同一个页表
所以,虚拟地址是一样,指向的物理地址也是一样的
所以,数据也是一样的
但是,当子进程要修改数据时
为了确保进程的独立性,这里表现为子进程的修改不影响父进程的运行
因此,为了避免子进程修改的数据之前
操作系统会自动新开辟一个物理内存空间,并且更新子进程的虚拟地址映射
在新开辟的映射空间中去修改子进程的数据值
此时,子进程的虚拟地址的映射就变成了新开辟的物理空间
所以,这样就会导致这样一个现象:
父进程和子进程数据的虚拟地址显示是一样的
但是他们的物理空间实际存储的数据却是不同的(这也就是为什么创建子进程时,同一个pid,返回值却不一样的原因)
这个现象叫做,写时拷贝
也就是说,如果父进程和子进程都没有写入数据,那么数据就是共享的
那么,为什么要采取这样的策略呢?为什么不直接各自用一份数据呢?
例如子进程创建的时候,直接拷贝一份父进程的数据给子进程
各自用各自的,这样就不用这么麻烦了
原因是,父进程的数据很多,且一般来说,并不是父进程和子进程的所有数据都不一样
很大程度上,很多数据实际上是一样的,因此没有必要再开一份,直接共享即可
需要修改区别的,再去修改,节省空间,按需申请
本质是通过调整修改的时间顺序,达到节省空间的目的
地址空间是操作系统给进程分配的一个空间大小
地址空间本质是内核的一个叫做mm_struct结构体对象!内部很多的属性都是表示start,end,表示划分区域范围
一个一个的区域划分,都是结构体内部的划分
例如代码区的划分:usigned long start_data, end_data
1、为什么要有地址空间
(1)理由一
一个进程的各个数据部分,在物理内存中实际是乱序的
这就很混乱
但是,有了地址空间(mm_struct)之后:
代码就在代码段,数据就在数据段
该在堆区的在堆区,该在栈区的在栈区
同时,这些连续的虚拟地址再经过的页表映射到物理内存
这样,让进程数据无序变有序,让进程以统一的视角看待物理内存
以及各个运行区域
(2)理由二
进程管理模块和内存管理模块解耦
什么意思?
当进程申请一个内存空间时,有可能并不一定立即使用
如果不立即使用,但是我却给你开辟了这样一个空间
那个,在该进程使用这个内存空间之前,这一个内存空间相当于被占用浪费了
如果,在该进程申请一个内存空间,但是不是立即使用时,
我们只给虚拟地址和页表的的虚拟地址部分,而并不是真正的分配物理内存
这样,在进程的视角看,他已经申请了空间
而在实际的物理内存看,我并没有开辟这个空间,可以继续被利用
如此,这样的结构设计,就达到了按需即时分配内存空间的目的
大大的提高了内存的利用率
(3)理由三
拦截非法请求
进程和实际的物理内存中间,对内存的申请,多了一层地址空间
当进程的代码 / 数据访问越界时,操作系统在地址空间层就可以识别
这样,就可以对非法请求进行拦截,而不是直接到物理内存中申请 / 访问非法的地址
这样做的目的,是对物理内存进行保护
2、如何理解页表?
页表不仅仅有虚拟地址和物理地址的映射,还有对应的权限
当一个进程要对一个数据修改时,
本质是通过虚拟地址找到对应物理内存的数据再修改
当你要修改某一个数据
但是该数据在页表的所记录的权限只有wx,没有读权限,仅仅允许只读
那么就会修改动作就会被拦截,直接报错,程序崩溃
同时,修改这个动作也就不会在物理内存实现
这也就是为什么,一个程序崩溃时,并不会影响其他进程
因为进程的运行是在物理内存中进行的
崩溃的程序在虚拟内存页表层就已经被拦截,根本就不会被写到进程中
进而也就不会影响其他进程的运行
所以说,如果一个进程可以在内存中加载运行,就证明该进程是合法的
3、如何理解虚拟空间
虚拟空间(Virtual Memory)使得每个进程都拥有独立的、连续的内存空间,称为虚拟地址空间。这种独立的空间使得每个进程都认为自己在独占系统的所有内存,而实际上,物理内存是被多个进程共享的。
对虚拟空间的理解,需要认识和理解一些关键概念,建立起一个整体的初步认识和理解。
概念 | 描述 |
---|---|
虚拟地址空间 | 每个进程看到的内存空间,是虚拟的、连续的地址范围。在32位系统中通常是0x00000000到0xFFFFFFFF(4GB空间)。 |
物理内存 | 系统中实际存在的内存,由硬件管理。物理内存大小有限,虚拟地址空间可以比物理内存大得多。 |
地址映射 | 虚拟地址空间中的地址通过地址映射机制映射到物理内存中的实际地址。这种映射关系由内存管理单元(MMU)负责管理和维护。 |
分页机制 | 虚拟地址空间和物理内存之间的映射通常通过分页机制实现。操作系统将虚拟地址空间分成页面,大小通常为4KB或更大,并映射到物理内存的页面帧上。 |
虚拟内存 | 操作系统对虚拟地址空间的抽象,允许进程访问未分配的物理内存部分,通过将不常用的内存页换出到磁盘上的交换空间释放物理内存。 |
内存保护和隔离 | 虚拟空间使得每个进程相互隔离,一个进程无法直接访问另一个进程的虚拟地址空间,通过地址映射和访问权限机制实现。 |
更高的内存利用率 | 多个进程可以共享物理内存,不需要各自拥有独立的物理内存空间。 |
简化编程模型 | 程序员可以使用连续的内存地址编写程序,而不必关心物理内存的具体分布和限制。 |
更好的安全性 | 虚拟空间提供内存隔离和保护,防止进程越界访问其他进程或操作系统内核的内存空间。 |
相关文章:

进程地址空间,零基础最最最详解
目录 建议全文阅读!!! 建议全文阅读!!! 建议全文阅读!!! 一、什么是地址空间 1、概念 2、主要组成部分 3、特点和作用 (1)虚拟化…...
全面解锁:通过JSP和Ajax实现钉钉签到数据展示及部门筛选功能
要在JSP页面中调用钉钉的签到接口,并将签到数据展示在页面上,同时提供部门筛选功能,你可以按照以下步骤操作: 准备钉钉API: 你需要首先获取钉钉开放平台的API凭证(如access_token)。请参考钉钉开…...

LLM应用-prompt提示:让大模型总结生成PPT
参考: https://mp.weixin.qq.com/s/frKOjf4hb6yec8LzSmvQ7A 思路:通过大模型生成markdown内容,通过markdown去生成PPT 技术:Marp(https://marp.app/)这里用的这个工具进行markdown转PPT 1、让大模型生成Ma…...

安全防护软件的必要性:从微软蓝屏事件谈起
最近微软遭遇了的大规模蓝屏事件,让全球很多用户措手不及。这次事件告诉我们,保护我们的电脑和数据,安全防护软件是多么重要。 微软蓝屏事件源于网络安全公司CrowdStrike的技术更新错误,导致全球范围内大量Windows用户系统崩溃&a…...

解开基于大模型的Text2SQL的神秘面纱
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
对象转化成base64-再转回对象
title: 对象转化成base64,再转回对象 date: 2024-08-01 17:54:02 tags: vue3 对象转为base64 /** 将本地对象转为base64 */ function toBase(str) {// 将对象转换为JSON字符串const jsonString JSON.stringify(str);// 使用encodeURIComponent将JSON字符串转换为UTF-8的百分…...
vue运行或打包报错 “‘node --max-old-space-size=10240“‘ 不是内部或外部命令
"node --max-old-space-size10240" 不是内部或外部命令,也不是可运行的程序 解决办法: 在 node_modules 文件夹搜索 "%_prog%" 替换成 %_prog% (即去掉双引号)...

反爬虫限制:有哪些方法可以保护网络爬虫不被限制?
目前,爬虫已经成为互联网数据获取最主流的方式。但为了保证爬虫顺利采集数据,需要防范网站的反爬虫机制,降低IP被限制的风险,这样才能提高爬虫工作的效率。那么,如何防止网络爬虫被限制呢?下面介绍几种有效…...

『 Linux 』基于阻塞队列的生产者消费者模型
文章目录 生产者-消费者模型概述生产者消费者模型的高效性虚假唤醒信号丢失生产者消费者模型的模拟实现参考代码 生产者-消费者模型概述 生产者消费者模型是一种多线程设计模式,常见于解决多个生产者线程和多个消费者线程之间如何安全有效地共享数据; 该模型中存在三种关系,两个…...

vite+typescript项目 报错:找不到模块“./*.vue”或其相应的类型声明——解决方案
declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueComponent }...

连锁企业组网的优化解决方案
对于连锁企业来说,建立高效的网络组网很重要,因为它直接影响到各分支机构之间的信息共享、管理效率和业务流程的顺畅。一个理想的解决方案需要从多个角度入手,以确保网络的稳定性、安全性和可扩展性。 首先,需要选择合适的网络拓扑…...

网络通信---UDP
前两天做了个mplayer项目,今日继续学习 网络内容十分重要!!! 1.OSI七层模型 应用层:要传输的数据信息,如文件传输,电子邮件等(最接近用户,看传输的内容类型到底是什么) …...

从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载
一、反弹SHELL 反弹SHELL(Reverse Shell)是一种网络攻击技术,它允许攻击者在一个被入侵的计算机上执行命令,即使该计算机位于防火墙或NAT(网络地址转换)之后。通常,当攻击者无法直接连接到目标…...
Nginx(1)
文章目录 概述基本的HTTP服务器功能其他 HTTP 服务器功能邮件代理服务器功能TCP/UDP代理服务器功能架构和可扩展性 Nginx特性web服务器负载均衡邮件代理服务器 小结 概述 Nginx是http和反向代理服务器,邮件代理服务器,以及lgor Sysoev最初编写的通用TCP…...

C# 构建观测者模式(或者为订阅者模型)
前言: 观测者模型的基本理念,就是,我有一个公共的事件,定义好他的事件的触发、数据接口。然后,通过增加订阅者(实例)来订阅这个事件的,或者说观察这个事件。如果事件发生࿰…...

MyBatis入门如何使用操作数据库及常见错误(yml配置)
一,什么是MyBatis 是一款优秀的持久层框架,用于简化jdbc的开发 持久层:指的就是持久化操作的层,通常也就是数据访问层(dao),也就是用来操作数据库。 也就是MyBatis是让你更加简单完成程序与数…...

大数据信用查询什么样的平台比较靠谱?
随着互联网的发展和普及,大数据技术逐渐应用到各行各业中,其中之一就是信用查询领域,大数据信用查询平台能够为用户提供全面、准确的大数据信用评估,然而,由于市场上出现了许多不同的大数据信用查询平台,我…...
后端程序员常犯的错误-本地缓存相关bug和技术思考
1 springboot集成本地缓存基本常识: SpringBoot集成本地缓存性能之王Caffeine示例详解 SpringBoot 缓存之 Cacheable介绍 2 线上问题 2.1 发现过程 接口内的rpc调用报错,error级别的日志被监控平台报警。 2.2 故障排查 2.2.1 代码 Cacheable(cach…...
【收集表单数据】
07 【收集表单数据】 在 React 里,HTML 表单元素的工作方式和其他的 DOM 元素有些不同,这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称: <form><label>名字:<input type"text"…...
【前端面试】九、框架
目录 1 Vue2 实现方式 2 Vue3 实现方式 3 React 实现方式 4 Angular 实现方式 1 Vue2 实现方式 Vue2 是目前仍被广泛使用的前端框架之一,其特点包括响应式数据绑定、组件化开发等。 响应式系统:Vue2 使用 Object.defineProperty 来实现数据的响应式。…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...