Linux 进程地址空间

文章目录

  • 进程地址空间
  • 进程地址空间结构
  • 页表
  • 虚拟内存
  • 写时拷贝

进程地址空间

进程地址空间难以定义,因为它更像是一个中间件。

程序从磁盘中加载到内存,程序的执行需要硬件资源,所以每个程序启动时会创建至少一条进程,进程作为组织资源的数据结构,记录了本进程各方面硬件资源的占用情况,其中就包括内存的占用情况。每个进程都有一个进程地址空间,进程地址空间不是实际的一个物理内存可以理解为进程地址空间里全是指针/地址,进程地址空间里的地址通过一个名为页表的结构与实际存储数据的物理内存建立映射关系。 至于为什么这样设计,以及上述中一些名词的解释在后文中均有提到 。
在这里插入图片描述

进程地址空间结构

在这里插入图片描述

  1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
  2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表。
  3. 数据段/静态区 :存放全局变量静态数据。程序结束后由系统释放。
  4. 代码段:存放函数体、类成员函数和全局函数 的二进制代码 、 存放常量。

页表

  1. 页表的结构: 一个键值对形式的表,类似于一些数据库那样的KEY=VALUE结构的表,一遍记录进程地址空间的地址,另一边记录与该地址实际对应的物理内存空间。

  2. 在上述功能的基础上,页表还记录了每个进程地址的访问权限(这里的权限指读/写等权限),通过这些权限属性的记录,一方面实现了各种数据的属性,另一方保护了物理内存不被非法访问。

  3. 页表与进程地址空间都是每个进程独自有一份,进程被启动时,先创建PCB的实例task_struct, 再生成进程地址空间与页表 (进程地址空间是task_struct结构体的一个成员)

  4. 页表和虚拟地址空间都由OS(操作系统管理),所以虚拟地址访问的物理存储的数据是否超出权限由OS结合页表和进程地址空间来判断,所以平时写代码时的数组越界会报警,数组越界访问本质是一种访问物理内存权限越界的问题,会被OS拦截。

  5. 页表不只可以将进程地址空间中的地址与物理内存建立映射关系,还可以将进程地址空间与磁盘(外存)中的存储数据建立映射关系

  6. 页表和进程地址空间都是由OS创建、管理

虚拟内存

虚拟内存是一种计算机内存管理技术。以上进程地址空间通过页表与内存或外存建立映射关系的结构,是Linux虚拟内存的实现 。

虚拟内存技术的优点总结:

  1. 物理内存/磁盘外存是一个硬件,本身是不具有识别功能的。设想,如果没有虚拟内存技术,访问数组越界部分的数据数据就不会被拦截,那么如果发生错误或有人恶意攻击,整个主机上的所有程序或进程都可能被非法访问/修改。
  2. 从进程视角来看,它只能看到自己,或者说它认为自己占据所有的内存资源,所以它可以自由的动态开辟地址连续的空间(这里的地址连续只是在进程看来,实际物理空间不一定连续),再将开辟的空间映射到物理内存中。
  3. 支持了写时拷贝功能
  4. 扩大可用内存空间:虚拟内存可以将磁盘空间作为扩展内存使用,从而扩大了可用内存空间。这样,即使物理内存不足,也可以运行更多的程序。(因为页表可以映射外存)
  5. 提高程序运行效:虚拟内存可以将不常用的内存数据暂时存储到磁盘上,从而释放物理内存空间(这里说的磁盘就是C盘,所以C盘太满会卡,不过当今内存都很大,即使C盘满一点也不会有太大的影响),让更常用的数据可以被加载到内存中,提高程序的运行效率。(由于页表的存在,在进程视角,内存中分配的空间是有序的)(有些分配了内存也不会立刻使用,虚拟内存的存在就提高了实际内存的使用效率)

缺点:
物理结构上不是连续的,是随机的,所以CPU在内存中读取的时候,目标数据附近的数据不一定是下一个目标的数据,需要多次重新读取内存中的目标数据,操作损害高,会导致性能下降。

写时拷贝

在这里插入图片描述

写时拷贝(Copy-on-write,简称COW)是一种内存管理技术,它允许多个进程共享同一块内存,但只有在进程试图修改该内存时才会进行实际的拷贝操作。这种技术可以减少内存的使用量,提高系统的性能。

在写时拷贝的实现中,当一个进程试图修改共享内存中的某个数据时,操作系统会先检查该内存块是否已经被其他进程共享。如果是,则操作系统会为该进程分配一块新的内存,将原始内存块中需要修改的数据拷贝到新的内存块中,然后让该进程修改新的内存块。其他进程仍然共享原始内存块,直到它们也试图修改该内存块中的数据。

一些碎碎念:

堆是堆,栈是栈,堆栈是堆。

程序奔溃就是进程退出,操作系统结束了进程。

本文以前写过,现在重写。

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

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

相关文章

HarmonyOS 修改App的默认加载的界面(ArkTS版本)(十七)

根据鸿蒙系统APP的应用生命周期结构(鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期)来看。 1、首先在roject/entry/src/main/ets/entryability/EntryAbility.ts文件中找到UI加载函数:onWindowStageCreate(…){…},然后找到windo…

力扣100 相同的数(两种解法)

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true 示例 2&…

【数据分享】11个城市的出租车(网约车)数据(免费获取)

出租车(网约车)GPS数据是我们最常使用的交通大数据之一,但是出租车(网约车)GPS数据没有公开的获取渠道,有些学者可能能通过与相关机构合作拿到数据,但是对于绝大多数普通人是没有这个机会的&…

【理解ARM架构】中断处理 | CPU模式

🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言:你只管努力,剩下的交给时间! 目录 🍜中断🍨GPIO中断代码实现 🍜CPU🍨CONTROL…

2024王道考研计算机组成原理——存储系统

微信打开的时候会有一个人站在地球上,这个过程就是把程序从辅存转移到主存,数据只有调入主存当中才可以被CPU访问 cache:主存速度还是慢,为了进一步缓解CPU和主存之间的速度矛盾 在微信打视频聊天的时候,在这一段比较…

弘扬中华文化 感受戏曲魅力——安徽演艺小分队赴和田交流演出

为进一步弘扬中华优秀传统文化,促进皖和两地交往交流交融,12月2日,安徽省演艺小分队走进和田新夜市登台演出,黄梅戏、独唱、民乐演奏、杂技等丰富多样的表演,为观众们送上了一场文化盛宴。 安徽演艺小分队赴和田交流演…

一篇文章带你详细了解C++智能指针

一篇文章带你详细了解C智能指针 为什么要有智能指针内存泄漏1.什么是内存泄漏,它的危害是什么2.内存泄漏的分类3.如何避免内存泄漏 智能指针的使用及原理1.RAII2.智能指针的原理3.auto_ptr4.unique_ptr5.shared_ptr6.weak_ptr 为什么要有智能指针 C引入智能指针的主…

WindowsServer服务器系列:定时备份 MySQL

一、编写脚本 echo 取日期、时间变量值 set yy%date:~0,4% set mm%date:~5,2% set dd%date:~8,2% if /i %time:~0,2% lss 10 set hh0%time:~1,1% if /i %time:~0,2% geq 10 set hh%time:~0,2% set mn%time:~3,2% set ss%time:~6,2% set date%yy%%mm%%dd% set time%hh%%mn%%ss…

Vue2中v-html引发的安全问题

前言:v-html指令 1.作用:向指定节点中渲染包含html结构的内容。 2.与插值语法的区别: (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。 (2).v-html可以识别html结构。 3.严重注意:v-html有安全性问题&#xff0…

IT外包的三种模式

在当今数字化时代,企业为了更好地专注于核心业务,通常选择将IT部门或项目外包给专业的IT外包服务公司。IT外包作为一种灵活的业务模式,不仅能够提高效率,还能够降低企业的运营成本。IT外包包含着不同的业务模式,其中有…

外包干了2个多月,技术明显有退步了。。。。。

先说一下自己的情况,本科生,19年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

VMware 虚拟机 电脑重启后 NAT 模式连不上网络问题修复

问题描述: 昨天 VMware 安装centos7虚拟机,网络模式配置的是NAT模式,配置好后,当时能连上外网,今天电脑重启后,发现连不上外网了 检查下各个配置,都没变动,突然就连不上了 网上查了…

搭梯子之后电脑连接WIFI打不开浏览器网页:远程计算机或者设备不接受连接

问题描述: 打不开网页,但是能正常使用微信等app windows网络诊断: 远程计算机或者设备不接受连接 解决办法: 电脑搜索【internet选项】 进入连接,点击局域网设置,将里面的代理服务器选项关掉就可以正常打开…

Diary21-全网最全的HTML讲解(含可用代码)

HTML学习 1.网页基本信息 DOCTYPE:是一种规范,告诉浏览器我们要使用什么规范 head标签代表网页头部 title标签代表网页标题 body标签代表网页主体 下面是创建的第一个网页的源代码(在IDEA创建一个html文件会直接生成,我这个其实只改了网页标题) &l…

阿里云实时数据仓库HologresFlink

1. 实时数仓Hologres特点 专注实时场景:数据实时写入、实时更新,写入即可见,与Flink原生集成,支持高吞吐、低延时、有模型的实时数仓开发,满足业务洞察实时性需求。亚秒级交互式分析:支持海量数据亚秒级交…

玩弄GPTs:人人都会的Prompt模板

角色定义 分享一个自用的Prompt模板,只要学会了这个模板,当遇到新场景时,直接套用就行。 简单总结: 角色定义(Master)背景(Background)规则(rule)技能(skill)限制(constaints)工作流(workflow) 经过实际测试发现,这…

从零开始学习 JavaScript APl(七):实例解析关于京东案例头部案例和放大镜效果!

大家好关于JS APl 知识点已经全部总结了,第七部部分全部都是案例部分呢!!(素材的可以去百度网盘去下载!!!) 目录 前言 一、个人实战文档 放大镜效果 思路分析: 关于其它…

指针(三)

函数指针 定义:整型指针是指向整形的指针,数组指针式指向数组的指针,其实函数指针就是指向函数的指针。 函数指针基础: ()优先级要高于*;一个变量除去了变量名,便是它的变量类型;一个指针变量…

两种伦敦银缺口 如何为我们的交易服务?

我们做伦敦银也会碰到缺口,有的朋友会说伦敦银不是24小时交易的品种吗?怎么有缺口呢?虽说伦敦银是24小时交易的品种,但是在北京时间的凌晨也会停止交易一段时间,这是平台结算时间。在亚盘早段伦敦银重新开盘之后&#…

Android的前台服务

概述 前台服务是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。前台服务必须为状态栏提供通知,将其放在运行中的标题下方。这意味着除非将服务停止或从前台移除,否则不能清除该通知。 在 Android 8.0&…