禅与计算机 禅与计算机
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sharkchili

计算机禅修者
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

    • 计算机硬件知识小结
      • 计算机组成概览
        • 计算机硬件的五大单元
        • 主存(内存)
        • CPU(中央处理器)
        • 用人的构建来理解计算机的运作流程
        • 计算机上常用的计算单位
      • 计算机设备硬件组成详解
        • 主板架构
        • CPU详解
        • 内存详解
        • BIOS
        • 显示适配器
        • 硬盘与存储设备
      • 参考文献
    • 编程语言是如何完成运算的
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU如何完成计算运算
    • CPU指令封装原理
    • CPU性能优化技术详解
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • GPU工作原理简析
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

  • 计算机网络

  • 运维

  • 编码最佳实践

  • 计算机基础
  • 计算机组成原理
sharkchili
2023-01-12
目录

计算机硬件知识小结

# 计算机组成概览

# 计算机硬件的五大单元

在介绍计算机硬件基础之前,我们必须了解一下计算机硬件的五大单元(注意这里说的是硬件的五大单元并不是计算机五大单元):

  1. 输入设备:无论是计算机五大单元还是计算机硬件的五大单元,这其中必须包含的东西肯定是输入设备,在计算机日常使用中,输入设备无非就是将我们需要的数据传给计算机的媒介,输入设备常见的由鼠标、键盘、游戏手柄等。

  2. 输出设备:输出设备顾名思义就是显示计算机处理数据的媒介,例如显示屏、打印机等都是输出设备。

  3. 算术逻辑单元:在介绍算术逻辑单元之前,我们必须了解一下什么是CPU,CPU是一个具有特定的功能的一个芯片,每个CPU都包含一堆的指令集。算术逻辑单元就是CPU的一部分,它负责程序的运算以及逻辑判断。

  4. 控制单元:同样的控制单元也是CPU的一部分,它负责协调各个周边的组件和各个单元的工作。

# 主存(内存)

CPU是负责各种复杂的运算工作的,由于其计算速度非常快,而存储数据硬盘速度非常慢,所以为了能够向CPU及时投递数据,避免CPU经常空闲造成CPU空转,我们就加了内存这个东西。

需要了解是,内存空间是有限的,所以当内存找磁盘读取数据时发现自己空间已满,就会采用置换算法将某些不需要的数据移除内存。

# CPU(中央处理器)

CPU是包含特定指令集的芯片,而指令集大概可以分为精简指令集和复杂指令集:

  1. 精简指令集(RISC):,精简指令集特点很明显,它能够处理简单的一些动作,并且执行效率极高,常用的常见就是导航系统、导航网络设备(路由器、交换机)等。
  2. 复杂指令集(CISC):我们日常计算机所用x86架构所用的CPU就是包含复杂指令集的CPU,它所能处理的动作可以是非常复杂,所以执行效率相对精简指令集而言会低一些。常见的CISC微指令就是AMD,Intel这些。之所以我们管现代所用的计算机结构叫x86的原因也正是因为Intel早年开发的一些列CPU代号都是86结尾。 随着CPU的不断发展,计算机也从原来的32位发展到现在的64位,这就意味着CPU一次可以读写的数据也从原来的32位(32/8=4G)变为现代的64位(64/8=8G),也意味着所能表示的内存地址从原来的4g变为8g。

# 用人的构建来理解计算机的运作流程

了解了计算机硬件的组成部分,我们就可以通过人的构建来了解一下计算机的工作流程,我们都知道人是通过大脑进行思考和处理外界的传递的数据的,计算机中的CPU就可以理解为人脑,通过CPU计算机就是将主存传入的数据进行运算,并交由输出单元传送出去。

人脑进行运算的数据有可能是从五官感知到的,也可能是从自己的记忆中拿到的,通过记忆获得信息速度远比再次通过五官去感知要快速的多。而主存就好比人类的记忆,CPU正是通过主存快速获取数据并完成运算。

人类对于日常工作处理所需要的数据大部分都来自记忆,而记忆是大部分来自长期存储的数据。计算机也一样的,硬盘就扮演着存储长期数据的角色,当计算机需要某些数据的时候,主存就会去硬盘中获取这些数据交给CPU处理。

知道了数据处理的地方,那么我就该知道新的数据是从何处进行输入输出的,正如人类一样,人类是通过五官感知外界。而计算机则是通过输入和输出设备完成数据的运输,输入设备可以是鼠标、键盘等。输出设备可以是打印机、显示屏等。

串联起来:

  1. 计算机通过输入设备将数据存储到硬盘。
  2. 主存从硬盘读取数据。
  3. CPU从主存中快速读取数据并完成运算。
  4. 运算结果或是通过输出设备输出,或是返回给主存,主存再次写回磁盘中。

# 计算机上常用的计算单位

  1. 容量单位:容量单位的进率都是1024,但是bit和byte的进率是8。
1T=1024G
1G=1024M
1M=1024K
1K=1024Byte
1Byte=8bit
1
2
3
4
5
  1. 速度单位:速度单位最常见的就是网络速度,例如我们日常购买宽带时运营商都会告知宽带为百兆带宽。实际上百兆带宽就是100Mbps,这里的b是bit,所以换算成byte,百兆带宽的实际速度为100/8=12.5Mbyte

# 计算机设备硬件组成详解

# 主板架构

聊到计算机组成我们基本是以AMD或者Intel两个主流派系,随着发展两者的架构几乎是一样的。

早期的主板会将结构分为南北桥两个部分,北桥负责桥接各种读取速度快的组件间的交互,例如主存、CPU、显示适配器等。而南桥负责桥接较慢的装置接口,例如硬盘、网络卡、USB等。

这也导致内存和CPU交互都需要经过北桥,大大占用了北桥的带宽,于是设计者将北桥内存控制器加到CPU中,现如今的x86架构就一直延续了这个设计。

# CPU详解

以华硕主机来聊聊CPU这个东西,下图所指的位置就是CPU的插槽,使用不同的指令集CPU的执行效率都会有所不同。但在同款CPU性能比较下,频率也是CPU性能的一个重要指标,例如一个CPU的执行频率为 3.6GHz,这就代表着这个CPU理论上一秒可以执行36亿个指令(3.6 10001000*1000 =36亿)。

上文我们也提到了,早年的CPU和主存是通过北桥来交互数据的,但是CPU的执行效率远远高于主存的传输速度,所以为了平衡这一点,北桥还设置了一个叫FSB的东西来连接两者。

并且为了适配CPU和其他组件的交互速度,CPU还将自己传输分为内频和外频。外频的速度适配外部组件的传输速度,内频则是CPU自己的速度,通过所以早年的CPU可以说是自己内部速度非常快,而外部还在不紧不慢和其他组件缓慢交互。

所以早年我们还会提到一个叫超频的概念,例如我们当前CPU外频率为300MHz,倍频为9,那么CPU的内频就是300*9≈3GHz。假如所以有些计算机硬件发烧友为了能够提高CPU的内频速度,会将外频率速度提高例如将外频率提高为500MHz,那么内频则被提高为4.5GHz,但是这么快的速度确实非正常设置,很可能会导致主机运行时出现宕机的情况。

随着时代的发展,Intel使用DMI技术,AMD使用 Hyper Transport,使得CPU和主存以及其他组件交互都无需经过北桥了,所以现在的CPU都是自动超频的。

现代计算机中一个CPU不止一个核心,双核心一起参与运算,处理效率显著提高。而且我们都知道CPU的数据都是从主存中获取的,而CPU和主存之间数据传入也是通过内存控制的FSB(前端总线频率)。假如内存控制芯片对主存的工作频率为1600Mz,以64位计算机而言,那么CPU最快带宽为1600Mhz64位8byte=12.8Gbyte/s

关于CPU性能提升还有一点就是超线程的概念,我们都知道CPU运算速度非常快,但是进行运算操作时势必是要经过从主存中获取数据的步骤,这就使得单个CPU在读取主存数据时,逻辑运算单元只能干等着。

对此设计者们就提出一个超线程的概念,这个概念与操作系统多任务切换类似,就是将CPU内部的register分成两个,这样一来CPU就有了两个缓存器,当一个缓存器使用逻辑运算单元时,另一个缓存器就会去主存获取数据,两个齐头并进的工作着,执行效率就会高很多。

这也就是我们现在笔记本明明只有8个CPU核心,却有16个逻辑核心的原因。

关于CPU信息,我们可以在Linux系统上键入以下命令查看

more /proc/cpuinfo
1

以笔者的云服务器为例,我们可以看到以下内容

# 逻辑处理器唯一标识符
processor       : 0
# 代表处理器类型,下面这段配置就代表这个cpu为英特尔的
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
stepping        : 1
microcode       : 0x1
cpu MHz         : 2499.994
cache size      : 40960 KB
physical id     : 0
# siblings     和cpu cores之间有一个对应关系,如果siblings 是cpu cores的两倍,那就说明当前cpu支持超线程,反之就有可能是CPU不支持超线程或者说超线程的功能未开启
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant
_tsc rep_good nopl nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c r
drand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsav
eopt arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips        : 4999.98
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

当然若想查看当前系统物理cpu个数,可键入以下命令

more /proc/cpuinfo |grep 'physical id'|sort

1
2

以笔者为例,当前服务器就会输出以下信息,这就意为着笔者的服务器为有16个物理CPU


physical id     : 0
physical id     : 10
physical id     : 12
physical id     : 14
physical id     : 16
physical id     : 18
physical id     : 2
physical id     : 20
physical id     : 22
physical id     : 24
physical id     : 26
physical id     : 28
physical id     : 30
physical id     : 4
physical id     : 6
physical id     : 8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

若我们想查看每个CPU内核个数,我们可以键入以下命令

more /proc/cpuinfo |grep 'cpu cores'

1
2

可以看到笔者使用的服务器的CPU都是单核心的


cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

我们也可以键入以下命令查看逻辑CPU个数以及超线程个数的总和,通过输出可知我们知道最终总数为16

cat /proc/cpuinfo | grep "processor" | wc -l
1
16
1

# 内存详解

CPU和主存决定的计算机执行效率,所以我们再来聊聊主存,内存一般都是一条条芯片,以华硕主机为例子,他会被插在下图所示的插槽中,对于需要被处理的数据都必须加载到内存中才能被执行,而且内存中的数据如果在断电前没有写回磁盘的话,数据是会丢失的。

而内存分为SD RAM和DDR RAM两种,他们的带宽都是频率*宽度/8,可以看到DDR的频率比较高所以带宽也相对大些,现在主流的主存都是使用DDR4的内存了。

同时内存还需要考虑的另一个因素就是容量,只有足够大的容量还能保证从辅存中读取的数据会在处理前呆在内存中,不会因为内存不足而被置换出去,直到被CPU执行。从上文我们也看到内存插槽有4个,之所以有这么多就是因为通过增加插槽数目可以增加更多的内存条,从而提高容量的通信也增加了通道,假如一支内存只有64位,那么两条内存条带宽就会达到128位。那么容量就是16G了。

除此之外现代计算机为了保证常用数据会快速被响应执行,就在CPU中增加了一个二级缓存,所以当从主存读取的数据执行完成后,有可能会缓存在CPU二级缓存中,二级缓存的执行速度和CPU是一样的,这就是使得计算机的执行性能再次提高。

# BIOS

有一段重要的程序BIOS,他存储的计算机的硬件信息以及开机设备等选择项,他原本是存在ROM(只读存储器)中,BIOS所有数据都会长期保留在内存中且不会修改,但是现代计算机发展速度太快了,这种做法带来了很大的不便,所以为了能够修改这段程序,BIOS现在一般都存到闪存(flash)或者EEPROM中。

# 显示适配器

显示适配器又称为VGA,因为显示的图形图像的颜色会占用内存,所以显示适配器的容量就会决定图像显示的质量。 而且现如今社会,大量的3D特效出现,这些特效都是需要运算的,如果全部交给CPU,极有可能出现大量程序卡顿的情况,所以显示适配器的厂商如今都会在显示适配器中内嵌一个加速芯片来完成运算,这就是所谓的GPU,参见下图所示位置。

除此之外,显示适配器也也需要和CPU等组件进行沟通,所以数据的传输效率也决定的显示的效率,主流的显示适配器的规格如下,基本都是采用PCIe,这就使得传输速度也是很不错的。

所以,如果我们需要看到pcie规格所对应的显示适配器的信息,我们完全可以键入以下命令查看

lspci
1

可以看到笔者服务器所对应的显示适配器为Cirrus Logic GD 5446这个型号的

# 硬盘与存储设备

最后就是硬盘了,早期的辅存设备就是硬盘,如下所示

他对数据的读写都是通过转动磁头来进行的,而且因为磁盘外圈大的原因,所以这种硬盘写数据都是从外往内写的。

同样的磁盘传输速度也是非常重要的,传统磁盘连接界面包括有 SATA, SAS, IDE 与 SCSI 等等,但如今SATA已将IDE取代,而SAS已将SCSI 取代。如下图所示,这就是SATA的插槽。

不同版本的SATA传输速度如下

虽然SAS传输速度比SATA好,但碍于价格过于昂贵,所以个人计算机不常用,对此我们对SAS速度做个了解就好了。

USB相比大家都知道了,这里我们也就做不多做介绍了。

最后我们就来介绍主流的辅存设备了——固态硬盘(SSD),如今的电脑基本都是使用固态硬盘的,与传统磁盘不同的是,他不需要马达以及转动获取数据,他都是透过内存随机存取的。所以读取速度基本没有延迟,如今的笔记本基本都是使用固态硬盘了。在2016年的时候Intel顶级的SSD已经可以达到500Mbyte/s,这已经可以比肩SATA3了。更何况今日呢?所以传统磁盘已主键被淘汰,我们日常使用个人计算机的基本都是使用SSD了。

关于这些辅存设备信息,我们同样可以使用lspci查看,如下所示,这就笔者服务上所能看到的usb接口、SATA接口等各个接口对应的设备信息。


00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:04.0 Communication controller: Red Hat, Inc. Virtio console
00:05.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:06.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon

1
2
3
4
5
6
7
8
9
10
11
12

# 参考文献

鸟哥的Linux私房菜:https://book.douban.com/subject/4889838/ (opens new window)

循序渐进Linux(第2版):https://book.douban.com/subject/26758194/ (opens new window)

编辑 (opens new window)
上次更新: 2026/03/26, 01:05:31
编程语言是如何完成运算的

编程语言是如何完成运算的→

最近更新
01
基于EasyExcel实现高效导出
03-25
02
从开源框架中学习那些实用的位运算技巧
03-25
03
浅谈分布式架构设计思想和常见优化手段
03-25
更多文章>
Theme by Vdoing | Copyright © 2025-2026 Evan Xu | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×