由於大学跟研究所读的是电机工程,所以对於软件业来说我是个半路出家的人,所以在公司与同事交流或是合作的情况下常常会觉得听不懂他们所说的一些专业术语,於是觉得自己需要把资讯工程的一些基础补一补,於是找了 computer science - AN OVERVIEW 这本满经典的计算机概论来读,以这个平台做个笔记整理我觉得重点的地方,以便我之後可以回来复习,也希望可以帮助到跟我一样半路出家的人,可以不用啃原文书直接参考我的笔记即可。
而本章是对计算机概论的资料处理做一个整理与笔记,主要是介绍电脑是如何处理资料并且与周边装置进行沟通,会探索一些计算机架构的基本原理,至於本章有使用 python 撰写一些程序,这个部分我就会先跳过。
电脑控制兹了的电路称为中央处理单元 (Central processing unit)
或 CPU (处理器)
。
CPU 包含三个主要部份
Registers
主要是将资料暂存在 CPU 中。为了传送位元字串,CPU 与主记忆体之间由一条称为汇流排
的线路连接。
如果要将储存在记忆体的数值进行加总,为行使以下的步骤:
加法电路
将刚取出的两个值进行加总,将输出结果存放在另一个暂存器中快取记忆体 (Cache memory): 让资料传输变成是在暂存器与快取记忆体之间,任何资料的变动都先存放在快取记忆体中,等待适当的时机再一起存回主记忆体,可以让 CPU 更快速地执行计算,避免与主记忆体进行沟通而造成时间上的延迟。
能够对 CPU 进行操作的指令以及编码系统称为机械语言 (machine language),机械指令可以分为三类:
要求资料从一个地方移动到另一个地方的指令,资料在移动的时候很少会删除原有位置上的资料,传输指令比较像是复制资料
而非移动资料。
LOAD
STORE
资料传输指令中有一组很重要的指令群,用来与 CPU 和主记忆体之外的装置进行通讯命令,比如键盘, 萤幕...,这些称为输入输出指令 (I/O instructions)
。
顾名思义负责执行各种运算,包含基本运算
、布林运算 (AND, OR, XOR...)
、资料位移运算 (SHIFT, ROTATE...)
包含一些引导程序执行的指令,比如 JUMP
, BRANCH
是用来引导 CPU 去执行指令清单的任何一个指令,
除存在记忆体中的程序会复制到所需要的指令到 CPU 中,一但到了 CPU 就会将每个指令进行解码
并确实执行,除非有 JUMP
这个指令,否则都是按照储存在记忆体中的顺序执行。
CPU 中有两个专用的暂存器: 指令暂存器 (instrucvtion register)
和 程序计数器 (program counter)
,指令暂存器用於储存正在执行的指令,程序计数器储存下一个指令的位置。
而 CPU 会不断重复的执行三个步骤,这三个步骤就是所谓的机械周期 (machine cycle)
,这三个步骤分别为提取
, 解码
, 执行
。
电脑时脉 (clock): 称为振荡器电路,会产生
脉冲
以协调电脑内部的运作,脉冲越快电脑执行一个机械周期的时间也越快。
逻辑运算是有 AND
, OR
, XOR
他们有各自不同的功用。
主要的用途在能够将某个位元字串放入 0 而不影响另一个位元字串,这种 AND 运算的用途就是遮罩运算 (masking)
,遮罩运算的其中一组运算元称为遮罩(mask)
,用於决定另一组运算元中的那些位元会对结果有影响。
AND
运算也可以用来复制位元字串,其中非复制的部分为 0
,除了 AND 之外 OR
也可以用来产生一个位元字串的复制,只是非复制的部分要放置 1
,XOR
运算主要用於产生任何位元字串的补数
,任何位元组与全为 1
的遮罩进行 XOR 就能产生该位元组的补数
11111111
XOR 10101010
--------------
01010101
所以 XOR 可以用来反转 RGB 点阵图图像的所有位元,产生一个颜色反转的彩色图像,明亮的地方变深色反之亦然。
循环与位移的运算提供了在暂存器中移动位元的方法,常用来解决排比 (alignment)
问题,假设一个暂存器含有一位元组的空间,如果要将该位元组往右移动一个位元,可以想像最右端的位元从边缘掉落,这样最左边就多了一个空位,那麽如何处理掉落的那个位元呢?有一种方式是将最右边掉落的位元补在左边空出的位置,这种方式称循环位移 (circular shift)
也称为 循环 (rotation)
,所以如果同一个位元组往右移动 8 次,其结果就是原是的位元字串。
另一种方式是把掉落的位元舍弃,把最左边空位补上 0
,这种方式称为逻辑位移 (logical shift)
,不管哪种位移方式都要注意保留正负号位元,能够保留着正负号位元不变的位移有时候称为算数位移 (arithmetic shifts)
。
虽然运算式中有加法
, 减法
, 乘法
, 除法
,但减法可以藉由加法
和取补数
来模拟,此外乘法是重复的加法而除法则是重复的减法,所以有些小型的 CPU 只设计了加法或是只设计加法与减法。
主记忆体和 CPU 是电脑的核心,本章将探讨电脑的核心该如何与周边设备 (大容量储存装置、键盘、滑鼠...) 进行沟通,甚至是如何与其他电脑进行沟通
电脑与其他装置的通讯一般是经由一个中介装置
来控制,这个装置称为控制器 (controller)
,控制器透过电线连接到电脑内部的装置或透过电脑後面的连接阜 (port)
与电脑外部的装置相连,控制器可将电脑与周边设备的讯息和资料进行转译在来回传递,每个控制器与电脑的通讯都是通过汇流排连接,与 CPU 和主记忆体之间所连接的汇流排一样。
在某些电脑的设计中,CPU 和主记忆体沟通用的 LOAD
和 STORE
指令,也可以直接用在控制器的资料传输与接受上面,在这种情况控制器会对应到一组唯一的地址
,并主记忆体会刻意跳过这个地址,因次当 CPU 通过汇流排要 STORE 一个位元字串到一个指定给控制器的地址时,该位元字串会被写到控制器
而不是记忆体中,同样的如果 CPU 要读取这个位置的资料的话,会 LOAD 控制器从而接收资料而非记忆体,这种通讯方式称为记忆体对映输入输出 (memory-mapped I/O)
。
由於控制器连接到电脑的汇流排上,他可以在 CPU 没有使用到汇流排的毫微秒空挡与记忆体进行通讯,这种能存取主记忆体的能力称为记忆体存取 (direct memory access, DMA)
,比如要从磁碟中读取资料,CPU 可以传送编码过的位元字串到磁碟连接的控制器上并要求控制器读取磁碟中的资料在存入指定的记忆体区域,所以当控制器在处理资料的储存时 CPU 就可以趁这个空挡执行其他工作,可以不必为了等待速度较慢的资料传输而浪费计算资源。
不过使用 DMA
也会有缺点,如果 CPU 和控制器都需要使用到汇流排,那们他们之间的竞争会使汇流排成为效能上的一个障碍,称为范纽曼瓶颈 (von Neumann bottleneek)
。
当两个设备要进行双向沟同时,不能由其中一个设备盲目的传送资料给另一个设备,这样会让资料遗失的机率大幅增加,因次两个设备互相沟通需要有交握 (handshaking)
的过程,这是电脑与周围设备交换关於设备状况的资讯并协调彼此的运作,交握通常包含着一个状态字 (status word)
,是由周边设备产生出来的位元字串并传送给控制器,状态字是反映出这个周边设备的状态。
计算机设备通讯留两种路径处理:平行
, 串列
,这两种方法是指讯号是经由什麽分式传输
不同的线路
,这种方式可以快速的传送资料但需要相对复杂的通讯路径。单一线路
连接传送讯号,相较於平行传输只需要简单的路径。位元字串的传输速率是以每秒位元 (bits per second, bps)
来衡量,在英文缩写里小写 b 代表位元
大写 B 代表元组
。
最高传输速率取决於通讯路径的类别和应用的技术,最高传输速率通常相当於通讯路径的频宽
,虽然频宽也有容量的定义但当提到一个通讯路径有很高的频宽或提供宽频服务
时,意味着该通讯路径能提供高速的位元传输速率,同时也能负载大量的资讯。
<<: python入门学习 day 5 (占位符号使用及浮点数运算 )
>>: # 番外: 法喜充满,bug占满?? 当程序码遇到信仰
大家好,我是YIYI,今天要开始用Whimsical画架构图了~ 进入Whimsical 先透过【D...
第二十七天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,...
疫情後,公司调整部份员工仍维持远距工作,但开放员工外网连线容易让内网出现资安漏洞 如何确保员工在公...
本篇重点 Ticks 介绍及属性说明 使用 Pandas 将 Ticks 资料转换为 DataFra...
Vue.js 的网页是由元件组合而成,利用 HTML 元素重复使用元件。 图取自What are ...