
简介《计算机基本结构》是一份面向计算机基础学习者的PDF讲义以图解与试题结合方式梳理计算机系统组成、硬件五大部件、CPU、存储器分类及软件系统等核心概念适合零基础入门或备考计算机等级考试的读者快速建立知识框架。资源仅含1个PDF文件约4.76MB排版紧凑、图文并茂可直接作为课件或自学笔记使用。内容从“硬件与软件关系”讲到“输入输出设备、运算器与控制器、内存储器和外存储器”并覆盖ROM与RAM的对比、存储单位换算B、KB、MB、GB、磁盘驱动器与磁盘的区别等易混淆考点配有典型例题与思考题帮助加深理解。目前已有40人参与学习对于想弄清计算机基本原理的初学者来说这份PDF能清晰解释硬件与软件如何协作、CPU为何是性能关键、数据如何在外存与内存间流转是一份高信息密度的入门速查资料。1. 从裸机到可用系统计算机基本结构里最容易被带偏的边界很多写了五年业务代码的人背得出冯·诺依曼的五大部件可真遇到程序变慢到底卡在内存还是磁盘这种问题还是会把 RAM 和硬盘当成一回事。这份《计算机基本结构》讲义讲的是计算机入门里最经典的那套框架硬件五大部件、CPU 组成、存储器分级、软硬件关系。它要解决的核心问题很朴素——一台裸机为什么不能干活装完软件之后各部件各管哪一段。这份材料适合用来重新校准基础认知也适合带着它给新机器做一次完整盘点把教材里的方块图映射到能敲命令验证的真实硬件上。2. 输入输出设备的外部分类从电信号转换到总线识别2.1 输入设备的核心是信号转换而不是设备外形教材对输入设备的定义是把原始数据、程序转换成计算机所能识别的电信号并送到存储器中。关键不在键盘鼠标这个例子而在转换成电信号这六个字。键盘的每个按键对应一组扫描码扫描码经过主板的键盘控制器转成中断信号再由 CPU 从端口读走鼠标的位移数据通过 PS/2 或 USB 协议封装成数据包。输入设备本质上是一个信号转换器它做的事情和后来出现的扫码枪、高拍仪没有区别只是协议栈深浅不同。判断一个设备是不是输入设备我一般看它是否把外部世界的物理量变成计算机内部的电信号。按这个标准磁盘驱动器也在输入设备列表里——读数据时它把盘片上的磁信号转成电信号送进内存。这解释了教材为什么把磁盘驱动器同时列入输入设备与输出设备它是一条双向通道而不是某些面试题里说的输入输出只能选一个。2.1.1 用 lsusb 和 lspci 把外设枚举出来要验证一台机器挂了哪些输入输出设备直接在系统层面枚举即可# 列出 USB 总线上的设备能看到键盘、鼠标、摄像头、U盘主控 lsusb # 列出 PCI 总线设备显卡、网卡、SATA 控制器都在这里 lspci -v | grep -E Class|Kernel driver | head -40lsusb输出中Bus和Dev编号表示设备挂在哪条 USB 总线、哪个端口ID字段冒号前是厂商 ID冒号后是产品 ID。lspci -v的Kernel driver in use行直接告诉你设备被哪个驱动接管。设备列出来但Kernel driver为空说明驱动没装上这就是物理上存在但逻辑上不可用的状态和裸机缺少软件支持是同一个道理。提示判断外设是输入还是输出不要背列表而是看数据在那一刻流向哪一侧。磁盘驱动器、网卡这类双向设备两个方向都要考虑。2.2 调制解调器教材里那个被单独拎出来的外设教材特别提示外设中除了输入设备和输出设备还有一个调制解调器俗称猫。Modem 把数字信号调制成模拟信号通过电话线传输再把收到的模拟信号解调回数字信号。它被单独拎出来是因为它在分类上处于输入和输出的中间态发数据时是输出设备收数据时是输入设备。今天的光猫、路由器、4G 模块都继承了这一属性它们是信道的两端不是单向的信号源或信号终端。理解了这个中间态再看网络排错就顺了。ping 不通外网时常规检查顺序是先看网口 link 状态再查路由最后看光猫注册状态。很多人第一步就跳到抓包忽略了光猫这种双向外设在物理层就没有建立完整链路。教材提调制解调器的本意就是提醒你别把外设想成只有进和出两种形态。2.3 外设带宽差异决定了排错方向教材没有讨论带宽但现代场景下外设分类必须和性能预期放在一起看外设类别典型接口单向带宽参考主要瓶颈点键盘鼠标USB 1.1/2.01.5 Mbps 起人操作速度远低于接口上限显示器HDMI 2.1 / DP 1.448 Gbps / 32.4 Gbps分辨率与刷新率乘积打印机USB 2.0 / 网络480 Mbps打印引擎机械速度磁盘外存SATA 3.0 / NVMe6 Gbps / 32 Gbps寻道时间或 NAND 写入放大网卡PCIe 3.0 x1约 8 Gbps运营商线路速率这张表的角度是某个外设出问题时最可能卡在哪。键盘鼠标再快也追不上 USB 1.1 带宽这类设备几乎不会成为瓶颈NVMe 硬盘的标称速率只是接口速率实际受控制器、队列深度和碎片率影响。确定一个设备是输入还是输出决定了排错时看发送路径还是接收路径——这和教材里的定义是同一个问题只是换到了现代硬件尺度上。3. 运算器与控制器的分工CPU 的取指-执行骨架3.1 运算器负责算控制器负责排教材把运算器定义成对二进制数进行算术运算和逻辑运算的设备控制器是指挥计算机所有设备协调工作、保证信息处理按预定目标和步骤进行的设备。这两个部件合称中央处理器。要理解这个划分可以把 CPU 想象成流水线车间运算器是机床负责加法、减法、与、或、非、移位控制器是调度负责从存储器取指令、翻译指令、安排操作数来源和结果去向。实际硅片上运算器对应 ALU 和整数/浮点执行单元控制器对应指令译码器、程序计数器 PC 和微程序控制器。一条指令的执行路径是PC 给出指令地址从内存取回指令字译码后控制信号打开对应数据通路ALU 完成一次计算结果写回寄存器或内存。这套取指—译码—执行—访存—写回的循环就是教材里按预定的目标和步骤进行的具体形态。3.1.1 为什么控制器效率比主频更影响性能一个常见误区是认为 CPU 性能完全由运算器决定。实际上控制器决定流水线能不能填满分支预测失误时流水线要冲刷重取代价是几十个周期白费。现代 CPU 的分支预测、乱序执行、寄存器重命名本质都是控制器侧在做文章。教材只写了控制器指挥协调但性能分析时真正该盯的是分支预测失误率和缓存未命中率。perf stat跑一次就能看到这两项比盯着主频数字靠谱得多。把 lscpu 的字段和教材概念对照起来能看到控制器和运算器在系统视图里是怎么被描述的lscpu 字段对应教材概念说明Architecture指令集体系结构CPU 认识的指令集合Socket(s)CPU 物理个数一块主板上插了几颗 CPUCore(s) per socket运算器执行核心数每颗 CPU 里几个独立完整核心Thread(s) per core控制器调度上下文超线程一个核心维护两套上下文CPU(s)逻辑处理器总数操作系统看到的可调度单位3.2 用 lscpu 把方块图映射到真实机器把教材的 CPU 概念落到本机常规做法是用lscpu读架构参数# 查看 CPU 架构、核心数、线程数、缓存大小 lscpu # 只看关键字段 lscpu | grep -E Architecture|Model name|Socket|Core|Thread|CPU\(s\)|Cache输出中Architecture对应指令集体系结构Model name是型号Socket是物理插槽数Core(s) per socket是每个插槽核心数Thread(s) per core是每个核心线程数CPU(s)是逻辑处理器总数。Cache行的 L1/L2/L3 就是存储体系里速度最快那一层的实物。教材里内存是正在使用的数据存放地这句话在 L1 缓存面前还要再提一级CPU 直接打交道的是缓存内存反而是被缓存拖着走的。程序慢时先查缓存命中率而不是直接判定内存不足。3.2.1 写脚本校验逻辑核数计算CPU(s)通常等于Socket × Core(s) per socket × Thread(s) per core写个脚本核对顺带理解字段关系sockets$(lscpu | awk /^Socket/{print $2}) cores$(lscpu | awk /^Core\(s\) per socket/{print $4}) threads$(lscpu | awk /^Thread\(s\) per core/{print $4}) calc$((sockets * cores * threads)) actual$(lscpu | awk /^CPU\(s\)/{print $2}) echo 计算值$calc 实际值$actual if [ $calc -eq $actual ]; then echo 一致; else echo 不一致检查超线程或内核隔离; fi脚本先取三个字段做整数乘法再和逻辑 CPU 总数比对。不一致时多半是内核启动参数里有isolcpus隔离了部分核心或者容器运行时限制了 CPU 视图。这个判断把教材里运算器和控制器协调工作落到了可验证层面逻辑核数量对不上本身就是控制器侧配置与运算器侧硬件不一致的信号。4. 内存储器与外存储器的分界ROM、RAM 与 1024 进制容量4.1 内存储器与外存储器的速度差来自物理机制教材把内存定义为存放正在使用的程序和数据外存是存放暂不使用的程序和数据并用喝水杯与暖壶作比喻喝水时把水从暖壶倒入杯子倒水过程就是数据从外存调入内存。这个比喻至今成立只是规模变了。程序启动时要先把可执行文件从磁盘搬进内存CPU 直接从内存取指令程序退出后内存空间释放数据落回外存。Linux 的free和df正好对应这两个层次# 内存视角总量、已用、缓存、可用 free -h # 外存视角文件系统挂载与占用率 df -hTfree -h的available列才是新进程可申请的内存量它把buff/cache中可回收部分也算进去很多新手误读成缓存吃光内存。df -hT的Type列区分 ext4、xfs 等文件系统Use%超过 90% 时写入延迟会明显上升。两层命令对着看才能定位瓶颈是内存不足还是磁盘空间告急。两者的差异可以汇总成一张表维度内存储器外存储器容量小GB 级大TB 级存取速度快纳秒级慢毫秒级断电后数据易失RAM持久保持典型设备内存条、CPU 缓存硬盘、光盘、U 盘理解速度差异要在物理机制层面内存靠电容和晶体管存取无机械运动机械硬盘靠盘片旋转和磁头寻道慢在毫秒级固态硬盘没有机械运动但 NAND 写入要经过 FTL 映射和垃圾回收仍比内存慢一个数量级。所以看到磁盘iowait高先分清是机械盘寻道问题还是闪存写放大处理方向完全不同。4.2 ROM 与 RAM只读与随机存取的真实含义存储器内部还有一层分类ROM 和 RAM。教材说 ROM 出厂时已把信息写入集成电路用户无法更改RAM 既能读出也能写入内存条就是 RAM 实物。容易被忽略的是 RAM 里 Random 的含义——它指访问任意地址耗时基本一致而不是随便存取。相对的是顺序存取磁带必须从头卷到目标位置。磁盘是半随机磁头寻道后可以随机读写但寻道本身有延迟。现代计算机里 ROM 的角色被固件承担了一部分UEFI 固件放在 SPI Flash 里正常运行时不开放写通道这就是出厂写死、用户一般不改的现代形态。BIOS 设置界面能改的只是 NVRAM 里的配置变量固件本体仍是只读的。理解这一点就明白刷 BIOS 为什么会变砖那块 Flash 在运行时没有用户可写的通道刷写过程一旦中断就处于半空状态系统无法启动。教材里写内存容量现在一般为 256MB、512MB比较小那是 2003 年前后的水平。现在单条 DDR4 内存 16GB 起步但这不改变存储层次关系。内存容量翻倍的速度远低于软件内存占用的增长速度这也解释了为什么插了 64GB 内存还卡的机器瓶颈往往在外存交换或缓存命中率。判断内存够不够标准不是容量数字而是free -h里的available是否长期逼近 0同时iowait高企。注意RAM 的随机是寻址特性与按顺序访问相对。把随机存取说成随便存取会在排错时忽略地址映射层面的问题。4.3 容量单位 1024 进制与字符宽度的编码差异存储单位从小到大是 B、KB、MB、GB进制 1024。教材强调一个英文字母、数字、标点占一个字节一个汉字占两个字节。这个结论在 GBK 编码下成立在 UTF-8 下常用汉字占三个字节。用 Python 验证# 验证不同编码下的字节数差异 text AB中 print(len(text)) # 字符数输出 3 print(len(text.encode(UTF-8))) # UTF-8: A1, B1, 中3共 5 print(len(text.encode(GBK))) # GBK: A1, B1, 中2共 4同一句话先统计字符数再分别按 UTF-8 和 GBK 编码统计字节数。UTF-8 用变长编码表示 Unicode 码点汉字落在三字节区间GBK 是定长双字节编码汉字固定 2 字节。教材结论受时代限制现在的原则是先确认字符编码再谈占几个字节。做日志存储量估算时按 3 字节/汉字取值更保守不容易低估磁盘空间。4.3.1 为什么进制是 1024 而不是 1000教材直接给了结论单位进制 1024没说原因。根本原因在二进制寻址地址线每多一根寻址范围翻一倍2 的 10 次方是 1024恰好接近 1000于是借用了 KB、MB、GB 这些名字。硬盘厂商按 1000 进制标容量操作系统按 1024 进制换算所以 500 GB 硬盘在系统里显示大约 465 GB。这个差值约 7%不是故障是两套单位制的换算差。明白这个就不会在容量对不上时白查半天。5. 磁盘与磁盘驱动器用 /dev 设备文件验证概念边界5.1 磁盘是介质磁盘驱动器是读写设备教材最后的思考题是磁盘和磁盘驱动器一样吗答案是不一样。磁盘是存储介质本身软盘那张塑料片是磁盘硬盘里的盘片也是磁盘磁盘驱动器是放置磁盘、并对磁盘做读写的机械装置软驱是软盘的驱动器光驱是光盘的驱动器。磁盘驱动器对系统来说是输入输出设备它既向内存提供数据也把内存的数据写回磁盘。而磁盘本身只是被动保存信息的介质没有驱动器它就只是一块涂了磁层的圆片。5.2 设备文件是驱动器 介质的整体接口这个区别在 Linux 里直接对应/dev/sda这样的设备文件。/dev/sda代表的是磁盘驱动器和磁盘组成的整体可访问接口不是单纯介质。分区/dev/sda1是这个整体之上被文件系统管理的逻辑区域。排错时如果误把设备文件当纯介质就会忽略驱动器和控制器一侧的故障可能机械臂卡住、马达停转、SATA 线松动都发生在驱动器侧。一个直接的验证方法是看设备层的能力输出# 块设备树能看到磁盘整体与分区的从属关系 lsblk # 查看磁盘整体参数型号、扇区大小、容量 sudo fdisk -l /dev/sdalsblk输出里磁盘名下面是分区这个层级关系本身就是驱动器承载介质、介质上再划逻辑区的实物映射。fdisk -l的Disk model显示驱动器厂商和型号Sector size显示逻辑/物理扇区大小I/O size是内核读写的最小单位。当一块盘型号能正常读出、但容量字段异常时优先查 SATA 数据线和电源线再用smartctl -H看健康状态而不是直接判定盘片损坏——这个排查顺序的前提就是先分清磁盘介质和磁盘驱动器是两个部件。本文还有配套的精品资源点击获取