当前位置: 首页 > news >正文

《计算机组成原理》第 1 章 - 计算机系统概论

前言

    计算机组成原理是计算机科学的核心基础课程,本章将带你从宏观到微观认识计算机系统的本质。本文结合 Java 代码示例与可视化图表,帮助读者通过动手实践理解抽象概念。

1.1 计算机系统简介

1.1.1 计算机的软硬件概念

软件(Software)程序、数据及相关文档的集合,如操作系统、Java 编译器。
硬件(Hardware):物理实体组件,如 CPU、内存、硬盘。

案例:Java 程序的软硬件交互

// 软件层面:Java程序代码
public class HelloHardware {public static void main(String[] args) {// 硬件层面:通过CPU执行运算,内存存储数据int result = 1024 + 512; // 算术运算由ALU完成System.out.println("运算结果存储于内存:" + result); // 输出通过I/O设备显示}
}

注释

  • 代码由软件(Java 编译器)翻译成机器指令
  • 指令执行依赖硬件(CPU 取指→译码→执行)

1.1.2 计算机系统的层次结构

层次结构(从底层到应用层)

  1. 硬件层:晶体管、集成电路
  2. 指令集架构层(ISA):定义 CPU 能执行的指令(如 x86 的 ADD 指令)
  3. 操作系统层:管理硬件资源(如内存分配、进程调度)
  4. 汇编语言层:用助记符表示指令(如MOV AX, BX
  5. 高级语言层:Java、Python 等编程语言
  6. 应用层:办公软件、游戏等

 流程图:层次结构交互

                                                    计算机系统层次交互流程

1.1.3 计算机组成和计算机体系结构

计算机体系结构(Architecture)计算机组成(Organization)
定义系统的功能特性(如指令集、数据表示)实现功能的具体电路设计(如控制器结构)
例:是否支持浮点运算例:用硬布线控制器还是微程序控制器

案例:不同架构的 CPU 实现

// 体系结构定义接口
interface CPUArchitecture {void executeInstruction(String instruction); // 指令执行接口
}// 组成实现:硬布线控制器实现
class HardwiredCPU implements CPUArchitecture {public void executeInstruction(String instruction) {System.out.println("硬布线控制器执行指令:" + instruction);// 具体电路逻辑模拟}
}// 组成实现:微程序控制器实现
class MicroprogrammedCPU implements CPUArchitecture {public void executeInstruction(String instruction) {System.out.println("微程序控制器解析微指令:" + instruction);// 微指令序列模拟}
}

1.2 计算机的基本组成

1.2.1 冯・诺依曼计算机的特点

  1. 存储程序:指令和数据统一存储于内存
  2. 二进制表示:数据和指令均用二进制编码
  3. 硬件组成:运算器、控制器、存储器、输入 / 输出设备

Java 模拟存储程序原理

// 模拟内存存储指令和数据
class VonNeumannMachine {private String[] memory = new String[1024]; // 模拟内存单元public void storeProgram(String[] program) {for (int i = 0; i < program.length; i++) {memory[i] = program[i]; // 存储指令(二进制形式模拟)}}public void execute() {for (int i = 0; i < memory.length; i++) {String instruction = memory[i];if (instruction != null) {processInstruction(instruction); // 模拟控制器取指执行}}}private void processInstruction(String instruction) {System.out.println("执行指令:" + instruction);// 解析操作码和操作数(简化模拟)}
}

1.2.2 计算机的硬件框图

                                                                 计算机硬件组成框图

1.2.3 计算机的工作步骤

  1. 取指:PC 送地址到内存,取出指令到 IR
  2. 译码:控制器分析指令操作码
  3. 执行:ALU 完成运算,结果存回内存或寄存器

代码模拟指令执行周期

class InstructionCycle {private int pc = 0; // 程序计数器private String ir; // 指令寄存器public void fetch() {ir = memory[pc]; // 模拟从内存取指令pc++; // PC自动递增System.out.println("取指:指令地址=" + (pc-1) + ", 指令=" + ir);}public void decode() {String opCode = ir.substring(0, 4); // 假设前4位为操作码System.out.println("译码:操作码=" + opCode);}public void execute() {System.out.println("执行:" + ir);}
}

1.3 计算机硬件的主要技术指标

1.3.1 机器字长

  • 定义:CPU 一次能处理的二进制位数
  • 例:32 位 CPU 字长 32 位,64 位 CPU 字长 64 位

Java 验证字长影响(通过数据类型占用字节)

public class WordLengthDemo {public static void main(String[] args) {// 32位系统int占4字节,64位同理System.out.println("int字节数:" + Integer.BYTES); // 输出4(对应32位字长)System.out.println("long字节数:" + Long.BYTES); // 输出8(对应64位字长)}
}

1.3.2 存储容量

  • 主存容量:内存总字节数(如 8GB=8×1024×1024×1024B)
  • 外存容量:硬盘等存储设备容量

计算内存地址空间代码

public class MemoryCapacity {public static void main(String[] args) {int addressBusWidth = 32; // 32位地址总线long maxMemory = (long) Math.pow(2, addressBusWidth); // 2^32字节System.out.println("32位地址总线可寻址:" + maxMemory/1024/1024/1024 + "GB");}
}

1.3.3 运算速度

  • 主频:CPU 时钟频率(如 3.6GHz=3.6×10^9 次 / 秒)
  • CPI:每条指令平均时钟周期数
  • MIPS:每秒百万条指令数(MIPS = 主频 / CPI/10^6)

模拟 CPI 计算

public class OperationSpeed {public static void main(String[] args) {int frequency = 3600_000_000; // 3.6GHz主频int cpi = 2; // 假设每条指令平均2个周期double mips = frequency / cpi / 1_000_000;System.out.println("运算速度:" + mips + " MIPS");}
}

1.4 本书结构

总结

    本章通过 Java 代码示例和可视化图表,直观呈现了计算机系统的核心概念。建议读者动手运行代码,结合流程图理解硬件工作流程。后续章节将深入解析各组件的底层实现,敬请期待!

相关文章:

  • DAY38打卡
  • Python PyMySQL
  • 嵌入式开发学习日志(linux系统编程--进程(3)——线程)Day29
  • Ubuntu20.04系统安装,使用系统盘安装
  • AD-PCB--电子设计学习思路 DAY 1
  • 通过HIVE SQL获取每个用户的最大连续登录时常
  • 0527漏洞原理:SQL注入笔记 SQL注入类型(联合查询注入、报错注入实操)
  • SQL Server 简介和与其它数据库对比
  • sqli-第三十二关——bypass addslashes
  • 一对多 多对一
  • SQL思路解析:窗口函数该如何使用?
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • npm error Cannot find module ‘negotiator‘ 的处理
  • Turf.js:前端地理空间分析的瑞士军刀
  • 网络编程3
  • 图论回溯
  • 【监控】Spring Boot 应用监控
  • 如何制作全景VR图?
  • 网站开发 简历/网站查询平台官网
  • 山东鲁中公路建设有限公司网站/百度推广怎么弄
  • 做网站PV/活动推广方式都有哪些
  • 做软装设计能用到的网站有哪些/seo内部优化包括哪些内容
  • 茂名手机网站建设公司名录/站长之家排行榜
  • 长春火车站停车场24小时收费标准/简单网页制作模板