计算机系统基础(一)

1. 引入——从源程序到可执行文件

了解高级语言编写的代码在后台是如何被编译并运行的

首先我们会编写一段代码,例如

#include<stdio.h>int main(){printf("hello world!\n");return 0;
}

并把它命名为hello.c文件

预处理阶段

接下来通过命令,得到hello.i

gcc -E hello.c -o hello.i

该阶段会把以#开头的文件内容嵌入到源程序文件中,hello.i仍是文本文件

编译阶段

gcc -S hello.i -o hello.s

将hello.i进行编译得到一个汇编语言源程序文件hello.s,将高级语言转变为汇编语言这个过程就叫编译

汇编阶段

gcc -c hello.s -o hello.o

将hello.s进行汇编得到二进制文件hello.o,里面的指令也为机器指令,无法用文本打开,

  • 想打开也可以采用逆向汇编,注意逆向汇编和正向汇编略有不同
objdump -d hello.o
  •  一条汇编对应一条机器指令

链接阶段

gcc hello.o -o hello.exe

将多个可重定位的目标文件与标准函数库中的可重定位目标文件合并为一个可执行目标文件

2.计算机系统的抽象

通过c语言文件的编译等操作,我们知道了高级语言编写的语言文件是如何汇编为机器语言。接下来就正式了解计算机系统

操作系统、编程语言、算法等不做过多解释

指令集体系结构

机器语言程序所运行的计算机硬件与软件之间的桥梁。ISA定义了一台计算机可以执行所有指令的集合,例如操作数存放的地址空间,操作数的类型等

微体系架构

计算机硬件执行机器语言程序的过程就是执行一条一条指令的过程,ISA是对指令系统的一种规定或结构规范,具体实现的组织是微体系结构。例如,同样是加法,是采用串行进位还是并行进位属于微体系结构,但在ISA层面可能是相同的

功能部件、电路、器件则不做过多描述

3.冯.诺伊曼

   冯.诺伊曼结构基本思想  

1. 采用“存储程序”的工作方式   

存储方式:必须将事先编好的程序和原始数据送入主存后才能执行程序,一旦程序被启动执行,计算机能在不需操作人员干预下自动完成逐条指令取出和执行的任务

2. 计算机由运算器、控制器、存储器、输入设备、输出设备5个基本部件构成

3. 存储器不仅能存放数据也能存放指令

数据和指令尽管形式上没有区别,但计算机可以区分它们。控制器应能自动执行指令

4. 计算机内部以二进制形式表示指令和数据

每条指令由操作码和地址码两部分组成,操作码指出操作类型,地址码指出操作数的地址;由一串指令组成程序

冯.诺伊曼基本结构

  • ALU:算术逻辑部件,对输入端的AB进行操作
  • GPRs:通用寄存器,临时存储从主存取来的数据和运算结果
  • IR:指令寄存器
  • PC:程序计数器,执行当前指令过程中,自动计算出下一条指令的地址并送到PC保存
  • 标志寄存器:结果是否为0,是否为负数,这些标志信息需要专门记录
  • 控制部件:自动逐条取出指令并进行译码的部件
  • MAR:(CPU访问主存时,需先将主存地址、读写命令分别送到总线的地址线、控制线)CPU送到地址线的主存地址应先存放在MAR中
  • MDR:发送到或从数据线取来的信息存放在MDR中

以下是个人对CPU执行过程的理解:

程序执行前,主存地址存放在MAR中,数据存放在MDR

PC获取到第一条指令的地址后,根据指令译码让IR从MDR中获取操作数地址和操作码。控制部件对指令进行操作,操纵ALU对AB进行计算。计算结果产生的标志信息存放在标志寄存器中,并将计算结果放在MDR中返回给内存或者放在GPRs中继续计算。

修改PC,继续下一条程序

指令执行过程

假设模型机M中8位指令,16个主存单元,4个通用寄存器r0~r3,有两种指令格式

已知:

 现我们需要实现z=x+y,x和y分别存放在主存5和6号单元中,结果z存放在7号单元中

我们以1110 0110指令举例,来看指令执行过程。首先,我们取出存放在主存M[0000]的指令即1110 0110放在IR中;再将高四位即1110放进控制部件进行指令译码,根据op=1110,我们知道这是一个取数操作;同时PC+1,PC内容是0001;因为是取数指令,控制器产生read信号,并将该信号送往控制线;同时它将控制addr字段作为主存地址送MAR;然后主存将0110中的变量33送到数据线并自动存储在MDR中;最后将MDR又存放在R[0]通用寄存器中

以上所有微操作都具有先后顺序需要时钟信号进行定时,时钟信号宽度为一个时钟周期,一条指令就包含多个时钟周期

4.程序的开发和执行

语言的发展

最早的语言是机器语言,采用二进制编码,缺点明显:不灵活,阅读困难

然后就是汇编语言,汇编语言与机器语言一一对应,汇编指令包含操作码和操作数或地址码。

(机器语言与汇编语言都是面向机器结构的语言,又被称为机器级语言)

最后就是高级语言,处理逻辑分为顺序,选择,循环。两种转换方式(编译:将高级程序语言翻译成汇编语言。解释:将源程序语句按执行顺序逐条翻译成机器指令并立即执行)

数据的流动过程

我们用shell命令解释器来执行一个可执行文件举例

 shell程序会将用户从键盘输入的字符主义读入CPU寄存器;

再保存到主存中,在主存的缓冲区形成字符串

等接收到enter按键时,shell调出操作系统内核里相应的服务流程,由内核来加载磁盘上的可执行文件hello到存储器

内核加载完可执行文件中的代码及其要处理的数据后,将可执行文件的第一条指令送到PC中,处理器随后开始执行可执行文件中的程序;

然后将CPU运行的结果送往显示屏中

5.计算机系统层级结构

计算机系统层次

最早的程序开发:直接输入指令和数据,启动后把第一条指令地址送PC开始执行

高级语言开发程序:

  • 需要编辑器编写源程序——语言处理程序
  • 需要一套翻译转换软件处理各类源程序——语言处理程序
  • 需要一个可以执行程序的界面(GUI:图形用户界面;CUI:命令行用户界面)——人机接口
  • 语言的运行时系统、操作系统内核、指令集体系结构、计算机硬件——语言处理系统、操作系统

支撑程序开发和运行的环境由系统软件提供;最重要的系统软件是操作系统语言处理系统;语言处理系统运行在操作系统之上,操作系统利用指令管理硬件

现代计算机系统层次:

计算机系统的不同用户

系统管理员:工作在由操作系统提供的抽象层

系统程序员:工作在ISA层次,必须对ISA非常了解

指令集体系结构(ISA)

规定了如何使用硬件

  • 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
  • 指令可以接受的操作数的类型;
  • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、长度和用途;
  • 操作数所能存放的存储空间的大小和编址方式;
  • 操作数在存储空间存放时按照大端还是小端方式存放;
  • 指令获取操作数的方式,即寻址方式

同一种ISA可以有不同的计算机组成,如乘法指令可用ALU或乘法器实现

计算机系统核心层之间的关联

将高级语言源程序转换为机器级目标代码整个过程,我们将其分为前端、后端

前端:高级语言程序->中间代码,遵循编程语言标准规范

后端:中间代码->机器级语言程序,遵循ISA和ABI(应用程序二进制接口)规范

而代码结果不符合预期的原因通常有两种:

(1)程序员不了解语言规范;

(2)程序含有未定义行为(语言规范中没有明确指定其行为的情况)或未确定行为(例如char类型可以是带符号整数也可以是无符号整数)的语句

ABI:运行在特定ISA及特定操作系统之上的应用程序所遵循的一种机器级目标代码层接口规约

  • 过程间调用约定(参数和返回值传递等)
  • 系统调用约定(系统调用的参数和调用号如何传递以及如何从用户态陷入操作系统内核等)
  • 目标文件的二进制格式
  • 函数库使用约定
  • 寄存器使用规定
  • 程序的虚拟地址空间划分等

6.计算机性能评价

基本的性能评价标准

是CPU的执行时间

CPU=一个程序所需的总时钟周期=时钟周期*时钟周期数=CPI*指令条数*时钟周期

CPI=一条指令所需的时钟周期数

MIPS=指令平均执行时间

选择性能评价程序

用基准程序来评测计算机的性能

  • 基准测试程序是专门用来进行性能评价的一组程序
  • 基准程序通过运行实际负载来反映计算机的性能
  • 最好的基准程序是用户实际使用的程序或典型的简单程序

基准程序的缺陷

  • 现象:基准程序的性能与某段短代码密切相关时,会被利用以得到不当的性能评测结果
  • 手段:硬件系统设计人员或编译器开发者针对这些代码片段进行特殊的优化,使得执行这段代码的速度非常快

Amdahl定律

系统中某部分进行更新所带来的系统性能改进程度,取决于该部分被使用的频率或其执行时间占总执行时间的比例

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

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

相关文章

WPF/C#:在DataGrid中显示选择框

前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求&#xff0c;今天跟大家分享一下&#xff0c;在自己的项目中是如何实现的。 整体实现效果如下&#xff1a; 如果对此感兴趣&#xff0c;可以接下来看具体实现部分。 实践 假设数据库中的…

【EndNote】EndNote进行文献管理可能遇到的问题和解决方案

一、安装GB/T7714-2015(numberic)文献style windows&#xff1a;https://blog.csdn.net/qq_36235935/article/details/115629694 mac os&#xff1a;Mac版Endnote 20导入中文参考格式Chinese Std GBT7714 (numeric)-CSDN博客 安装完之后需要调整Author Name格式&#xff1a;…

Python文件与面向对象知识点

目录 文件的基本概念 文件的读取 文件的追加 文件的写入 with语句 知识总结 面向对象的基本概念 类和实例 对象的属性和方法 类属性与方法 面向对象的三大特性 知识总结 文件的基本概念 文件的读取 文件的追加 文件的写入 with语句 知识总结 面向对象的基本概念 …

docker拉取镜像一直在加载中,且会提示error pulling image configuration

1、增加国内镜像配置 #查看文件内容 sudo vim /etc/docker/daemon.json如果没有该文件&#xff0c;则需要在/etc/docker中创建一个daemon.json 文件 创建文件 vim daemon.json#文件中添加以下json {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/…

第六十六天打卡 | 卡码网101 孤岛的总面积、卡码网102 沉没孤岛、卡码网103 水流问题、卡码网104 建造最大岛屿

卡码网101 孤岛的总面积 这一题在昨天的基础上&#xff0c;将比较得出最大孤岛面积的逻辑改为统计所有孤岛面积之和的逻辑即可。 最近做项目的时候也发现&#xff0c;很多时候代码逻辑能够复用最好就不要再自己写&#xff0c;防止出错&#xff0c;当然刷代码题的时候不…

V4L2读取摄像头资源

1.V4L2 它是Linux内核中标准的关于视频驱动程序&#xff0c;Video for Linux 2&#xff0c;简称V4L2。 它为Linux下的视频驱动提供了统一的接口&#xff0c;使得应用程序可以使用统一的API操作不同的视频设备。 V4L2支持三类设备&#xff1a;视频输入输出设备、VBI设备和rad…

LeetCode---402周赛

题目列表 3184. 构成整天的下标对数目 I 3185. 构成整天的下标对数目 II 3186. 施咒的最大总伤害 3187. 数组中的峰值 一、构成整天的下标对数目 I & II 可以直接二重for循环暴力遍历出所有的下标对&#xff0c;然后统计符合条件的下标对数目返回。代码如下 class So…

概率论与数理统计期末复习

概率论常考知识点汇总 总括 1. 基础概率论 概率定义&#xff1a;理解概率是事件发生的可能性度量&#xff0c;范围从0&#xff08;不可能&#xff09;到1&#xff08;必然发生&#xff09;。概率公理&#xff1a;掌握概率的三大公理&#xff0c;即非负性、规范性和可加性。条…

HTML静态网页成品作业(HTML+CSS)——美食火锅介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

微信对话生成器2.0版本

微信对话生成器2.0版&#xff0c;这是一款革命性的通讯辅助工具&#xff0c;在数字通信领域带来了新的创新浪潮。这一升级版的生成器不仅囊括了从基本的文字编辑、格式调整到语音转换的多种功能&#xff0c;更重要的是&#xff0c;它提供了模拟真实对话的能力&#xff0c;使得用…

容器之对齐构件

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_ne…

C++ 72 之 友元和类模版

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <string>// 写法2&#xff1a; // template<class T1, class T2> // class Students12;// 要提前用到Students12&#xff0c;需要在前面先让编译器见过Students12才可…

汇聚荣做拼多多运营口碑怎么样?

拼多多作为国内领先的电商平台&#xff0c;其运营口碑一直是业界和消费者关注的焦点。汇聚荣作为拼多多的运营服务商&#xff0c;其服务质量直接影响到拼多多平台的用户体验和品牌形象。那么&#xff0c;汇聚荣做拼多多运营口碑怎么样呢? 一、服务响应速度 汇聚荣在服务响应速…

树莓派4B学习笔记11:PC端网线SSH连接树莓派_网线连接请求超时问题解决

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习使用网线连接树莓派&#xff0c;网线可以提供更…

邮件推送服务商有哪些核心功能?怎么选择?

邮件推送服务商支持哪些营销工具&#xff1f;推送性能如何评估&#xff1f; 邮件推送服务商的核心功能可以帮助企业更高效地管理和优化其电子邮件营销活动&#xff0c;从而提升客户参与度和转化率。AokSend将详细介绍邮件推送服务商的一些核心功能。 邮件推送服务商&#xff…

弹窗‘xlive.dll没有被指定在Windows’要怎么解决?教你4种修复xlive.dll的方法

大家在使用电脑期间是否曾遭遇过一个弹窗警告&#xff0c;“xlive.dll没有被指定在Windows”&#xff1f;假如你确实碰到过这样的问题&#xff0c;当时你是如何应对xlive.dll文件缺失的状况呢&#xff1f;对于那些还不清楚如何处理此问题的朋友们&#xff0c;接下来所述的几种方…

用Python的Pygame包实现水果忍者小游戏

先上一下运行结果 长按鼠标左键出刀, 切割水果几分, 切割炸弹结束游戏, 漏掉的水果也会几分, 难度会随时间慢慢提高(水果的刷新频率变快) 初始化 帧率200帧/秒, 游戏窗口大小800600 # 游戏设置 pygame.init() FPS 200 fpsClock pygame.time.Clock() WIDTH, HEIGHT 800, 60…

【FPGA】静态分析与时序约束(持续更新

Reference&#xff1a; V2静态时序分析与时序约束文档 入门 无时序约束场景中&#xff0c;普通图像显示不清晰&#xff0c;千兆网口接收Ethernet package 数据不正常&#xff0c;红外场景中图像显示不正常 Definition&#xff1a; 我们提出一些特定的时序要求&#xff08;或…

文章MSM_metagenomics(七):分组马赛克图

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程是使用一个Python脚本来绘制马赛克图&#xff0c;用于可视化两个变量的频率分布。 数…

我的Mac疯了!居然可以生成这样的奇葩AI图片!

在当今人工智能领域&#xff0c;midjourney无疑是生成图片的王者&#xff0c;但是苦于付费才能使用&#xff0c;今天我就给大家分享一下midjourney平替stable diffusion&#xff0c;实现本地生成不逊色于midjourney的图片 效果图 先上一个我自己生成的效果(就是在我的Mac上用C…