《计算机系统基础》——计算机系统导论
文章目录
- 《计算机系统基础》——计算机系统导论
- 计算机的基本组成
- 程序开发与执行过程
- 机器语言
- 汇编语言
- 高级语言
- 程序的转换处理
- 程序的数据流动
- 计算机系统层次结构
- 早期计算机系统
- 1GL
- 2GL
- 现代计算机系统
- 3GL
- 4GL
- 指令集体系结构
《计算机系统基础》——计算机系统导论
🚀接下来我们要开始学习计算机系统基础,并且会以此开设一整个系列,感兴趣的同学可以订阅本专栏,后期会不断地更行这个系列。本系列所使用的教材是《深入理解计算机系统》这本书,也叫做SCAPP,然后配套课程是南京大学袁春风老师的课程。好了,关于本专栏的介绍就到这里了,让我们开始学习吧。
计算机的基本组成
🚀对于计算机的基本组成,我在计算机组成原理专栏进行了详细的介绍,不清楚的同学可以先去看一下以前下的文章:(二)计算机组成原理——计算机的基本组成_花园宝宝小点点的博客-CSDN博客。在这里,我对其进行一个简单的复习,希望能帮助大家去理解。
🚀首先,我们看到下面这个现代计算机结构模型,接下来我们会以此为例子来对计算机结构进行一个简短的介绍。在此之前,我们先对图中各个部位进行一个简单的说明。

- CPU:中央处理器。
- PC:程序计数器。
- MAR:存储器地址寄存器 。
- MDR:存储器数据寄存器 。
- ALU:算术逻辑部件。
- IR:指令寄存器。
- GPRs:通用寄存器组。
🚀接下来,我们举个例子来介绍计算机的工作原理,这个例子是关于厨师做饭的故事。不过在这之前我们需要树立一些概念。
首先,CPU就是我们的厨房,一切的工作都在此运行;然后控制器就是我们的厨师;GPRS就是盘;ALU就是厨房的厨具;存储器就相当于厨房外的架子,原材料和菜谱都放在这。
- 首先,我们从一号架子上面取下菜谱(根据PC取指令)。
- 看菜谱(指令译码)。
- 从架上或盘中取原材料(取操作数)。
- 洗、切、炒等具体操作(指令执行)。
- 装盘或直接送桌(回写结果)。
- 算出下一菜谱所在架子号2=1+1(修改PC的值)。
程序开发与执行过程
🚀接下来我们介绍一下程序开发的发展过程,以及其执行过程。
机器语言
🚀我们最原始的开发方式就是使用机器语言去编程,也就是在纸片上打孔来表示0和1,但是这样不够灵活,并且书写与阅读起来比较的困难,所以人们就创造了汇编语言来开发程序了。
汇编语言
🚀汇编语言就是用助记符和标号来表示的指令(与机器指令一一对应),它使用助记符表示操作码, 用标号表示位置,用助记符表示寄存器……,因为这样的话就不会增减指令而需要修改其他指令,并且不需记忆指令编码,编写方便,可读性比机器语言强。
指令:包含操作码和操作数或其地址码(机器指令用二进制表示,汇编指令用符号表示) 只能描述以下三个方面。
- 取(或存一个数) 。
- 两个数加(或减、乘、除、与、或等) 。
- 根据运算结果判断是否转移执行。
assume cs:codesg
codesg segmentmov ax,0123Hmov bx,0456Hadd ax,bxadd ax,axmov ax,4c00Hint 21h
codesg ends
end
🚀虽然方便了开发人员,但是这样机器就不认识我们的代码了,这下怎么办呢?所以我们就需要使用汇编程序去将汇编代码转换成机器语言。但是随着技术的发展,我们发现汇编语言还是太麻烦了,于是我们逐渐使用高级语言去开发。
高级语言
此处的高级语言为C语言,肯定有很多人觉得C语言不算高级语言,但是在面对汇编以及机器语言的时候,他还是能叫做“高级语言”。
🚀随着技术的发展,我们开始进入了高级语言的世界,它们与具体机器结构无关 ,直接面向算法描述,比机器级语言描述能力强得多。
并且有“面向过程”和“面向对象”的语言之分,还有两种转换方式:“编译”和“解释”。
- 编译程序(Complier):将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可。
- 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
程序的转换处理
🚀接下来我们就以我们的hello.c程序来介绍一下程序的转换处理过程。
#include <stdio.h>
int main()
{printf("hello, world\n");
}
🚀首先,我们的代码都是通过ASCII码保存在文件里面的,之后通过cpp 的预处理,得到一个.i文件;再经过编译,获得我们的汇编语言程序,也就是以.s结尾的程序;再经过汇编程序去把汇编语言转变为.o的可重定位目标 程序 (二进制);最后加上链接的printf.o文件,就能生成可执行目标程序 (二进制)。

程序的数据流动
🚀接下来我们来介绍一下在这个过程中,我们程序的数据是如何流动的。

- shell命令行处理:将字符逐一读入寄存器,再把它放到内存中。
- 可执行文件加载:利用DMA技术,数据直接从磁盘到达主存。
- hello程序执行过程:一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello 程序的main程序中的机器语言指令。这些指令将“hello, world\n” 字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。
支撑程序开发和运行的环境由系统软件提供,最重要的系统软件是操作系统和语言处理系统 语言处理系统运行在操作系统之上,操作系统利用指令管理硬件。
计算机系统层次结构
🚀接下来我们需要介绍的就是计算机系统层次结构。
早期计算机系统
1GL
🚀机器语言称为第一代程序设计语言( First generation programming language ,1GL )。

2GL
🚀汇编语言称为第二代程序设计语言( Second generation programming language ,2GL )

现代计算机系统
3GL
🚀第三代程序设计语言(3GL)为过程式 语言,编码时需要描述实现过程,即“ 如何做”。

4GL
🚀四代程序设计语言(4GL) 为非过程化语言,编码时只需说明“做什么”, 不需要描述具体的算法实现细节。
语言处理系统包括:各种语言处理程序(如编译、汇编、链接)、运行时系统(如库函数,调试、优化等功能)。
操作系统包括人机交互界面、 提供服务功能的内核例程。
指令集体系结构
ISA指Instruction Set Architecture,即指令集体系结构,有时简称为指令系统,它规定了如何使用硬件。
- 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
- 指令可以接受的操作数的类型;
- 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、 长度和用途;
- 操作数所能存放的存储空间的大小和编址方式;
- 操作数在存储空间存放时按照大端还是小端方式存放;
- 指令获取操作数的方式,即寻址方式;
- 指令执行过程的控制方式,包括程序计数器(PC)、条件码定义等。
ISA是计算机组成的抽象。
相关文章:
《计算机系统基础》——计算机系统导论
文章目录《计算机系统基础》——计算机系统导论计算机的基本组成程序开发与执行过程机器语言汇编语言高级语言程序的转换处理程序的数据流动计算机系统层次结构早期计算机系统1GL2GL现代计算机系统3GL4GL指令集体系结构《计算机系统基础》——计算机系统导论 🚀接下…...
华为OD机试 - 获取最大软件版本号(JavaScript) | 机试题算法思路 【2023】
获取最大软件版本号 题目 Maven版本号定义,<主版本>.<次版本>.<增量版本>-<里程碑版本> 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。 <主版本>.<…...
python--pygame实现各级菜单栏目设置
随着学期的开始,同学们也即将进入计算机相关课程的课程设计了,对于python课程设计的小伙伴,可能有些是需要利用pygame来写应该小游戏的,因为最近很多小伙伴同学也在想我要一些基于python的pygame模块做的游戏项目,此外…...
C++Primer15.3节练习
练习15.11: debug定义如下所示: //基类 class Quote { public:Quote() default;Quote(const std::string& book,double sales_price):bookNo(book),price(sales_price){ }std::string isbn()const { return bookNo; }virtual double net_price(st…...
解决实际项目中stalled时间过久的问题
背景 在公司参与了一个做度量统计的项目,该项目的特点是页面上的表格、卡片、图标非常多。项目经常出现一种情况:页面加载速度较慢,开始怀疑是由于计算量较大,后端接口相应速度较慢。优化了一版后端接口后(加缓存、优…...
vim编辑器
目录 前言 1.下载安装vim 2.三种模式互换 3.vim配置 前言 vim是从 vi 发展出来的一个文本编译器。 代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了&am…...
Python 使用 pip 安装 matplotlib 模块(秒解版)
长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意创作本片文章指明方向。 1.首先需要下载 python 我直接是在电脑自带的软件商店里下载的,图方便,当然在官网下…...
python-openCV—入门到精通系列讲解(配效果图)- 总览
前言: python-openCV是一种强大的计算机视觉库,可用于处理图像和视频等多媒体数据。它可以帮助您快速处理和分析图像和视频数据,并且在计算机视觉领域具有广泛的应用。在学习python-openCV时,一个速查手册是一个必不可少的工具。 你可以当本专栏当做一个速查手册,可以看…...
智能小车红外避障原理
红外避障电路红外避障电路由电位器R17,R28;发光二极管D8,D9;红外发射管 D2,D4和红外接收管D3,D5和芯片LM324等组成,LM234用于信号的比较,并产生比较结果输出给单片机进行处理。智能小车红外避障…...
(三十六)Vue解决Ajax跨域问题
文章目录环境准备vue的跨域问题vue跨域问题解决方案方式一方式二上一篇:(三十五)Vue之过渡与动画 环境准备 首先我们要借助axios发送Ajax,axios安装命令:npm i axios 其次准备两台服务器,这里使用node.j…...
【CSAPP】整数表示
文章目录整型数据类型无符号数的编码补码编码确定大小的整数类型练习1练习2有符号数和无符号数之间的转换练习C语言中的有符号数与无符号数练习扩展一个数字的位表示练习1练习2截断数字练习关于有符号数与无符号数的建议练习1练习2使用 位编码整数有两种不同的方式:…...
Python基础2
1. python函数定义 函数定义语法: def 函数名(传入参数): 函数体 return 返回值 —————————————— 参数如果不需要,可以省略返回值如果不需要,可以省略函数必须先定义在使用 注意ÿ…...
【项目立项管理】
项目立项管理 很杂,可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的: 为项目进行资源分配,确定项目绩效目标&am…...
【验证码的识别】—— 极验验证码的识别
前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…...
华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...
C生万物 | 模拟实现库函数strcpy之梅开n度
文章目录【梅开一度】:观察库函数strcpy()的实现【梅开二度】:模仿实现strcpy()【梅开三度】:优化简练代码【梅开四度】:assert()断言拦截【梅开五度】:const修饰常量指针【梅开六度】:还可以有返回值哦&am…...
家庭理财,轻松记账修改收支记录这样操作
我们在记账的时候难免会出现记错或者想修改的地方,又或者是想将之前太久没有用的记账记录删除掉,今天,小编就教大家如何修改收支记录,一起接着往下看吧! 第一步,运行【晨曦记账本】在软件主界面中ÿ…...
河南工程学院2.17蓝桥杯培训
乘法口诀数列:https://www.acwing.com/problem/content/3466/ 剪绳子:https://www.acwing.com/problem/content/68Sin SinSine之舞:http://lx.lanqiao.cn/problem.page?gpidD5272 数列:https://www.acwing.com/problem/content/…...
【JavaSE】数据类型与变量
JAVA之父:詹姆斯高斯林 (James Gosling) 前言: 大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...
生成模型技术发展过程
生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D,并且假设这个数据集的底层分布(underlying distribution)是Pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
