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

网站建设做微营销网站诚信认证电话销售

网站建设做微营销,网站诚信认证电话销售,青岛网站制作,拼团小程序制作平台谢谢阅读#xff0c;如有错误请大佬留言#xff01;#xff01; 目录 谢谢阅读#xff0c;如有错误请大佬留言#xff01;#xff01; 抛出总结 开始介绍 发现问题 进程地址空间#xff08;虚拟地址#xff09; 页表 物理内存与进程地址空间映射 缺页中断基本… 谢谢阅读如有错误请大佬留言 目录 谢谢阅读如有错误请大佬留言 抛出总结 开始介绍 发现问题 进程地址空间虚拟地址 页表 物理内存与进程地址空间映射 缺页中断基本概念 写时拷贝的原理基于缺页中断 抛出总结 进程何为进程进程 内核数据结构PCBmm_struct页表(MMU) 代码和数据 开始介绍 发现问题 看一份代码 我们知道当子进程出现写实拷贝的时候将共享的数据拷贝一份为子进程独立存储。 让我们运行该代码。 分析结果1、写实拷贝前在写实拷贝前子进程与父进程的flag数据相同数据地址相同无可厚非为写时拷贝前父子进程共享一块数据空间 2、写实拷贝子进程准备修改flag数据先发生写实拷贝-父进程的flag数据拷贝一份然后拷贝的空间给子进程形成独立然后子进程的数据flag改变为222。 3、写实拷贝后我们观察结果子进程与父进程的flag值确实发生了不一样了但是我们惊奇的发现他们的地址居然一模一样同一个地址怎么能保存不一样的值呢 得出结论我们看见的地址其实并不是直接物理内存上面的地址这里我们看见的地址其实是进程进程地址空间虚拟地址。 进程地址空间虚拟地址 我们常见这个表其实是不是内存上面的数据区分布其实是进程空间分布图。它其实一种结构体类型。 让我们讲个小故事更加了解虚拟内存 有一个有钱的富翁他对他的朋友非常的好但是他的朋友们都不知道富翁有其他朋友以为富翁只有他一个朋友富翁有一千万元他对所有朋友说哎呀我的钱都可以借给你但是你不能一下子借太多要经过我的同意才行。富翁所有的朋友都认为自己可以向富翁借款一千万所有他们就先规划了这一千万怎么用。富翁也可以同时放贷给许多朋友。故事先暂停一下。 这里的富翁换成物理内存而朋友们换成进程所有的进程都是独立的其实但是进程都认为一个人独占了整个物理内存资源所以就事先规划了内存使用的分布。划分了并不代表拥有只是划分了而已 这里我们介绍一下inux的进程地址空间struct mm_struct{}  这个结构体就是进程地址空间结构体 这里的每对数据其实就是对应着每个段的开始和结束。 但是单单只有进程地址空间也没办法毕竟所有的进程都认为自己独占了物理内存所以必须加上一些东西--页表查叶表。 页表 查页表也就是在页表上查询数据一个硬件设施这里我们不做过度说明 页表Linux在启动过程中要首先进行内存的初始化那么就一定要首先创建页表。我们知道每个进程都拥有各自的进程空间而每个进程空间又分为内核空间和用户空间。 以32位计算机为例每个进程有4G的虚拟空间其中0-3G属于用户地址空间3G-4G属于内核地址空间内核地址空间是所有进程共享的因此内核地址空间的页表也是所有进程共享的。 Linux内核中用户进程内存页表的管理是通过一个结构体mm_struct来描述的   让我们抽象的描述页表 左边是进程地址空间而右边是物理地址空间页表是承接进程地址空间与物理地址空间的桥梁。 接下来我们将物理内存、页表、进程地址空间建立一个初步的了解 物理内存与进程地址空间映射 举个例子现在我们进程中main函数地址我们需要存在物理内存中先将main虚拟地址传入页表进程空间列 然后在操作系统将该进程main函数真实地址与对应虚拟地址对应。 这样当我们需要访问main时的时候我们的操作系统就会让cpu根据该进程的页表映射关系找到实际的函数代码入口。 小知识点为了让cpu快速在虚拟地址访问到进程入口处我们无论是哪个进程的main函数地址都是一样的。 观察进程pid两个不同进程加载到了内存但是他们的main函数地址居然时相同的发现虽然进程不同当时main函数入口是相同的然后再从与对应的物理内存实际映射找到物理内存上该进程main实际的地址我们的 继续观察 让我们同时运行程序  两份代码同时加载在进程同时为R状态但是他们的main地址居然相同有一次的告诉我们我们取得main函数地址为虚拟地址。这些进程都有自己的PCBmm_struct、页表所有他们访问内存实际其实是通过映射关系访问而不是直接去内存访问数据 各访问各的。 缺页中断基本概念 个人理解缺页中断就是操作系统先暂停对进程通过页表访问物理内存然后操作系统对物理内存进行操作拷贝父进程数据写实拷贝申请动态内存空间然后再让进程操作该空间数据 我们先写份代码 #includeiostream #includeunistd,h int main() {int*pnew int[10];*p10086;*(p1)10087;*(p2)10088;return 0; } 我们向内存申请40各字节的空间。确实现在空间的使用全给我了。但是我并没有立刻使用空间而是过了10秒才使用。如果这个空间一直等待我我写入数据的话大大的浪费了内存的使用效率。所有操作系统会先让急需内存的进程先使用空间当我需要写入的时候再去给我开辟空间。 画图理解 第一步先去申请空间我们在进程地址空间查看是可以开辟40各字节的空间允许开辟然后返回空间地址值这里我们这里申请的是虚拟地址空间然后反馈告诉进程申请空间成功。其实并没有在物理内存中申请。 第二我们进程进入休眠状态如果我们申请的是物理内存那么这10秒我们申请的物理内存就要一直等待被当前进程使用现在我们申请的只是虚拟内存这并不占用物理内存40个字节这样这40个字节空间可以被其他的进程先使用 当10秒过去后我们cpu运行当前进程需要写入数据这时不会立刻写入数据而是先发生中断也叫做缺页中断。操作系统先去物理内存申请40个字节空间然后与该进程建立映射关系然后才将数据写入空间这里写一份可能就开辟4个字节空间还有36字节空间不会开辟未学习地方以后回来补充。 看步骤 休眠结束当我们需要在这块空间写入空间先暂停写入 I操作系统先在物理内存开辟空间。 II将开辟的空间与进程地址空间建立映射关系操作会进行到访问进程 III、最后通过映射关系在物理地址上写入数据 全图 并不是所有的地址都映射在页表上  如果是这样4G物理内存只能跑一个进程甚至一个都跑不了。一页项有物理内存与虚拟内存不止要4g空间。 所有页表也是按需申请页表项的。 写时拷贝的原理基于缺页中断 运行这段代码得到结果我们知道发生了写实拷贝 让我们看看怎么回事 首先这是父进程的进程信息val存放在虚拟地址数据区映射在物理内存上为0x00afcd。 发生创建子进程其实就是将PCB、mm_struct、页表拷贝一份给子进程那么还没写实拷贝前其实所有的数据都是和父进程一模一样的。就是直接拷贝一份父进程数据给子进程。创建子进程时将父进程的 虚拟内存 与 物理内存 映射关系复制到子进程中并将内存设置为只读设置为只读是为了当对内存进行写操作时触发 缺页异常。 他们所有数据都是一样的映射关系也是相同的。 当我们想要改变子进程的val值会发生写实拷贝。发现该数据为在页表项为只读发生缺页中断拷贝该物理空间数据将映射关系改为映射拷贝的物理内存数据。 这里改变子进程页表的val权限不会影响父进程的val权限防止父进程创建多个子进程而导致无法发生缺页中断。 如果父进程发生写实拷贝呢那么就是父进程改变映射关系映射到拷贝的空间上权限为可读可写而原空间可能依旧有多个进程正在使用所以原空间权限不变不受到父进程的影响 谢谢阅读如有错误请大佬留言
http://www.hkea.cn/news/14445197/

相关文章:

  • 网页设计作品欣赏网站网站优化的
  • 网站建设 长沙开福区yy直播
  • 做360手机网站优化快jsp网站开发目的及意义
  • 做海报的话网站东莞建筑业协会官网
  • 网站栏目内链怎么做免费交友软件
  • 杭州做网站小芒建设虚拟网站
  • 网站建设公司知名企业视频门户网站建设方案
  • 谁知道我的世界做行为包的网站啊网站建设html的好处
  • 做网站小图片分类wordpress wp_query 分页
  • 做网站与做网页的区别公司画册设计模板
  • 去哪个网站做农产品推广oppo商城
  • 简述网站建设的长春师范大学
  • 杭州做代发的网站有哪些python可以做网站么
  • 留言网站怎么做设计师资格证
  • 佛山市城乡住房建设局网站网站界面建议
  • 个人能建电商网站吗销售管理系统
  • 哪个网站有建设需要等文件上海正规网站建设
  • 营销型网站建设的价格做一个招聘信息的网站 用什么做网站的软件
  • 做ui的网站有哪些内容找人建网站
  • 公司网站后台密码商标查询小程序
  • 一个人做网站难吗陕西省建设监理协会网站主页
  • 此网站正在建设中遵义高端网站建设
  • 企业网站是怎么建站的wordpress集成paypal
  • 企业营销型网站的内容杭州教育培训网站建设
  • 做外贸网站 怎么收钱wordpress怎么绑定paypal
  • 网站空间租用价格没有网站怎么做seo
  • 推广 网站建设建立网上商城应考虑哪些问题
  • 网站设计制作在哪能看晋城企业网站建设
  • 南阳网站运营招聘信息头像制作器在线制作
  • 网站大学报名官网入口苏州市吴江住房和城乡建设局网站