「MoreThanJava」计算机系统概述

  • 「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」
  • 当然 不论新老朋友 我相信您都可以 从中获益。如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!
  • 计算机是由 硬件软件 组件组成的复杂系统。希望通过本篇文章能够扩展和加深您对「计算机系统」的了解和认识。

Part 1. 硬件和软件

想一想《复仇者联盟》系列电影?

当你开始想《复仇者联盟》时,通常你都不会考虑任何关于 "物理" 方面的东西,例如影片是存储在哪一种物理媒介(例如 DVD、电影胶卷)上,或者是播放影片所需的物理设备(例如 DVD 机、电影放映机)。因为一张 DVD 是有实体的物理设备,而电影本身确是一种没有实体的数据信息。

硬件 这个词通常就用于称呼那些有实体的「物理设备」,如电视机、DVD 播放器和电脑等。

软件 则是指与 硬件 一起使用的「数据信息」,如电影、音乐、小说、网页、计算机程序等。

「数据信息」是非常有趣的东西,你此刻正在查看的网页、浏览的视频,它们的实际数据可能存储在中国乃至世界的任何一个角落。在数据从源头的物理设备复制到你的物理设备之前,可能已经辗转复制了成几百次,最终到达浏览器并交由系统渲染,在屏幕上还原出这些数据。

硬件组成

计算机系统的主要 硬件组成 是:

  • CPU(处理器);
  • 主要存储器(内存);
  • 辅助存储器(硬盘);
  • 输入设备(如键盘、鼠标);
  • 输出设备(如显示器);

对于典型的台式计算机来说,CPU、主存、辅存、电源加上其他支持的硬件设备(如光驱,也就是放光盘的设备)通常都是放在金属外壳中,上述的这些组件也都是连接到俗称「主板」的计算机电路板上,而各种输入输出设备则通过暴露在金属外壳背面的连接器连接。

当然排除部分比较硬核的「搞机玩家」,如「鞋盒低成本版」:

再比如「终极水冷」:

主板

主板是用来连接其他硬件的「桥梁」。

如果把电脑比作是航空母舰,那么主板就是航母主体,其他控制中心、动能装置、武器设备等都必须安装在这个航母上才能协同使用,缺一不可。

我们来看一个典型的主板组成,这里只介绍一些重要常用的组件。(完整的可以参看上方图片下面的链接)

图中 1 -> CPU 插槽

CPU 插槽(英语:CPU socket)是计算机里主板上固定住 CPU 并导通电气讯号的一种插槽。不同 CPU 系列使用不同插槽。

图中 4 -> 内存插槽

内存插槽是指主板上用来插内存条的插槽。

DDR4 内存条(第四代内存条)拥有与 DDR3、DDR2 或 DDR 内存条相同的外观,但是 DDR4 内存条插槽的缺口与 DDR3、DDR2 或 DDR 内存插槽不同,以防止插入错误的内存条。

  • PS:这里只展示了 ASUS X99-DELUXE 的内存安装方式,不同主板的内存安装方式可能不同,具体请按照主板说明书进行,否则系统将可能无法启动

图中 5 -> PCI 扩展插槽

凡是显卡、网卡、声卡和 SCSI 卡等符合 PCI 接口规格的设备,都可以使用这些 PCI 扩展插槽。

图中 9&10 -> 主板电源插槽

这些电源插槽用来连接一个 ATX +12V 电源。24-pin 插槽用于主板供电,8-pin 插槽用于 CPU 供电。

电源所提供的连接插头已经过特别设计,只能以一个特定方向插入主板上的电源插槽。找到正确的插入方向后,仅需稳稳地将之套进插槽中即可。

图中 11 -> 后侧面板连接端口

图中 12 -> USB 连接插槽

这个插槽用来连接 USB 模块,可在前面板或后侧连接端口扩展 USB 模块。

USB 连接插槽分为 USB 2.0 和 USB 3.0。

  • 注意: 请勿将 1394 排线连接到 USB 2.0 插槽上,同理,也不要将 USB 2.0 排线接到 1394 插槽上,这么做可能会导致主板的损毁。

图中 14 -> SATA 设备连接插槽

这些插槽可支持使用 Serial ATA(SATA)排线来连接 SATA 硬盘和光驱。

PS:上面是一些常见的主要组成,其结构会因不同主板而又略微的不同,例如有些主板没有显示器接口(独立显卡)。

CPU(中央处理器)

CPU 常常被比喻为计算机系统的 "大脑",这非常符合。

处理器 执行计算机系统的 所有基本计算。其他组件则是通过执行诸如 「存储数据」「将数据移入和移出处理器」 之类的工作来促进计算。但是处理器是发生基本动作的地方。

处理器非常努力,但同时它也不那么"聪明",它唯一要做的就是执行老板(正在运行的程序)的命令(指令),它从来不问那些命令到底是做什么,只负责执行。这也就是为什么程序和 CPU 之间存在一个称为「操作系统」的中间人的原因。

  • (Ps: 关于 CPU 其他知识我们会在之后来详细说。)

Hz 代表什么?

通常我们讨论 CPU 时,都会说这个 CPU 的是多少多少赫兹的,它其实 代表的就是 CPU 执行指令的速度(≈运行速度)

每个 CPU 都有一个非常简单但非常重要的组件,它被称为 时钟。其唯一的目的就是 按一致的方式打开关闭 电信号,就像是您的心脏每秒跳动一次一样,时钟也会周期性地产生高电压信号和低电压信号。

1 Hz 表示每秒 1 个周期,也就是每秒产生一个高压信号一个低压信号,3 Ghz 也就是表示每秒 3 千万个周期。因此,如果一条指令需要 5 个时钟周期才能完成,则 CPU 的时钟越快,该指令将被执行得越快。(但现在 CPU 的快慢并不能简单考虑 Hz 大小,还得附加考虑"多核"和每个周期内能够完成的工作量的因素)

CPU 可以有多快?

普通台式计算机可以在不到百万分之一秒的时间内执行一条指令,即使是真空中传播的光,在这段时间内也只能走 10 厘米左右,而超级计算机(在所有计算机中速度最快)可以在不到十亿分之一秒的时间内执行一条指令!

CPU 的基本要素

  1. 寄存器: 寄存器是一个很小的地方,用于保存处理器的数据。寄存器用于存储信息,例如指令,存储地址和任何类型的数据,例如位序列或任何字符等。处理器的寄存器应足够大以存储所有给定的信息。64 位处理器应至少具有 64 位寄存器和 32 位处理器的 2 位寄存器。寄存器是所有存储设备中最快的。
  2. L1和L2高速缓存存储器: 高速缓存存储器是一种类型的存储器,位于处理器的芯片中,或者可以通过总线单独连接。高速缓冲存储器的用途是存储程序指令,这些指令被软件一次又一次地用于操作。当 CPU 处理数据时,首先将数据查找到高速缓存中。如果找到了数据,则它将相应地使用该数据;如果未找到,则处理器开始在较大的内存中查找,这实际上是耗时的。高速缓存的成本很高,但速度确实很快。

CPU 如何执行程序指令 | 简单原理

典型的 CPU 可以简单看成由 「控制单元」「逻辑单元」 组成。

在执行一条指令之前,必须将程序指令和数据从输入设备或辅助存储设备放入内存中,一旦必要的数据和指令存储在内存中,中央处理单元就会对 每个指令 执行以下四个步骤:

  1. 「控制单元」从「存储器」中获取指令;
  2. 「控制单元」对指令进行解码(确定含义),并指示将必要的数据从存储器移至「逻辑单元」;
  3. 「逻辑单元」执行算术或逻辑指令;
  4. 「逻辑单元」将该运算的结果存储在存储器或寄存器中;

控制单元最终指示存储器将结果释放到输出设备或辅助存储设备。这一套步骤下来就被称为 「机器周期」。单个机器周期指令可以由大量子指令组成,每个子指令必须至少占用一个时钟周期(上面提到的一个上下脉冲时间)。

每种类型的中央处理单元都 只能理解一组特定的指令,称为 「指令集」。正如人们可以理解许多不同的语言一样,每种不同类型的CPU都有其可以理解的指令集。

将指令和数据存储在内存中是一回事,而控制单元能够找到它们又是另一回事。它是如何做到的?

每个指令和每个数据在「存储器」中的位置都有一个地址标识。也就是说,每个位置都有一个地址号码,就像公寓前面的邮箱一样。并且,与邮箱一样,位置的地址号保持不变,但是位置的内容(指令和数据)可能会更改。

但是,与邮箱不同,内存位置只能容纳固定数量的数据;地址只能容纳固定数量的字节-在现代计算机中通常为两个字节。

32 位 和 64 位?

您可能已经听说过 N 位处理器的概念。最常见的是 32 位和 64 位处理器。这些位确定传入和传出处理器的 数据量大小。具体会有以下几点不同:

一、处理数据的能力不同

32 位和 64 位表示 CPU 一次能处理的最大位数,理论上来说,64 位系统处理的数据效率比 32 位更高,相当于单车道和双车道开车似得,双车道单位时间可以有更多的车辆通行。但需要内存跟上,而且程序本身也是 64 位编译才能发挥 64 位系统的优势。

二、支持的内存不同(寻址能力不同)

简单来说,32 位系统的最多能在是 232=4294967296=4 (GB) 左右的内存里面找程序所需要的数据,而 64 位系统这就最大支持 128 GB 内存;

三、软件兼容性不同

32 位系统无法运行 64 位软件,64 位系统可以安装多数 32 位软件,以前因为大部分软件都是基于 32 位架构环境下开发,所以 64 位系统的兼容性不如 32 位。但现在 64 位兼容性也很强了,基本都是可以兼容各类软件了,而且 64 位的病毒都少了很多。

特别是大量消耗内存的软件,如 PS,64 位和 32 位软件在 64 位系统里区别很大,64 位真的快许多。

存储器

内存和硬盘的差别

内存 中通常放置的是您 短期存储 的数据,而 硬盘 中存放的则是 长期存储 的数据。

想象一下您正在办公,并且您拥有一个 办公桌 和一个 文件柜,那么此时办公桌的区域则代表了内存,文件柜则代表了硬盘。

刚开始工作不久,你就把需要使用的物品放置在了您的办公桌上,以便于使用,但由于桌子大小的限制,不能在桌上存放太多的东西。必须保留但不一定很快就可以访问的项目存储在文件柜中。根据文件柜的大小的不同,可以存储许多东西。

内存和硬盘之间的重要区别是前者在计算机关闭时会清除。另一方面,无论关闭计算机多少次,硬盘都将保持不变(除非物理破坏)。因此,类似于办公桌和文件柜,您离开办公室时在办公桌上留下的所有文件都会被丢弃。文件柜中的所有内容都将保留。

数据如何表示?

在主存储器和辅助存储器中,信息都以 位(bit) 模式存储。这是一个单一的开/关值,仅开/关这两种值是可能的。(也就是俗称的「二进制」)

有很多方法可以实现这一点,下面我们来列举一些:

  • 机械上电器的开关(如电灯开关);
  • 电线上的高低电压;
  • 单个晶体管;
  • 磁盘表面的一小部分;
  • 磁带表面的一小部分;
  • 卡上打了一个洞;(如上一篇文章提到的制表机)
  • More..

在主存储器和辅助存储器中,位的实现方式不同,但是从逻辑上讲,两种类型的存储器都存储表示为位模式的信息。

字节 | 存储单位

一位能表示的信息太少了,以至于通常计算机内存被分成八位一组,每个八位组称为一个 字节

一个字节大约足以容纳一个字符。 当某些数据需要八个以上的位时,将使用几个字节。通常,四个字节用于表示整数。

通常,我们需要用成千上百,甚至上亿,几十亿的字节来表示某一些数据,这样大数量的字节数我们又规定了一些单位,如下表所示:(仅列出常用单位)

名称 字节数 2 的幂
字节 1 20
千字节(kilobyte,俗称 1 Kb) 1024 210
兆字节(megabyte,俗称 1 Mb) 1,048,576 220
十亿字节(gigabyte,俗称 1 Gb) 1,073,741,824 230
万亿字节(terabyte,俗称 1 Tb) 1,099,511,627,776 240

硬盘

计算机系统的硬盘将字节记录在磁性表面上,就像录音带的表面一样。 数据的记录(写入)和读取使用类似于磁带的读写头完成。

上图显示了一个可移动臂末端的一个磁盘和一个读/写头。手臂沿着磁盘的半径移动。由于磁盘正在旋转,它将在磁盘上的圆形轨道中记录数据。稍后,要读取数据,必须将其移至正确的位置,然后必须等待直到旋转磁盘将数据放置到位。与录音带一样,无需更改即可读取数据。记录新数据时,它将替换以前在该位置记录的任何数据。与音频磁带不同,读/写磁头实际上并不接触磁盘,而是略高于磁盘。(由于磁盘在计算机启动时一直在旋转,因此如果读写头接触到磁盘,磁盘很快就会磨损。)

通常,称为计算机系统硬盘的组件包含许多单独的磁盘和上述的读/写磁头。磁盘的两面都涂有磁性材料(因此,每个磁盘都有两个读/写磁头),并且所有磁盘都连接到一个主轴上。所有磁盘和磁头均密封在无尘的金属容器中。由于硬盘的操作涉及机械运动(比电子过程要慢得多),因此读写数据要比使用主存储器慢得多。

文件(File)

硬盘(和其他辅助存储设备)用于长期存储大信息块,例如程序和数据集。通常,硬盘内存被组织成 文件,一个文件是已经被赋予了名称,并存储在辅助存储器的 信息集合。该信息可以是程序,也可以是数据。

文件中的信息表示方式与任何数字信息相同——它由位组成,通常分为八位字节。文件通常很大;它们的大小以千字节(Kb)或兆字节(Mb)为单位。

文件和操作系统

主存储之外的大多数数据集合都组织成文件。跟踪所有这些信息是操作系统的工作之一。如果计算机是网络的一部分,那么跟踪所有计算机上的所有文件是一项艰巨的工作,并且涉及网络上的所有操作系统。

应用程序(包括您可能编写的程序)不会直接读取,写入,创建或删除文件。 由于操作系统必须跟踪所有内容,因此所有其他程序都要求操作系统执行文件操作任务。例如,假设某个程序刚刚计算出一组数字,则需要保存它们。以下可能发生的操作方式:

  1. 👨‍💻‍程序: 要求操作系统创建一个名称为RESULTS.DAT的文件

  2. 💻操作系统: 获取请求;查找磁盘的未使用部分并创建一个空文件。程序完成时会被告知。

  3. 👨‍💻‍程序: 要求操作系统将数字保存在文件中。

  4. 💻操作系统: 从程序的主内存中获取数字,并将其写入文件。程序完成时会被告知。

  5. 👨‍💻‍程序: 继续进行任何操作。

文件类型

就硬盘而言,所有文件都是相同的。在电子级别,包含程序的文件和包含数据的文件之间没有区别。所有文件都被命名为字节集合。当然,这些文件的用途不同。操作系统可以获取程序文件,将其复制到主内存中,然后开始运行。操作系统也可以获取数据文件,并在需要时将其信息提供给正在运行的程序。

然而,我们通常会看到文件名的最后一部分(扩展名)通常会显示该文件的 预期用途。例如,mydata.txt 的扩展名 .txt 意味着该文件应被用作文本(即字符)的集合,program.exe 扩展名 .exe 就标识着该文件是一个 "可执行文件",也就是一个程序,在 Windows 中可以直接运行。

当文件以非预期用途使用时会发生什么?例如,如果您尝试在 “.EXE” 文件上使用文字处理器,该怎么办?

这当然会出现问题。因为 .exe 文件中包含的信息使用的是文字处理器无法理解的位模式表示。

就像遇到某人说您不懂的语言一样。他们发出的声音与您相同(大部分情况下),但是它们发出的声音(单词和句子)的模式不同。

软件

计算机软件由 程序数据 组成的。

程序 包含用于处理器(CPU)的指令。数据 可以是程序需要的任何信息:字符数据,数字数据,图像数据,音频数据和无数其他类型。但是,程序和数据之间的区别并不像您想象的那么清晰。

记住这个重要的基本思想: 程序和数据都以相同的方式被保存在计算机存储器中。也就是说在存储器中(主存储器和辅助存储器),程序和数据并无任何区别。

举个例子:这就像你写或者画东西在纸上一样,对于纸来说,并无什么特别的区分。

可以使用相同的电子的存储方式来保存数据和程序对于计算机科学来说是一个重要的概念,这意味着计算机系统提供可以根据需求来将内存用于程序或数据。

程序类型

有两类程序:应用程序、系统程序。

应用程序 是人们用来完成工作的程序。系统程序 用来使硬件和软件平稳运行。

重要的系统程序是操作系统。当计算机运行时,操作系统始终存在。它协调计算机系统其他硬件和软件组件的操作。操作系统负责启动应用程序,运行它们并管理它们所需的资源。当应用程序正在运行时,操作系统将为其管理硬件的详细信息。例如,当您在键盘上键入字符时,操作系统将确定它们打算用于哪个应用程序,并完成将其放置在那里的工作。

一些 「嵌入式系统」 不使用操作系统,而是直接在处理器上运行其程序。例如:交通灯、微波炉、洗衣机等等。

用于台式计算机的现代操作系统几乎都带有用户界面,该界面使用户能够通过使用窗口,按钮,菜单,图标,鼠标和键盘轻松地与应用程序(以及与操作系统本身)进行交互。例如:Unix,Linux,Android,Mac OS 和 Windows。

操作系统

操作系统是一个复杂的程序,可以使计算机系统的硬件和软件组件保持协调和运行。就像一家小商店的所有者一样,他通过拜访客户,接受送货,在架子上储货,进行簿记等来保持一切井井有条。店主必须及时处理出现的任务。没有店主,商店就无法运转。

大多数计算机系统都可以运行多种操作系统中的任何一种。例如,大多数基于奔腾的计算机都可以运行 Linux 或 Windows 操作系统。尽管某些计算机有多个操作系统,但通常在一个计算机系统上仅安装一个操作系统。无论如何,一次只能控制一个操作系统。计算机用户可以在计算机打开时进行选择,并且操作系统将一直处于控制状态,直到计算机关闭为止。

首次启动计算机时,硬件会自动加载操作系统并开始运行。此过程称为 启动。之所以说这是个奇怪的术语,是因为操作系统本身参与了其自身的运行,这一过程就像某人 “自己拉自己一把” 一样。操作系统运行后,将用于启动应用程序。

一个应用程序启动时的场景

  1. 用户要求运行应用程序。

    • 通过单击图标,选择菜单或通过其他方式可以完成此操作。
  2. 操作系统确定应用程序的名称。

  3. 操作系统在存储应用程序及其存储数据的硬盘上找到文件。

  4. 操作系统发现主内存的未使用部分足以容纳应用程序。

  5. 操作系统在主内存的该部分中复制应用程序及其数据。

    • 硬盘上的软件未更改;主内存保存磁盘上的内容的副本。
  6. 操作系统为应用程序申请资源。

  7. 最后,操作系统启动应用程序运行。

总结: 在应用程序运行时,操作系统在后台管理资源,为应用程序进行输入和输出,并使其他所有程序保持运行。

Part 2. 网络(Network)

一个计算机网络由连接的两台或更多台计算机组成,以便它们可以交换数据和程序。当计算机是网络的成员时,它运行的程序和使用的数据可以位于网络上其他计算机的硬盘上。

在商业和工业环境中,大多数计算机都在网络上。在联网计算机上运行的操作系统必须管理其分享的网络资源(以及管理其所有其他职责)。操作系统能够找到存储在其他网络计算机上的程序和数据,并将它们复制到其自己的主内存中。

网络中的每台计算机都有一个网络接口卡。这是一种通过电缆发送和接收数据的输入/输出设备。网络上计算机的网络接口卡通过电缆连接在一起。

局域网

局域网(LAN)是局限于相对较小区域的网络。它通常局限于地理区域,例如写作实验室,学校或建筑物。

每台计算机都有一个其他计算机用来访问它的网络地址。通常,计算机共享一台打印机。局域网中也可能有一台功能特别强大的计算机,称为「服务器」,其硬盘上装有其他计算机可能需要的应用程序和数据。

广域网

广域网(WAN)连接较大地理区域的网络,例如四川到北京或世界各地。专用的越洋电缆或卫星上行链路可用于连接这种类型的全球网络。

广域网使用各种特殊的硬件来管理数据流。当两台计算机共享数据时,这些硬件使两台计算机直接连接在一起。实际上,两台计算机之间可能有数十个网络设备。但对于用户而言,使用 WAN 和 LAN 并无差别。

所有这些设备都 使用相同的方法来处理数据。没有通用的数据处理方法,大型网络将变得毫无希望。关于如何通过网络表示和传输数据的协议称为 「协议」。通常,大型网络使用称为 TCP / IP 的协议(用于传输控制协议/ Internet协议)。

互联网(Internet)

互联网包含所有连接在一起的计算机的一个庞大的全球网络。在这个庞大的网络上,每台计算机 必须具有 唯一的网络地址(称为 IP 地址),就像世界上的每部电话都具有唯一的电话号码(包括国家/地区代码和区号)一样。

例如这是一个典型的 IP 地址:149.152.21.203,IP 地址实际上是 32 位二进制数。联网设备使用这些地址在网络上路由信息。上面的示例显示了使用十进制数字写入这些位的标准方法(每 8 位转换成十进制并使用 . 隔开)。

但是,即使以十进制形式书写,该地址也无法被人类识别。万维网的功能之一是它允许人类使用 计算机名称而不是数字。例如:这是一个典型的计算机名称:wmyskxz.com。这就要容易记住的多,在 Web 浏览器中使用它时,它将自动转换为计算机 IP 地址的 32 个二进制数字。

全球资讯网(World Wide Web)

还记得我们上面提到的 重要思想 吗:程序和数据都以 相同的方式 保存在计算机内存中。计算机存储器(主存储器和辅助存储器)在存储程序和数据时没有区别。

通信设备也不区分程序和数据。就其而言,它就是所有信息,并且所有信息都以相同的方式传输。互联网就像是全球包裹递送服务。它关心的是将包裹从一个地址移到另一个地址,而不用担心包裹中的内容。

互联网提供硬件基础,而信息传输协议服务于万维网。

与任何数据一样,用于 Web 的数据也通过 Internet 传输。使 Web 数据与众不同的原因在于,它是针对 Web 浏览器(例如您可能正在使用的浏览器)而设计的。浏览器是一种程序,可以读取网页并以一种格式正确的方式显示它们。

网页是一组数据,其中包含有关如何在监视器上显示信息的信息。使用称为 超文本标记语言(HTML) 的语言来提供此信息 。如果要查看描述此页面的 HTML,您可以直接右击正在浏览的网页然后会看到「显示源代码」的选项。

参考资料

  1. Introduction to Computer Systems - http://programmedlessons.org/Java9/chap01/ch01_01.html
  2. How does the processor work - https://pmihaylov.com/how-does-the-processor-work/
  3. How Computers Work: The CPU and Memory - https://homepage.cs.uri.edu/faculty/wolfe/book/Readings/Reading04.htm
  4. What Is CPU (Central Processing Unit) And How It’s Work? - https://www.deskdecode.com/what-is-cpu-central-processing-unit-and-how-its-work/
  5. Computer Memory - http://programmedlessons.org/Java9/chap03/ch03_01.html
  6. 计算机原理-CPU到底有多快?内存:是我的250倍 - https://blog.csdn.net/pyf09/article/details/95256493
  7. 电脑系统32位和64位的区别 - https://www.jianshu.com/p/d0e95bed5b60
  • 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
  • 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!

非常感谢各位人才能 看到这里,如果觉得本篇文章写得不错,觉得 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!

创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

posted @ 2020-06-01 07:18  我没有三颗心脏  阅读(513)  评论(0编辑  收藏  举报