程序的执行原理(下)

news2024/9/21 16:24:46

文章目录

  • 系统的硬件组成
    • 总线
    • I/0设备
    • 主存
    • 处理器
      • 程序计数器(PC)
        • 加载:
        • 存储:
        • 操作:
        • 跳转:
  • 运行 hello 程序
    • 读入寄存器,再把它存放到内存
    • 从磁盘加载程序到主存
    • 处理器执行程序并显示
  • 参考

系统的硬件组成

总线

贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)

字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在的大多数机器字长要么是 4 个字节(32位),要么是8个字节(64 位)。

I/0设备

I/O(输入/输出)设备是系统与外部世界的联系通道。
示例系统包括四个 I/0设备:

作为用户输人的键盘和鼠标,

作为用户输出的显示器,

以及用于长期存储数据和程序的磁盘驱动器(简单地说就是磁盘)。

最开始,可执行程序 hello 就存放在磁盘上。每个 I/0 设备都通过一个控制器或适配器与I/0 总线相连。

控制器和适配器之间的区别主要在于它们的封装方式。控制器是I /O 设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。

而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是在I/O 总线和I/0 设备之间传递信息。

在这里插入图片描述

主存

主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。

从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。

从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始的。

一般来说,组成程序的每条机器指令都由不同数量的字节构成。

与C程序变量相对应的数据项的大小是根据类型变化的。

比如,在运行 Linux 的 x86-64 机器上,short 类型的数据需要 2个字节,int 和 float 类型需要 4 个字节,而 long和 double类型需要 8个字节。

处理器

中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。

程序计数器(PC)

处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。

在任何时刻,PC 都指向主存中的某条机器语言指令(即含有该条指令的地址)。

从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令再更新程序计数器,使其指向下一条指令。

处理器看上去是按照一个非常简单的指令执行模型来操作的,这个模型是由指令集架构决定的。在这个模型中,指令按照严格的顺序执行,而执行一条指令包含执行一系列的步骤。处理器从程序计数器指向的内存处读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新 PC,使其指向下一条指令。

而这条指令并不一定和在内存中刚刚执行的指令相邻。这样的简单操作并不多,它们围绕着主存、寄存器文件(register file)和算术/逻辑单元(ALU)进行。

寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。

ALU 计算新的数据和地址值。下面是一些简单操作的例子CPU 在指令的要求下可能会执行这些操作。

加载:

从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容

存储:

从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。

操作:

把两个寄存器的内容复制到 ALU,ALU 对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。

跳转:

从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC 中原来的值。

处理器看上去是它的指令集架构的简单实现,但是实际上现代处理器使用了非常复杂的机制来加速程序的执行。

因此,我们将处理器的指令集架构处理器的微体系结构区分开来:

指令集架构描述的是每条机器代码指令的效果;

而微体系结构描述的是处理器实际上是如何实现的。

运行 hello 程序

前面简单描述了系统的硬件组成和操作,现在开始介绍当我们运行示例程序时到底发生了些什么。

读入寄存器,再把它存放到内存

初始时,shell 程序执行它的指令,等待我们输人一个命令。当我们在键盘上输入字符串“./hello”后,shell程序将字符逐一读入寄存器,再把它存放到内存中,如图 1-5 所示。
在这里插入图片描述

当我们在键盘上敲回车键时,shell 程序就知道我们已经结束了命令的输人。

从磁盘加载程序到主存

然后shell执行一系列指令来加载可执行的 hello 文件,这些指令将 hello 目标文件中的代码和数据从磁盘复制到主存。数据包括最终会被输出的字符串“hello,world\n”,利用直接存储器存取技术,数据可以不通过处理器而直接从磁盘到达主存。

这个步骤如图 1-6 所示。
在这里插入图片描述

处理器执行程序并显示

一旦目标文件 hello中的代码和数据被加载到主存,处理器就开始执行 hello程序的 main 程序中的机器语言指令。这些指令将“hello,worldn”字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。这个步骤如图1-7所示。

在这里插入图片描述

参考

《深入理解计算机系统》

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

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

相关文章

Java爬虫框架下代理使用中的TCP连接池问题及解决方案

引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…

连线鑫云:企业级存储设备制造商!

我们在今年的双11专场直播中,有幸邀请到了鑫云存储的嘉宾与我们连线,为大家作了一场精彩的分享。 这里,首先感谢鑫云存储对水经注的大力支持! 现在,我们将嘉宾分享的内容进行简单整理,并以图文的方式与大家…

如何隐藏自己的代码(很酷)

1.引入 幻想当我们成为一名优秀的程序员,有着各大公司想要买我们的代码,但我们并不想要让他们知道我们代码的实现,毕竟一复制便可以解决,这里我们希望有一种方法可以把我们的核心代码给隐藏掉,那我们又应该怎么去实现呢…

计算3个点的6种分布在平面上的占比

假设平面的尺寸是6*6,用11的方式构造2,在用21的方式构造3 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一个点x,11的操作吧平面分成了3部分2a1,2a…

【鸿蒙应用ArkTS开发系列】- 云开发入门实战二 实现城市多级联动Demo(上)

目录 概述 云数据库开发 一、创建云数据库的对象类型。 二、预置数据(为对象类型添加数据条目)。 三、部署云数据库 云函数实现业务逻辑 一、创建云函数 二、云函数目录讲解 三、创建resources目录 四、获取云端凭据 五、导出之前创建的元数据…

笔记58:Encoder-Decoder 架构

本地笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章:动手学深度学习~现代循环神经网络 a a a a a a a a a

我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine:使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。cv2.warpPerspective:使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等…

单链表相关面试题--3.链表的中间节点

3.链表的中间节点 876. 链表的中间结点 - 力扣(LeetCode) /* 解题思路: 通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置 */ typ…

【点云上采样】最近邻插值上采样算法

文章目录 声明简介代码 声明 本帖更新中 简介 点云最近邻插值上采样算法是一种常见的点云处理方法,用于将稀疏的点云数据进行上采样,增加点云的密度和细节。该算法基于最近邻的原理,在已有的点云数据中找到最近邻的点,并根据其…

psutil - Python中用于进程和系统监控的跨平台库

1、简介 psutil(进程和系统实用程序)是一个跨平台库,用于检索 Python 中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。 它主要用于系统监控、分析和限制进程资源以及管理正在运行的进程。 它实现…

Positive证书:最便宜的SSL证书

在当今数字化的时代,网上交易和信息传输已经成为我们生活中不可或缺的一部分。然而,随着网络犯罪的增加,确保在线信息的安全性变得尤为重要。Positive证书作为一种经济实惠的数字证书,在提供有效安全性的同时,为用户提…

数字IC基础:有符号数和无符号数加、减法的Verilog设计

相关阅读 数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm1001.2014.3001.5482 本文是对数字IC基础:有符号数和无符号数的加减运算一文中的谈到的有符号数加减法的算法进行Verilog实现,有关算法细节请阅读原文&#xff0…

设计一个实用好看的餐边柜或者酒柜需要知道这5点。福州中宅装饰,福州装修

餐厅旁边的餐边柜和酒柜是提升餐厅功能性和美观度的重要元素。它们不仅可以提供额外的储物空间,还可以展示精美的餐具和收纳酒品。下面为大家分享一些布置餐边柜和酒柜的灵感,让你的餐厅更加时尚和实用。 1. 餐边柜与酒柜的组合 将餐边柜和酒柜组合在一…

三十分钟学会Linux的基本操作

GNU/Linux GNU项目是由Richard Stallman发起的自由软件运动,旨在创建一个完全自由的操作系统。虽然GNU项目已经开发了大量的系统组件和工具,但它一直缺少一个完整的操作系统内核。在这时Linus Torvalds开发了Linux内核,并将其发布为自由软件…

skywalking中gateway的拓扑图没有出现

背景: 刚开始的时候gateway没有出现,后来百度说添加插件的jar包, apm-spring-cloud-gateway-2.1.x-plugin-8.15.0.jar apm-spring-webflux-5.x-plugin-8.15.0.jar 然后解决了gateway节点出来了, 但是:拓扑图却是User指…

2023年DevOps国际峰会暨BizDevOps企业峰会(DOIS北京站)-核心PPT资料下载

一、峰会简介 在数字化转型的大背景下,企业选择实践 DevOps 来提升 IT 效能成为常态,BizDevOps 作为企业自身数字化变革的重要主题之一,需要全行业共同努力促进繁荣和发展。从 DevOps 到 BizDevOps,业务与技术如何融合&#xff1…

CRMEB Pro版 v3.0详情预告(附件crmebPro功能思维导图)

首先,先来看看本次CRMEB Pro版 v3.0 的整体升级框架 翩若惊鸿 CRMEB Pro版 从设计之初,就十分重视用户体验,在保证强大功能的同时,本次也为大家带来了领先于业界的UI 3.0,一目惊鸿。 一、风格升级 1、圆角风格 商城…

【论文阅读笔记】CNN-Transformer for Microseismic Signal Classification

【论文阅读笔记】CNN-Transformer for Microseismic Signal Classification 摘要 这篇论文提出了一种名为CCViT的轻量级网络模型,用于快速准确地识别地下传感器采集的煤矿和岩石裂缝的微震信号中由煤矿爆破产生的大量爆破振动信号。这些微震信号与爆破振动信号的波…

鸿蒙原生应用/元服务开发-AGC分发如何配置版本信息(下)

12.根据《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,自2023年9月初起,在中国大陆地区提供互联网信息服务的APP开发者,需要依法履行APP备案手续,并通过APP分发平台的备案信息核验。 对于2023年9月7日后在AGC新上…

window文件夹下python脚本实现批量删除无法预览的图片

你是否遇到过下载的图片会发现有些图片会无法预览情况? 有几种原因可能导致一些图片在预览时无法正常显示: 损坏的图片文件: 图片文件可能损坏或者部分损坏,导致无法被正常解析和预览。这种情况可能是因为文件在传输过程中损坏、…