news 2026/7/24 23:17:09

计算机基础·计算机组成原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机基础·计算机组成原理

文章目录

体系结构通识

冯诺依曼架构:计算单元+存储器+输入/输出设备+控制器

程序的编译过程:预处理-编译-汇编-链接

预处理器:替换宏定义和头文件为具体的函数或者内容

  • 有宏定义#Define A B,将代码中A变量全部替换为B。
  • 替换为头文件stdio.h为对应的函数声明:例如extern int printf('xxxx')

编译器:将高级程序语言(C语言)替换为低级通用的程序语言(汇编语言)

汇编器(Assembler):将低级通用程序语言(汇编语言)替换为机器能理解字节码(二进制串)

链接器:外部函数的符号解析和地址重定位(确定外部函数对应所在程序的地址)

内存地址和字节

字节-寻址的内存组织结构:视同为字节数组,寻址单位为1个字节

寻址单位:每一个内存地址代表几个字节,例如2字节寻址

32位系统和64位系统:代表逻辑地址的位数虚拟内存空间的大小

字节排序:大端法和小端法

大端法:最不重要的字节在高位-顺序存储

小端法:最不重要的字节在低位-逆序存储,更加常用

字符串的表示:字符用ASCII码(1字节)表示,使用空字符’\0’(null character,‘0x00’)表示终止

chars[6]="12345";地址 内容(字符)ASCII1000'1'0x311001'2'0x321002'3'0x331003'4'0x341004'5'0x351005'\0'0x00

整数的表示:有符号数和无符号数,符号位

原码,补码和反码:默认使用二进制补码表示有符号整数

*正数转负数技巧:正数取反+1=负数

反码-二进制反码:最高位为符号位,数值为− x w − 1 ⋅ ( 2 w − 1 − 1 ) -x_{w-1}\cdot(2^{w-1}-1)xw1(2w11)

  • 正数的补码为其本身,负数的补码为正数的原码取反得到。
补码-二进制补码:最高位为符号位,数值为− x w − 1 ⋅ 2 w − 1 -x_{w-1}\cdot2^{w-1}xw12w1
  • 补码=反码+1

位数的扩展:有符号和无符号数

无符号整数-零扩展:直接前面补0,不影响符号位

有符号整数-符号扩展:扩充k位,前面填充k个原先的最高位,不影响结果

  • 符号为0,显然成立
  • 符号为1,扩充的位数得到的负数恰好就是扩充之前得到的负数

截断:超出数据范围

加法运算:有符号加法和无符号加法

无符号加法:mod2 w 2^{w}2w即可

有符号加法:正溢出和负溢出

乘法运算

有符号整数的通用方法先定符号位转正数,使用算盘法求解,最后构造有符号整数(是负数则取反+1)

0101×0011-------------0101(0101×1)01010(0101×1<<1)00000(0101×0<<2)00000(0101×0<<3)-------------01111

二进制拆分法:a ⋅ b = a < < ( x 0 ⋅ 2 0 + x 1 ⋅ 2 1 + ⋯ x w − 1 ⋅ 2 w − 1 ) a\cdot b=a<<(x_0\cdot 2^0+x_1\cdot 2^1+\cdots x_{w-1}\cdot 2^{w-1})ab=a<<(x020+x121+xw12w1)

二的乘法:左移k位
二的除法:右移k位,右移后空出位全部填充符号位

浮点数的表示

IEEE标准表示法-二进制科学计数法:符号位s ss,指数部分E EE和有效数部分M MM

  • 计算公式为:
    V = ( − 1 ) s ⋅ M ⋅ 2 E \begin{align} V=(-1)^s \cdot M \cdot 2^E \end{align}V=(1)sM2E

指数位的偏置:偏置一般设置为2 k − 1 − 2 = 2 7 − 2 = 126 2^{k-1}-2=2^{7}-2=1262k12=272=126,排除2种特殊情况,全0和全1,float32中E EE的范围为[-126,127]

规格化值:指数位非特殊情况(全0或者全1),有效数定义为M = f + 1 M=f+1M=f+1,f为尾数转小数

非规格值:指数位全为0,有效数定义为M = f M=fM=f,f为尾数转小数

无穷值:指数位全为1,但是尾数全为0特殊定义值

非有效数字NaN:指数位全1,但是尾数非0特殊定义值

舍入-rounding:浮点数只能近似表达某些实数,涉及到近似到具体小数位/整数的问题

浮点数加法:变为规范数,对齐指数部分,还原为浮点数表示

浮点数的乘法:变为规范数,计算重要数的乘法结果,还原为浮点数表示


机器级别的编程:常见汇编指令-未完待续

处理器架构:以Y86-64为例

指令集

时序电路执行阶段:取指-译码-执行-内存-写回-更新程序计数器

取指:从指令内存中根据PC取出指令

译码:读取指令类型和操作数

ALU:返回计算结果

软件角度优化程序性能

循环展开

增强并行性

程序的局部性:时间局部性和空间局部性

  • 时间局部性:在相邻时间访问同个数据
  • 空间局部性:倾向访问相邻的元素

主存储器

非易失存储器:断电不会丢失数据

PROM:只可以被编程一次

*ROM:"只读"存储,实际上可读可写

EEPROM:可读可写,例如闪存(手机存储和SSD)。

易失存储器:断电会丢失数据

RAM:随机访问内存

DRAM:依靠电容器存储状态,电容器电量会流失,需要定期刷新;速度较慢,但容量大
  • 存储单位为单元/超单元,16x8的DRAM芯片表示16个单元,每个单元8个bit
  • 通过内存控制器索引DRAM的supercell,按照二维结构组织,分别需要行索引和列索引
  • 每次进行行索引时,会将这一行的supercells全部缓存下来。
  • 可以通过叠加多个DRAM芯片的方式一次性索引更多字节,例如1字节*8=8字节。

SRAM:使用双稳态晶体管存储状态,不需要定期刷新;速度快但造假昂贵

存储器架构:L0(CPU寄存器)-L1/L2(SRAM)-L3(DRAM)-L4+(磁盘或者SSD)

存储器层次中的"缓存"

缓存交换抽象原理:不同级别存储(例如L1和L2),以数据块为单位交换缓存;缓存命中和缓存不命中。

  • 缓存:SRAM,以数据块的形式存储和交换数据

缓存未命中:冷启动(启动时无缓存),映射冲突(哈希冲突,相互覆盖)和容量冲突(需要缓存太多数据)

高速缓存存储器的通用架构

缓存行与组:( S , E , B , m ) (S,E,B,m)(S,E,B,m),S代表组数,E代表缓存行,B代表数据块大小(字节),m代表内存地址的位数,t = m − s − e t=m-s-et=mse代表标记位数,用于区分同一组不同缓存

直接映射缓存:E = 1 E=1E=1,每一个组只对应一个缓存行,根据s ss,有效位和标记位t tt确定缓存是否存在

组相联映射缓存:E > 1 E>1E>1,每一个组对应多个缓存行,根据s ss,有效位和标记位t tt对缓存行进行一一匹配,确定缓存是否存在。


全相联映射缓存:S = 1 S=1S=1,只有一组,包含E > 1 E>1E>1个缓存行;使用有效位和标记位t tt并行地进行匹配,不需要组数位s ss。例如TLB快表

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 23:15:07

TLV320ADC3101低功耗音频ADC:集成miniDSP的硬件设计与配置实战

1. 项目概述与核心价值在便携式音频设备、无线通信终端和主动降噪系统等应用中&#xff0c;如何以极低的功耗实现高质量的音频采集与处理&#xff0c;一直是硬件工程师面临的核心挑战。传统的方案往往需要将高性能的模数转换器&#xff08;ADC&#xff09;与独立的数字信号处理…

作者头像 李华
网站建设 2026/7/24 23:15:02

AI应用开发四层技术栈:MCP协议与模块化实践

1. AI应用开发四层技术栈全景解读当我在2023年首次接触金融大模型问答机器人项目时&#xff0c;面对琳琅满目的技术方案曾一度陷入选择困难。直到梳理出MCP-Skills-Tool Calling-SubAgent这套分层架构&#xff0c;才真正打通了AI应用开发的任督二脉。这套架构就像建造摩天大楼的…

作者头像 李华
网站建设 2026/7/24 23:14:59

Linear Loops功能详解:简化循环工程操作与自动化工作流

Linear 最近发布了 Loops 功能&#xff0c;这是一个专门为简化循环工程操作而设计的新工具。如果你经常需要处理重复性任务、批量操作或者需要自动化的工作流程&#xff0c;Loops 可能会成为你的新利器。这次我们重点看看它的核心功能、使用门槛、实际效果以及如何快速上手。Lo…

作者头像 李华
网站建设 2026/7/24 23:11:22

Claude Code v2.1.216性能优化:解决长会话卡顿与Agent行为异常

如果你正在使用 Claude Code 进行 AI 辅助编程&#xff0c;最近是否遇到过这样的困扰&#xff1a;代码编写到一半&#xff0c;编辑器响应越来越慢&#xff0c;甚至出现卡顿&#xff1f;或者你的 Agent 在执行复杂任务时行为异常&#xff0c;无法按预期完成工作&#xff1f;这正…

作者头像 李华
网站建设 2026/7/24 23:09:10

QKeyMapper:Windows游戏手柄键盘鼠标全能映射的终极解决方案

QKeyMapper&#xff1a;Windows游戏手柄键盘鼠标全能映射的终极解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手柄映射到键鼠&…

作者头像 李华