《深入浅出计算机组成原理》学习笔记 Day4

news/2023/5/28 8:39:33

程序装载与虚拟内存

    • 1. 虚拟内存
    • 2. 内存分段
    • 3. 内存分页
    • 4. 总结
    • 参考

1. 虚拟内存

在链接器把多个文件合并成一个最终可执行文件之后,当要运行这些可执行文件的时候,其实是通过一个装载器来解析 ELF 或者 PE 格式的可执行文件。

装载器会把对应的指令和数据加载到内存里面来,让 CPU 去执行。

一个可行的装载器需要满足两个要求:

  1. 可执行程序加载后占用的内存空间应当连续。执行指令的时候,程序计数器是顺序地一条一条指令执行下去。
  2. 能够同时加载多个程序,并且不能让程序自己规定在内存中加载的位置。现在的计算机会同时运行很多个程序,一个程序想要的内存地址可能已经被其他加载了的程序占用了。

虚拟内存就是一个很好的方法。
我们可以在内存里面找到一段连续的内存空间,然后分配给装载的程序,
接下来把这段连续的内存空间地址和程序指定的内存地址做一个映射。

其中,程序指定的内存地址叫做虚拟内存地址(Virtual Memory Address),实际在内存硬件的空间地址叫做物理内存地址(Physical Memory Address)。

对于每个程序来说,它看到的都是同样的内存地址——虚拟内存地址。我们只需要维护一个虚拟内存到物理内存的映射表,这样实际程序执行的时候,会通过虚拟内存地址找到对应的物理内存地址,然后执行。

2. 内存分段

这种找出一段连续的物理内存和虚拟内存地址进行映射的方法,叫分段(Segmentation)。段就是指系统分配出来的那个连续的内存空间。

有了分段,程序本省不用关心具体的物理内存地址的问题。但分段也有一个不足——内存碎片(Memory Fragmentation)。说白了,就是内存中连续的、足够大的空间少,都是一个隔一个的空间。

可以通过内存交换(Memory Swapping)来解决。A程序需要一个很大内存空间,此时B程序在运行,B的物理内存空间大小 + 与B相邻的最大的空闲内存正好能满足A。于是我们就将B的内存写到硬盘上,然后再另寻一块满足B的内存空间,将从硬盘读到内存中的这块空间。于是A、B都能得到满足。

Linux操作系统就是通过 swap 硬盘分区来实现内存交换。

3. 内存分页

既然问题出在内存碎片和内存交换的空间太大上,那么解决问题的办法就是,少出现一些内存碎片。另外,当需要进行内存交换的时候,让需要交换写入或者从磁盘装载的数据更少一点,这样就可以解决这个问题。这个办法,在现在计算机的内存管理里面,就叫作内存分页(Paging)。

分页是把整个物理内存空间切成一段段固定尺寸的大小。对应的程序所需要占用的虚拟内存空间,也会同样切成一段段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间,称为(Page)。

从虚拟内存到物理内存的映射,不再是拿整段连续的内存的物理地址,而是按照一个一个页来的。页的尺寸一般远远小于整个程序的大小。在 Linux 下,通常只设置成 4KB。

由于内存空间都是预先划分好的,也就没有了不能使用的碎片,而只有被释放出来的很多 4KB 的页。即使内存空间不够,需要让现有的、正在运行的其他程序,通过内存交换释放出一些内存的页出来,一次性写入磁盘的也只有少数的一个页或者几个页,不会花太多时间,让整个机器被内存交换的过程给卡住。

更进一步地,分页的方式使得我们在加载程序的时候,不再需要一次性都把程序加载到物理内存中。完全可以在进行虚拟内存和物理内存的页之间的映射之后,并不真的把页加载到物理内存里,而是只在程序运行中,需要用到对应虚拟内存页里面的指令和数据时,再加载到物理内存里面去。

当要读取特定的页,却发现数据并没有加载到物理内存里的时候,就会触发一个来自于 CPU 的缺页错误(Page Fault)。操作系统会捕捉到这个错误,然后将对应的页,从存放在硬盘上的虚拟内存里读取出来,加载到物理内存里。这种方式,使得可以运行那些远大于我们实际物理内存的程序。同时,这样一来,任何程序都不需要一次性加载完所有指令和数据,只需要加载当前需要用到就行了。这种方法也称为写时复制(Copy On Write)。

4. 总结

通过虚拟内存、内存交换和内存分页这三个技术的组合,最终得到了一个让程序不再需要考虑实际的物理内存地址、大小和当前分配空间的解决方案。

这些技术和方法,对于我们程序的编写、编译和链接过程都是透明的。任何一个程序,只需要把内存当成是一块完整且连续的空间来使用。

这也是在计算机的软硬件开发中常用的一种方法——加入一个间接层。

参考

极客时间《深入浅出计算机组成原理》:http://gk.link/a/11UMi

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

全站仪双棱镜测量坐标精度

先有全站仪测量单个点坐标精度:https://www.cnblogs.com/pylblog/p/10464467.html 原理图: 假设d2、d1为已知值,求P点坐标精度 Ep Np2 HD * cos(A) Np Ep2 HD * sin(A) Zp Zp2 - VD 参考公式: p2坐标由上面文件…

次坐标从0开始_全站仪测量使用方法及坐标计算教程

全站仪常规注意事项:在使用本仪器之前, 要把各种注意事项烂熟于心,务必检查并确认该仪器各项功能运行正常。1、不要将仪器直接对准太阳将仪器直接对准太阳会严重伤害眼睛。若仪器的物镜直接对准太阳, 也会损坏仪器。2、将仪器架设到脚架上在架…

各种好看的cosplay小姐姐热门图片,统统爬取收藏

边学习,边创造是一件开心的事情,因为你会清楚的认识到自己的状态,以及那充满内心的成就感,因此从写爬虫开始学习python是一个简单粗暴的提升路线,不知不觉了解很多东西 这里以半次元为例对爬虫整体流程以及部分细节进…

小猪的Python学习之旅 —— 12.Python并发之queue模块

一句话概括本文: 本节对queue.py模块进行了详细的讲解,写了一个实战例子: 多线程抓取半次元Cos频道的所有今日热门图片,最后分析了 一波模块的源码,了解他的实现套路。 大蕾姆镇楼: 引言: …

半次元热门图片,各种好看的cosplay小姐姐,统统爬取收藏

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 以下文章来源于云社区,作者 py3study 转载地址 https://blog.csdn.net/fei347795790?t1 前言 边学习,边创造是一件开心的事…

半次元收藏夹爬虫(残疾版,不喜勿喷)

观察了一天的半次元网站的动态请求,并没有什么实质进展(懵逼) 所以只能制作出一个半自动化的程序,至少可以加快获取图片的速度 首先点击我的收藏,这样就可以收到包含收藏夹信息的返回(感觉描述有点怪怪的&a…

Python爬虫入门教程 12-100 半次元COS图爬取

写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊,于是乎&a…

Python爬虫入门教程【11】:半次元COS图爬取

半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊&am…

Python爬虫入门【11】:半次元COS图爬取

半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊&am…

【Python】半次元COS图爬取

半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊&am…

Python爬虫入门教程: 半次元COS图爬取

半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊&…

大学物理第四章笔记——高等农林院校基础课程教程系列

第四章 静电场 文章目录第四章 静电场第一节 电荷 库仑定律一.电荷及其性质二.库仑定律第二节 电场 电场强度一.电场二.电场强度三.场强叠加原理四.场强叠加原理的应用例题1例题2例题3例题4例题5![在这里插入图片描述](https://img-blog.csdnimg.cn/20210514181110350.png#pic_…

大学物理第一章 质点运动学详解

参考系,坐标系,物理模型 一.运动的相对性和绝对性 一般来说,运动是绝对的,任何物体都在运动着,但运动也是相对的,都是在一定环境下和特定条件下运动的 二.参考系 运动是绝对的,但运动的描述却…

Android 深入系统完全讲解(27)

讲完了这块,我们来说下相机相关的,再说之前一定记得,先要有框架思维,这点一直是我 强调的。 相机是什么,硬件采集数据上来,解析完成,上层绘制,在绘制的时候,同步可以做特…

【自学Docker】Docker wait命令

Docker wait命令 大纲 docker wait教程 docker wait 命令可以用于阻塞一个或多个 Docker容器 直到容器停止,然后打印退出代码。 docker wait命令后面的 CONTAINER 可以是容器Id,或者是容器名。 docker wait语法 haicoder(www.haicoder.net)# docker…

mate40不能用鸿蒙系统吗,数码产品:华为mate40是鸿蒙系统吗 使用的是什么系统...

最近小编发现大家对于华为mate40是鸿蒙系统吗 使用的是什么系统都很感兴趣,那么小编也是特地整理了一些跟华为mate40是鸿蒙系统吗 使用的是什么系统相关的知识,那么今天就来分享给大家关于华为mate40是鸿蒙系统吗 使用的是什么系统的知识吧。华为mate40没…

服务器电源管理系统SPM 价格,PROTONEX – EOD POWER MANAGEMENT KIT, SPM-622电源管理套件...

The EOD Power Management Kit (EOD-PMK) provides everything the EOD technician needs to recharge his batteries and power his kit from any source (solar, vehicle, AC Mains, scavenged energy). Built around the industry-leading SPM-622 intelligent power manag

PHP中的heredoc和nowdoc的区别是什么

2019独角兽企业重金招聘Python工程师标准>>> 一、heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义。其结构中的变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。…