计算机科学导论
图灵模型
在讨论图灵模型之前,我们将计算机定义为一个数据处理器,可以认为他是一个接收输入数据、处理数据并产生输出数据的黑盒。图灵模型增加了一个额外元素——程序。输出数据依赖两方面内容:输入数据与程序,无论哪个改变,都会导致输出数据改变。
冯诺依曼模型
-
基于这个模型构造的计算机分为4个子系统:存储器、算术逻辑单元、控制单元、输入/输出单元。存储器用来存储程序和数据
,控制单元是对存储器、算术逻辑单元和输入/输出单元进行控制操作的单元。冯诺依曼模型中要求程序必须存储在内存中,数据和程序
都是以位模式(0和1序列)存储在内存中。
冯诺依曼模型中的一段程序由一组数量有限的指令组成,控制单元从内存中提取一条指令,解释指令,接着执行指令。指令按照顺序执行,当然指令可以请求控制单元以便跳转到后面的指令执行。
计算机组成
计算机由三部分组成:计算机硬件、软件和数据。当前计算机硬件基于冯诺依曼模型。
数字系统 - 数字系统定义了如何用独特的符号来表示一个数字,在不同系统中,数字有不同的表示方式。比如十进制系统(以10为底,每个位数对底数相乘,可以表示整数和小数)、二进制、八进制和十六进制。这些进制之间的转换,可以使用连乘法或者连除法对整数和小数部分进行处理。
数据存储
-
数据以不同的形式出现,如数字、文字、音频和视频。所有外部的数据类型的数据都采用统一的数据表示法转换之后存入计算机中,当数据从计算机输出时再还原回来。这种通用的模式称为位模式。位
(bit)是存储在计算机中的最小单位,它是0或者1。为了表示不同的数据类型,应该使用位模式,长度为8的位模式被称为一个字节
(byte)。为占用较少的空间,数据在存储到计算机中之前通常会被压缩。
无符号整数就是没有符号的整数,它介于0到无穷大之间,通常计算机都定义一个最大无符号数的常量,称为最大无符号数,它的值是2的n次方减一。通常我们先把一个整数转化成二进制,如果二进制位数不足n位,则在左边补0。当要存储的整数的位数大于n位,就会发生溢出。无符号整数表示法可以提高存储效率,因为不用存储符号位,很多场景中使用无符号整数,如寻址
(地址从0到存储器总字节),为其他数据类型排序
等。相对地,有符号数可以通过符号位+绝对值来表示,但是几乎所有计算机都是使用二进制补码
来存储有符号整数。有两种方法来处理小数点:定点
和浮点
。
存储文本
在任何语言中,文本片段都是该语言中某种意义的一个符号。我们可以用位模式表达任何一个符号。现在问题是,在一种语言中,位模式到底需要多少位来表示一个符号?这主要取决于该语言集中有多少符号。位模式长度和符号之间是对数关系,如果需要2个符号,位模式长度为是1位。不同位模式集合
被设计用于表示文本符号,比如ASCII和unicode。unicode的不同部分被分配用于表示不同语言的符号。如今ASCII已经成为unicode的一部分。
存储音频
音频是模拟数据的例子,当我们讨论用计算机存储声音时,我们是说存储一个音频信号的密度。如果我们不能记录一段间隔内的音频信号的所有值,至少可以记录其中的一些,采样意味着我们在模拟信号上选择数量有限的点来度量他们的值并记录下来,每秒40 000个样本的采样率对音频信号来说是足够好的。这意味着我们可能要为每一秒的样本存储40 000个真实的值,为每个样本使用一个无符号数会更简便。编码的主流标准是MP3,它采用每秒44 100个样本以及每样本16位,再使用人耳无法识别的方法进行压缩。
存储图像
存储在计算机中的图像使用两种不同的技术:光栅图
或矢量图
。当我们需要存储图像时,就用到了光栅图,一张照片由模拟数据组成,类似于音频信息,不同的是数据密度随着空间而变化,而不是因时间而变化。这种情况下采样通常被称作扫描,样本称为像素。解析度
指的是对于每英寸的方块线条需要记录多少像素,如果解析度够高,人眼中不会出现图像的不连续。色彩深度
用于表示像素的位的数量,对颜色的感觉是我们的眼睛如何对光线的响应。光栅图有两个缺点:即文件尺寸太大和重新调整图像大小有麻烦,放大光栅图因为着放大像素,放大的图像看上去很粗糙。矢量图
编码并不存储每个像素的位模式,一个图像被分解成几何图形的组合,例如:线段、矩形或圆形。当要显示或打印图像时,把图像的尺寸作为输入传给系统,系统依照相同的公式画出图像,矢量图不适合存储照片图像的细微精妙。
存储视频
视频是图像在时间上的表示(称为帧)。我们只需要将图像转换成一系列位模式并储存,这些图像组合起来就可表示视频。
逻辑运算
逻辑运算指的是应用于同个模式下的二进制位,或在两个模式下的二进位的运算。位层次上的运算包括非运算、或运算、与运算和异或运算。模式层次上的运算就是将上述逻辑运算应用到n位中,移位运算
通过移动模式中的位,使它们能向左移动或向右移动,分为逻辑移位运算和算术移位运算。逻辑移位运算用于无符号数,在n位模式中,逻辑右移代表最右位被丢弃,最左边填充0.循环移位表示没有位被丢弃,形成一个环。算术移位是用二进制补码表示的无符号数,算术右移被用来对整数除以2.
计算机组成
中央处理单元(CPU)用于数据的运算。它有三个组成部分,算术逻辑部分(CLU)、控制单元、寄存器。算术逻辑单元(CLU)
对数据进行逻辑、移位和算术运算(加减乘除)。寄存器分为数据寄存器、指令寄存器和程序计算器。数据寄存器用来存储输入数据和运算结果,计算机在CPU中使用十几个寄存器来提高运算速度。CPU的主要职责是从内存中逐条地取出指令,并将取出的指令存储在指令寄存器中,解释并执行命令。CPU计数器是程序计数器,程序计数器中保存着当前正在执行的指令。CPU的第三个部分是控制单元
,控制单元控制各个子系统的操作,通过从控制单元发送到其他子系统的信号进行。
主存储器
是计算机的第二个主要子系统,它是存储单元的集合,每一个存储单元都有唯一的表示,称为地址
。数据以称为字的位组的方式在内存中传入和传出,字可以是8位,16位,32位,甚至是64位。在存储器上存取每个字都需要相应的标识符,尽管程序员通过命名的方式来区分字,但在硬件层次从上,每个字都是通过地址来标识的。存储器的类型主要有两种,RAM和ROM。随机存取寄存器
(RAM)是计算机主存中的主要组成部分,RAM可读可写,但是断电后就丢失,ROM的内容是由制造商写进去的,用户只能读但是不能写,它的优点是非易失性。计算机用户需要许多的存储器,有其是速度快且价格低廉的存储器,但是这样的存储器通常不便宜,因此需要一种折中的办法,解决办法是采用存储器的层次结构,当对速度要求很严苛的时候使用少量高速存储器,用适量的中速存储器存储经常需要访问的数据,用大量的低速存储器存储不常访问的数据,主存就属于这一类。
计算机的第三个子系统是IO子系统,可以分为存储设备和非存储设备。两个最常见的非存储设备是键盘与显示器。存储设备可以存储大量的信息以备后用,他们比主存便宜得多,断电信息也不会丢失。
CPU和内存之间通常由称为总线的三组线路连接在一起,他们分别是:数据总线、地址总线和控制总线。IO设备不能直接与连接CPU和内存的总线相连,需要通过中介器件。
程序执行
CPU通过重复的机器周期
来执行指令程序中指令,一个简化的周期包括3步:取指令、译码和执行。在取指令阶段,控制单元系统将下一条要执行的指令复制到CPU的指令寄存器,被复制的指令的地址被保存在程序计数器中,复制完成后,计数器将自动加1,指向下一条指令的内存地址。机器周期的第二个阶段是译码阶段,当指令置于指令寄存器后,该指令将由控制单元负责译码,指令译码的结果是产生一系列系统可以执行的二进制代码。指令译码完毕后,控制单元发送任务命令到CPU的某个部件,这就是执行。
计算机通过命令将数据从IO设备传输到CPU和内存,因此IO设备的运行速度要比CPU慢得多,因此CPU和IO设备之间需要同步,有三种方法可以进行同步:程序控制输入/输出,中断控制输入/输出,直接存储器存取。在程序控制输入/输出中,采用最简单的一种同步:CPU等待IO设备,CPU中和IO设备的数据传输是通过程序中的指令实现的,当收到传输指令,CPU停止工作直到数据传输结束为止,CPU不断查询IO驱动器状态,如果设备做好传输准备,那么数据将被传到CPU。中断控制输入/输出是CPU收到传输指令后没有停止工作,当IO设备准备好时,它通知(中断)CPU。第三种方法是直接存储器读取(DMA),CPU发信息给DMA,这些信息包括传输类型(输入或输出),内存起始地址以及传输字节数,由DMA作为CPU代理。
网络
网络是硬件和软件的组合,它把数据从一个地方发到另一个地方。链路是数据从一个设备到另一个设备的通信通道,为了进行通信,两个设备必须使用某种方式连接到同一个链路。术语物理拓扑是指网络在物理上的布置方式,网络的拓扑是所有链路和设备间关系的几何表示。TCP/IP协议包括多层,应用层允许用户访问网络,它提供对电子邮件,远程文件访问和传输、浏览万维网的支持。传输层负责整个消息的进程到进程的传输——建立客户到服务器的传输层的逻辑通信,服务器的IP地址对于传输是必须的,另外我们需要另一个地址来标识服务器进程,这称为端口号,服务器进程使用众所周知的端口号,而客户端进程使用传输层指定的临时端口号。传输层的一个职责是多路复用和解多路复用,可以类比为邮递员将邮件交给门卫分发给住户。传输层同时负责拥塞控制和流量控制。网络层负责单个数据包从源主机到目的主机的发送,网络层的主协议是因特网协议(IP),当前版本是IPv4,但IPv6也在使用(ip数更多)。数据链路层负责数据帧的节点到节点的发送(用数据帧封装数据包,在包头增加路由器的链路层地址)。物理层完成在物理介质上传输二进制流所需要的功能,在数据链路层上传送的单元是帧,而物理层传输的是二进制位(把位转成信号)。