《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理
1.2计算机组成及基本原理
1.2.1硬件组成
这里说的计算机主要指微型计算机,俗称电脑。一般我们见到的有台式机、笔记本等,另外智能手机、平板也算。有了一台计算机,我们就能做很多事情了,比如我在写这篇博客。那么一台计算机内部构造是什么样的?是怎么工作的呢?下面我就简单的阐述一下,尽量让大家能够快速、简单的了解。
记得笔者第一台电脑,是大学二年级的时候自己攒的,清楚的记得CPU是赛扬766,15寸的纯平显示器,整个宿舍只有我一台电脑,每天都可以玩拳皇97,无限怀念啊……,对不起,有点跑题了。那么问题来了,现在买电脑直接买一台品牌机或笔记本就好了,只有一些发烧友会选择自己攒机,那么自己攒机,需要购买哪些配件呢?19年前,笔者攒机的时候,配件清单基本如下:CPU、主板、内存条、硬盘、电源、显卡、声卡、网卡、机箱、键盘、鼠标、显示器。后来工作中,笔者经常在公司客串任职网管一职,前前后后攒过上百台台式机,也可谓老司机了。现在攒一台台式机,配件清单基本还是这些,只是配件升级换代更加牛×了。我费了九牛二虎之力,从网上找来了这些配件的图片,供大家观赏:
部件 |
图片 |
说明 |
CPU |
全称中央处理器(central processing unit),相当于计算机的大脑。主流厂商为Intel和AMD |
|
主板 |
又称母版,全身布满了各种元器件的插槽以及各种芯片,其他元器件都需要连接到主板上。现代很多元器件会直接焊接到主板上,例如声卡、显卡、网卡甚至CPU和内存 |
|
内存条 |
顾名思义,就是用来存储数据的,只不过是计算机在工作时才发挥作用,因此是热存储。一般容量较小,目前家用机4G-16G左右,但是存取速度非常快 |
|
硬盘 |
英文名:Hard Disk Drive,简称HDD,也是用来存储数据的,可以永久保存数据,因此是冷存储,容量相比内存大的多,存取速度比内存小 |
|
显卡 |
连接显示器和主板的元器件,承担输出显示图形的任务,有时候会集成在主板上。主流显卡的显示芯片主要由NVIDIA(英伟达)和AMD(超微半导体)两大厂商制造。分别称为N卡和A卡 |
|
机箱 |
可以理解为一个外包装盒子,把其他元器件装到这个盒子里,统称为主机,外形可以做的很炫酷,可以装逼 |
|
显示器 |
顾名思义,就是显示数据、图形、视频的一块屏幕 |
|
键盘 |
||
鼠标 |
对硬件不是很熟悉的朋友,还是一头雾水吧。没办法,接下来,我只能搬出一位大师:冯·诺依曼来镇住你们,下面是他的帅照:
他是美籍匈牙利数学家,1945年3月他在共同讨论的基础上起草了一个全新的“存储程序通用电子计算机方案”--EDVAC(Electronic Discrete Variable Automatic Computer的缩写)。这对后来计算机的设计有决定性的影响,特别是确定计算机的结构,采用存储程序以及二进制编码等,至今仍为电子计算机设计者所遵循。以此概念为基础的各类计算机通称为冯·诺伊曼机。
一个典型的冯·诺伊曼机的硬件框架图如下所示(现代计算机以存储器为中心,早期的以运算器为中心):
上面这个图啥意思?别急,我们接下来,会慢慢的、一点一点的说明。
首先,我们先来听一下冯大师对计算机的定义:
- 计算机由运算器、存储器、控制器、输入设备和输出设备组成。
- 指令和数据均用二进制数表示,并且以同等地位存放于存储器内,可以按地址寻访。
- 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
- 指令在存储器内按顺序存放。通常指令是顺序执行的,在特定情况下,可以根据运算结果或根据设定的条件改变执行顺序。
- 机器以运算器为中心,输入输出设备与存储器间的是数据传送通过运算器完成。
不得不佩服冯大师,经过了几十年,现在计算机几乎还是这样的,只是变成以存储器为中心了。上图中各个部件基本功能我们列表说明:
部件 |
功能 |
运算器 |
完成算数运算和逻辑运算,并将运算结果暂存在运算器内 |
存储器 |
存放数据和程序 |
控制器 |
控制、指挥程序和数据的输入、运行以及处理运算结果 |
输入设备 |
将人类熟悉的信息形式转换为机器能识别的信息形式 |
输出设备 |
将运算结果转换为人类熟悉的信息形式 |
经过几十年的发展,现在计算机把运算器和控制器集成在一个芯片上,统称中央处理器(Central Processing Unit,CPU,是不是很熟悉了)。把输入输出设备简称为I/O设备(Input/Output Equipment),攒机清单中的键盘、鼠标就是输入设备,显示器、显卡就是输出设备。存储器分为主存储器(Main Memory,MM)和辅助存储器,攒机清单中的内存条就是主存,可以直接和CPU交换信息,硬盘就是辅存。
因此,我们可以认为现代计算机由三个部分组成:CPU、I/O设备及主存储器。CPU和主存储器合起来可以称为主机(就是包在机箱内的),I/O设备又可以称为外部设备。我们给现代的计算机也画一个框架图:
同样,我们针对现在计算机框架,也给出一个功能说明表:
部件 |
功能 |
算数逻辑单元(ALU) |
受CU控制,完成算数运算和逻辑运算 |
控制单元(CU) |
解释存储器中的指令,发出各种操作命令来执行指令 |
主存储器 |
受CU控制,存放数据和程序 |
输入设备 |
受CU控制,将人类熟悉的信息形式转换为机器能识别的信息形式 |
输出设备 |
受CU控制,将运算结果转换为人类熟悉的信息形式 |
到此为止,我们就基本了解了现代计算机的硬件基本组成及每一个部件的基本作用了。
1.2.2工作基本原理
上面我们已经大致了解计算机的硬件组成了,那么这些硬件是如何配合工作的呢?为了能够形象的说清楚这个问题,我们先细化一下计算机组成的框架图:
哇塞,一下多了这么多英文字母部件,看着晕菜了!没办法,这还算少的了,硬着头皮往下讲吧,先来说明一下主存储器。
1.2.2.1主存储器
大家应该都有过网上购物的经历,我们在网上买了一双限量版球鞋,好期待快递快点到啊!真不巧,快递到了的时候我们不在家,于是快递员会把快递放到楼下的“蜂巢”里。等我们下班回到家后,第一件事就是扫码开箱取出球鞋。先别急着试鞋,观察一下,蜂巢的结构是怎么样的?首先一般一个小区会有好几个蜂巢箱,每个箱子由若干个蜂格组成,你的鞋子就默默的躺在某个箱子的某个格子里。
我们可以把主存储器看成是一个小区,实际上一个存储体由若干个存储单元构成,存储单元就类似于蜂巢箱,每个存储单元会分配一个编号,称为存储单元的地址。一个存储单元又由若干个存储元构成,就好比蜂格,有东西就是1,空着就是0。一个存储单元就可以存放若干个0和1,我们把一个存储单元的存储元数量称为存储字长。一般存储字长规定为8位,16位,32位等。这样,一个存储字就是一串0和1组成的二进制数字串,例如一个16位的存储字:1011110010101111。这个存储字可以表示很多含义,具体以后会说明。主存的工作方式,就是按存储单元的地址找到存储单元,然后对存储字各个位进行存取(写入、读出)。那么这位又要问了,怎么按地址访问呢?问的好,这就是MAR存在的意义。
MAR(Memory Address Register)是地址寄存器,这个东西也是由存储元构成的,也就是说,MAR可以存放一串二进制数字串,这串二进制数字代表一个地址号。控制器就是通过MAR来寻找数据或程序存放的存储单元。MAR能表示多少个地址,由它的存储元数量即位数决定的,例如MAR的位数是16,那么它能表示的最大地址数量就是216=65536个地址(为什么?回头翻二进制去)。
MDR(Memory Data Register)是数据存储器,主要用来临时存放从某个存储单元取出来的代码或准备往某个存储单元存入的代码,因此,它的位数与存储字长相等。
随着硬件技术的发展,现代MAR和MDR一般都集成在CPU中了。
1.2.2.2运算器
顾名思义,运算器就是用作运算的,主要用来进行加减乘除。从图上我们可以看出由4个部分组成:ACC、MQ、ALU、X。ALU前面讲过,ALU是算数逻辑单元,ACC(Accumulator)叫做累加器,MQ(Multiplier-Quotient Register)乘商寄存器,X是操作数寄存器。ACC、MQ、X这3个都是寄存器,它们在做不同运算时,存放的数据也略有不同,我们先通过一张表直观的表示一下:
加法 |
减法 |
乘法 |
除法 |
|
ACC |
被加数、和 |
被减数、差 |
乘积高位 |
被除数、余数 |
MQ |
乘数、乘积低位 |
商 |
||
X |
加数 |
减数 |
被乘数 |
除数 |
接下来,我们简要分析一下加减乘除的运算过程。
- 加法:将ACC中的数值看做被加数,然后从主存中某个存储单元取出加数存放到X中,然后将ACC和X中的数相加,结果(和)保留在ACC中。
- 减法:将ACC中的数值看做被减数,然后从主存中某个存储单元取出减数存放到X中,然后将ACC减去X中的数,结果(差)保留在ACC中。
- 乘法:将ACC中的数值看做被乘数存放到X中,ACC清0,然后从主存中某个存储单元取出乘数存放到MQ中,然后将X和MQ相乘,结果(乘积)的高位保留在ACC中,低位保留在MQ中。
- 除法:将ACC中的数值看做被除数,然后从主存中某个存储单元取出除数存放到X中,然后ACC除以X,结果(商)保留在MQ中,ACC为余数
当然,不同的计算机的运算器结构会有不同,运算过程也会不同。
1.2.2.3控制器
学习控制器前,先要掌握一个概念:指令。指令就是机器能够识别的机器指令,也是二进制数,一般由操作码和地址码构成。操作码表示机器能够执行的各种操作,例如取数、存数、加减乘除、打印、停机等。地址码表示主存的存储单元的地址号。
控制器相当于指挥部,指挥各个部件协同工作。首先命令存储器读出一条指令,称为取指过程(取指阶段),接着对这条指令进行分析,指出该指令需要完成什么操作,并指明操作数的地址,称为分析过程(分析阶段),最后根据操作数所在的地址以及操作码完成某种操作,称为执行过程(执行阶段),这就是完成一条指令操作的取指、分析和执行3个阶段。
从图上可以看出,控制器由控制单元(CU)、程序计数器PC(Program Counter)和指令寄存器IR(Instruction Register)组成。PC用来存放当前将要执行指令的地址,并且可以自动加1,即可自动形成下一条指令的地址,数据来自MAR。IR用来存放当前的指令,数据来自MDR。IR中的操作码送至CU,地址码送至MAR。CU分析当前指令所需完成的操作,并发出操作命令序列,控制所有被控对象。
1.2.2.4I/O设备
I/O设备接收CU发出各种操作命令完成相应的操作。I/O设备主要通过接口与主机联系,例如常见的USB接口、VGA接口等。
1.2.3软件
通过上面的知识,我们已经基本知道计算机的硬件组成和工作原理。其实一台计算机光有硬件还不够,还需要软件来驱使它工作,即计算机由硬件和软件构成。
软件,就是人类事先编制好的具有不同特殊功能的程序。这些程序一般都会存放在各种外存中,例如硬盘、光盘等。软件一般分成2大类:系统软件和应用软件。系统软件主要用来管理计算机系统、监视各种服务、协调软、硬件资源等。操作系统就是系统软件,常见的有微软的Windows,苹果的Mac,Linux,安卓等。另外还有一些标准库、语言处理程序、数据库也属于系统软件。系统软件一般会直接操作硬件。应用软件就是用户根据自身需要编制的程序,例如Office、微信、王者荣耀等。应用软件一般会调用系统软件暴露出来的接口或其他应用软件的接口。我们可以通过一个图简单理解硬件、系统软件、应用软件的关系:
《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理的更多相关文章
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- UNIX环境高级编程--第一章 UNIX基础知识
第一章 UNIX基础知识 1.2 UNIX体系结构 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们将这种软件称为内核(kernel),因为 它相对较小,且 ...
- apue学习笔记(第一章UNIX基础知识)
总所周知,UNIX环境高级编程是一本很经典的书,之前我粗略的看了一遍,感觉理解得不够深入. 听说写博客可以提高自己的水平,因此趁着这个机会我想把它重新看一遍,并把每一章的笔记写在博客里面. 我学习的时 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之二
三.中断一个线程 一个拥有多个线程的Java程序要结束,需要满足两个条件之一:一是所有的非后台线程都执行结束了:二是某个线程执行了 System.exit() 方法.当你想要终结一个运行中的Java程 ...
- 第一章 UNIX 基础知识
1.1 Unix体系结构 OS定义为一种软件,它控制计算机硬件资源,提供程序运行环境,一般称其为内核(kernel),它体积小,位于环境中心. 内核的接口为系统调用(system call),共用函数 ...
- HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识
一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...
- Python 学习系列----第一章:基础知识
1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...
- iBatis第一章:基础知识概述 & MVC思想
一.java是一门十分受开发人员欢迎的语言,在开发语言排行榜中名列前茅,人们对其看法不尽相同,就我自身感受而言,我觉得java语言的主要优势体现在如下几方面:1.java属于开源语言,开发人员可以找到 ...
- 《Python基础教程》第一章:基础知识
如果希望只执行普通的除法,可以在程序前加上以下语句:from __future__ import division.还有另外一个方法,如果通过命令行运行Python, 可以使用命令开关-Qnew.此时 ...
- Web程序设计笔记-第一章:基础知识
1,Web服务器 (1)Web服务器操作 Web浏览器通过向服务器发送URL来与Web服务器进行通信.URL可以指定两种不同资源中的一种:某个文件或者某个程序. Web客户机和Web服务器之间所有的通 ...
随机推荐
- web自动化 -- 框架
一.框架源码 https://github.com/jiangnan27/Autotest_UI_Open 二.框架大概介绍 Python3 + selenium3 + pytest5.3 + a ...
- 关于SignalR 进行双向多步对话
关于ASP.NET SignalR 解释百度百科是这样说的: ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...
- 第十二章 类加载器&反射
12.1.类加载器 12.1.1.类加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载.类的连接.类的初始化这三个步骤来对类进行初始化.如果不出现意外情况,JVM将会连续完成 ...
- Fortify Audit Workbench 笔记 Command Injection(命令注入)
Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...
- pandas_数据拆分与合并
import pandas as pd import numpy as np # 读取全部数据,使用默认索引 data = pd.read_excel(r'C:\Users\lenovo\Deskto ...
- PHP checkdate() 函数
------------恢复内容开始------------ 实例 检查一些日期是否是有效的格利高里日期: <?phpvar_dump(checkdate(12,31,-400));echo & ...
- PHP strcoll() 函数
实例 比较字符串: <?php高佣联盟 www.cgewang.comsetlocale (LC_COLLATE, 'NL');echo strcoll("Hello World!&q ...
- PHP convert_uuencode() 函数
实例 编码字符串: <?php$str = "Hello world!";echo convert_uuencode($str);?>高佣联盟 www.cgewang. ...
- 账本APP服务器端开发
账本APP开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 上一篇文章我们聊 ...
- RabbitMQ学习总结(1)-基础概念
1. 概念 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...