【lesson13】进程地址空间收尾
文章目录
- 进程地址空间存在的原因
- 原因一
- 原因二
- 原因三
- 重新理解什么是挂起?
进程地址空间存在的原因
原因一
凡是非法访问或者映射,OS都会识别到,并终止该进程。
例子:



我们会发现我们定义的字符串常量只有只读权限,不能被我们更改。
为什么会这样呢?
因为页表具有读写权限,当一块地址只读的时候就会限制写的权限。

所以我们可以明白所有进程崩溃就是进程退出,也就是OS杀掉了该进程。
因为凡是非法访问或者映射,OS都会识别到,并终止该进程。所以有效的保护了物理内存。
地址空间和页表是OS创建并维护的!也意味着凡是想使用地址空间和页表进行映射,也一定要在OS的监管下来进程访问。
上面也便于保护物理内存中的所有合法数据也包括各个进程,以及内核的相关有效数据。
原因二
因为有地址空间和页表的存在,我们的物理内存中,是不是可以对未来的数据进行任意位置的加载?当然!
物理内存的分配和进程的管理两者之间可以做到没有任何关系。
这样内存管理模块VS进程管理模块就可以完成解耦合。
所以我们在C、C++语言上new,malloc空间的时候,本质是在哪里申请的呢?
本质是在虚拟地址空间上申请的。
如果我们申请了物理地址空间,但不立马使用是不是就造成了空间浪费?
是的!
例子说明:
小明向妈妈拿了200块钱准备第二天去玩具城买玩具,妈妈同意了。小明高高兴兴的去睡觉,等待第二天的到来。这时二叔来了,二叔准备借200块钱他有急用,二叔说明天上午就还回来。于是妈妈就同意了,准备先把钱借给二叔,因为二叔有急用,我们现在并用不到这些钱。
从上面我们可以类比:
钱:物理地址
小明:进程1
二叔:进程2
妈妈:OS(操作系统)
本质上因为有地址空间的存在,所以上层申请空间,其实是在进程地址空间上申请,物理内存甚至可以一个字节都不给!!而真正进程准备进行对物理地址空间访问的时候,OS才会执行内存的相关管理算法,帮助该进程申请内存,构建页表映射关系,然后再让你进程内存访问。
上面的过程是由OS自动完成,用户包括进程完全零感知。
例子:
小明向妈妈拿了200块钱准备第二天去玩具城买玩具,妈妈同意了。小明高高兴兴的去睡觉,等待第二天的到来。半夜二叔来了,小明睡着了。二叔向妈妈借200块钱他有急用,二叔说明天上午就还回来。于是妈妈就同意了,先把钱借给二叔,因为二叔有急用,第二天上午二叔早早的就把200块钱还回来,小明还没睡醒。等小明睡醒了妈妈给了200块钱让小明自己去买。而二叔借钱的事情小明完成不知情。
延迟分配的策略,提高了整机的效率,内存的使用率几乎是百分百。
原因三
因为在物理内存中理论上可以任意位置的加载进程内容和数据,所以物理内存中几乎所有的数据和代码在物理内存中都是乱序的。
但是因为页表的存在,它可以将地址空间上的虚拟地址和物理地址进行映射,那么在进程的视角中所有的内存分布都是有序的!
所以我们可以得出结论:地址空间和页表的存在可以将内存分布有序化!
进程地址空间是OS给进程画的大饼,那么为什么要有进程地址空间?
进程要访问物理内存中的数据和代码,可能目前并没有在物理内存中,同样的也可以让不同的进程映射到不同的而物理内存中。这样子很容易做到进程独立性的实现!
所以进程的独立性可以通过地址空间+页表的方式实现。
因为有地址空间的存在,每个进程都认为自己拥有4GB空间,并且各个区域是有序的,进而可以通过页表映射到不同的区域,来实现进程的独立性。
每个进程并不需要知道彼此之间的存在。
重新理解什么是挂起?
加载的本质就是创建进程,那么是必须非得把所有的程序代码和数据加载到内存中,并创建内核数据结构建立映射关系?并不是的。
==在最极端的情况下,甚至只有内核数据结构被创建了出来。==也就是新建状态,理论上可以实现队程序的分批加载!
既然可以分批加载也可以分批换出,甚至进程短时间不会再被执行,比如阻塞了!进程的数据和代码就会被换出。
页表映射的时候,不仅仅可以映射到物理内存,磁盘中的位置也可以映射。
相关文章:
【lesson13】进程地址空间收尾
文章目录 进程地址空间存在的原因原因一原因二原因三 重新理解什么是挂起? 进程地址空间存在的原因 原因一 凡是非法访问或者映射,OS都会识别到,并终止该进程。 例子: 我们会发现我们定义的字符串常量只有只读权限,…...
Microsoft Edge中使用开源的ChatGPT
一、双击打开浏览器 找到:扩展,打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页,使用GPT 六、使用举例 提问 GPT回复...
【C语言精髓之指针】结构体指针(->与.两个运算符的区别)
/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 通信与信息专业大二在读 * copyright 2023.10* COPYRIGHT 原创技术笔记:转载需获得博主本人同意,且需标明转载源* language C/C* IDE Base on Mic…...
SpringCloud 微服务全栈体系(一)
第一章 认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 一、单体架构 单体架构:将业务的所有功能集中在一个项目中开发ÿ…...
Echarts自定义柱状图
目录 效果图 echarts官网找相似图 将柱状图引入html页面中 自定义柱状图 将不需要的属性删除 编辑 修改图形大小 grid 不显示x轴 编辑 不显示y轴线和相关刻度 编辑 y轴文字的颜色设置为自己想要的颜色 修改第一组柱子相关样式(条状) …...
LuatOS-SOC接口文档(air780E)-- ioqueue - io序列操作
ioqueue.init(hwtimer_id,cmd_cnt,repeat_cnt) 初始化一个io操作队列 参数 传入值类型 解释 int 硬件定时器id,默认用0,根据实际MCU确定,air105为0~5,与pwm共用,同一个通道号不能同时为pwm和ioqueue int 一个完…...
探讨Socks5代理技术的原理及其在不同领域的应用
Socks5代理:实现网络连接的智能之选 作为一种网络代理协议,Socks5代理技术通过转发网络数据包,实现了客户端和服务器之间的代理传输。其独特的特性在跨界电商、爬虫数据分析、企业出海和游戏体验等领域发挥着关键作用,为用户提供…...
sql注入的基本手法
目的 通过sqk注入获取数据内容 掌握sql注入基本手法 我们这里使用 1.联合注入 就是利用union select 语句 两条语句 同时执行 实现跨库跨表查询 条件 两条select语句查询结果具有相同列数 对应列数数据类型相同 简单的步骤 1.目标分析 ?id…...
8.1 C++ 标准输入输出流
C/C语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。…...
hive往es映射表写数据报错
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转…...
2023年【广东省安全员A证第四批(主要负责人)】考试试卷及广东省安全员A证第四批(主要负责人)模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员A证第四批(主要负责人)考试试卷根据新广东省安全员A证第四批(主要负责人)考试大纲要求,安全生产模拟考试一点通将广东省安全员A证第四批&#x…...
YOLOv5算法改进(15)— 如何去更换Neck网络(包括代码+添加步骤+网络结构图)
前言:Hello大家好,我是小哥谈。在学习完了如何去更换主干网络之后,接着就让我们通过案例的方式去学习下如何去更换Neck网络。本篇文章的特色就是比较浅显易懂,附加了很多的网络结构图,通过结构图的形式向大家娓娓道来,希望大家学习之后能够有所收获!🌈 前期回顾: YO…...
用Nginx搭建一个具备缓存功能的反向代理服务
在同一台服务器上,使用nginx提供服务,然后使用openresty提供反向代理服务。 参考《Ubuntu 20.04使用源码安装nginx 1.14.0》安装nginx。 参考《用Nginx搭建一个可用的静态资源Web服务器》搭建静态资源Web服务器,但是/nginx/conf/nginx.conf里…...
YOLOv5改进实战 | 更换主干网络Backbone(三)之轻量化模型Shufflenetv2
前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…...
【Markdown】 Markdown 操作备忘录
To Do List 显示目前todo list 的状态 getLogger() 单例类, 通过引入模块,获取单例日志对象 结果可视化调研 模型结果保存及测试 - [ ] getLogger() 单例类, 通过引入模块,获取单例日志对象 - [ ] 结果可视化调研 - [x] 模型结果…...
【自动化测试】基于Selenium + Python的web自动化框架
一、什么是Selenium? Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: 1、Selenium IDE&…...
zookeeper连接客户端操作数据时报错Socket is not connected
文章目录 一、报错信息二、问题描述三、原因分析:四、解决方案: 一、报错信息 DEBUG org.apache.zookeeper.ClientCnxnSocketNIO - Ignoring exception during shutdown input java.net.SocketException: Socket is not connectedat sun.nio.ch.Net.tra…...
mysql select语句中from 之后跟查询语句
概念:将from后面的查询语句放在FROM的后面,则查询到的结果,就会被当成一个“表”; 这里有一个特别要注意的地方,放在FROM后面的子查询,必须要加别名。 select dui.id,dui.party_service_id mes_id, dui.party_id,dui.…...
Yolov8小目标检测(26):多尺度空洞注意力(MSDA) | 中科院一区顶刊 DilateFormer 2023.9
💡💡💡本文独家改进:多尺度空洞注意力(MSDA)采用多头的设计,在不同的头部使用不同的空洞率执行滑动窗口膨胀注意力(SWDA),全网独家首发,创新力度十足,适合科研 多尺度空洞注意力(MSDA) | 亲测在红外弱小目标检测涨点,map@0.5 从0.755提升至0.784 💡�…...
NLP:从头开始的文本矢量化方法
一、说明 NLP 项目使用文本,但机器学习算法不能使用文本,除非将其转换为数字表示。这种表示通常称为向量,它可以应用于文本的任何合理单位:单个标记、n-gram、句子、段落,甚至整个文档。 在整个语料库的统计 NLP 中&am…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
