首页 > 其他分享 >计算机科学

计算机科学

时间:2023-02-08 20:23:30浏览次数:39  
标签:计算机科学 RAM 矩阵 指令 内存 CPU 输入

一.  早期计算

1. 计算机的影响——信息时代

  • 出现了自动化农业与医疗设备
  • 全球化的通信和教育普及
  • 虚拟现实和无人驾驶汽车等新领域

2. 计算的历史

  • 公元前 2500 年,算盘出现,为十进制,功能类似一个计数器。
  • 公元前 2500 年-公元 1500 年:星盘、计算尺等依靠机械运动的计算设备出现
  • 公元 1613 年:computer 的概念出现,当时指的是专门做计算的职业,
  • 1694 年:步进计算器出现,是世界上第一台能自动完成加减乘除的计算器。
  • 1694-1900 年:计算表兴起,类似于字典,可用于查找各种庞大的计算值。
  • 1823 年:差分机的设想出现,可以做函数计算,但计划最后失败。
  • 19 世纪中期:分析机的设想出现,设想存在可计算一切的通用计算机。
  • 1890 年:打孔卡片制表机。原理:在纸上打孔→孔穿过针→针泡入汞→电路连通→齿轮使计数+1。

二、电子计算机

1. 电子计算机元器件的发展

  • 发展历程:继电器 --》 真空管 --》 晶体管
  • 继电器通过线圈和控制开关实现翻转,真空管通过一端热电子发射,一端吸引正电荷越过真空管的二极管,后面也出现了三极管等等,实现了机电==》电子的跨越
  • 晶体管主要运用半导体实现门电路控制,成本低,计算速度快

2. 电子计算机的发展

  • 1945 年 哈佛马克 1:使用继电器,用电磁效应,控制机械开关,缺点为有磨损和延迟。*最早还因为有虫子飞进去导致故障,引申出 bug=故障的意思
  • 1943 年 巨人 1 号:使用真空管(三极管),制造出世界上第一个可编程的计算机
  • 1946 年 ENIAC:第一个电子通用数值积分计算机
  • 1947 年 晶体管出现,使用的是固态的半导体材料,相对真空管更可靠
  • 1950s 空军 ANFSQ-7: 真空管到达计算极限
  • 1957 年 IBM 608: 第一个消费者可购买的晶体管计算机出现 

三、 布尔逻辑

二进制:true & false ==》 1 & 0

三个基本操作: NOT, AND, OR 与或非门,控制电流通过路径

1. NOT 操作

  • 作用:将输入布尔值反转。输入的 True 或 False,输出为 False 或 True。
  • 晶体管的实现方式:
    • 半导体通电 True,则线路接地,无输出电流,为 False
    • 半导体不通电 False,则输出电流从右边输出,为 True。

 

 

 

 

2. AND 门/与门

  • 作用:由 2 个输入控制输出,仅当 2 个输入 input1 和 input2 都为 True 时,输出才为 True,2 个输入的其余情况,输出均为 False。
  • 用晶体管实现的方式:串联两个晶体管,仅当 2 个晶体管都通电,输出才有电流(True)

 

 

 

 3. OR 操作

  • 作用:由 2 个输入控制输出,只要其中一个输入为 True,则输出 True。
  • 用晶体管实现的方式:使用 2 个晶体管,将它们并联到电路中,只要有一个晶体管通电,则输出有电流(True)

 

 

 4. 异或

  • 作用:2 个输入控制一个输出。当 2 个输入均为 True 时,输出 False,其余情况与 OR 门相同。
  • 先用一个 OR 门,将其与 AND 门并联,AND 门与 NOT 门串联,最后让 NOT 与 AND 门并联,获得输出。

 

 

  5. 逻辑门的符号表示

  • 非门:用三角形+圆圈表示
  • 与门:用 D 型图案表示
  • 或门:用类似 D 向右弯曲的图案表示
  • 异或门:用或门+一个圆弧表示

 

四、二进制

1. 基本概念

  • 比特bit: 单个数字1或0 所占的位数
  • 字节byte: 一个字节代表8位数字,以八位为单位处理数据
    • eg. 二进制的 1011=1*2^0 + 1*2^1 + 0*2^2 + 1*2^3= 11(从右往左数)
    • eg: 二进制的 10110111

 

 

 

  •   byte 在电脑中的单位换算:
    • 1KB=2^10bit = 1024byte =1000B
    • 1TB=1000GB
    • 1GB=1000MB=10^6KB

2. 正数、负数、浮点数的表示

  •  整数:
    • 第 1 位:表示正负, 1 是负,0 是正(补码)
    • 其余 31 位/63 位: 表示实数
  •  浮点数(Floating Point Numbers):小数点可在数字间浮动的数(非整数)
    • 表示方法:IEEE 754 标准下用类似科学计数法的方式,存储十进制数值
    • 浮点数=有效位数*指数
    • 32 位数字中:第 1 位表示正负,第 2-9 位存指数。剩下 23 位存有效位数
    • eg.625.9=0.6259(有效位数)*10^3(指数)

3. 编码规范

  • ASCII 
    •  美国信息交换标准代码-ASCⅡ,用数字给英文字母及符号编号
    • 内容:7 位代码,可存放 128 个不同的值, eg. A--65, a--97

 

 

 

  • UNICODE
    • 统一所有字符编码的标准, 解决 ASCⅡ不够表达所有语言的问题。
    • 内容:UNICODE 为 17 组的 16 位数字,有超过 100 万个位置,可满足所有语言的字符需求。

五、 算术逻辑单元

1、基本概念

  • 简称 ALUArithmetic&Logic Unit, 用大写V表示
  • 组成:ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元(Arithmetic Unit 和 Logic Unit)
  • 作用:计算机中负责运算的组件,处理数字/逻辑运算的最基本单元
  • 图示内容包括:
    • 输入 A,B,operation code 操作码:1000加法,1100 减法等
    • 输出 0, 1
    • 标志:溢出、零、负数

      

 

 

 2. 算术单元

  • 基本组件:由半加器、全加器组成,半加器、全加器由 AND、OR、NOT、XOR 门组成
  • 半加器:用于计算个位的数字加减
    • 输入:A,B
    • 输出:总和sum,进位carry

        

 

 

  • 全加器:用于计算超过 1 位的加法(ex:1+1+1),由于涉及进位,因此有 3 个输入(C 充当进位)

  

 

 

 

 

 

 

  • 如何用半加器与全加器做 8 位数的加法(行波加法器)
    • 半加器处理第 1 位数(个位)的加法,得到的和为结果的第 1 位
    • 将输出的进位,输入到第 2 位用的全加器的输入 C 中
    • 将第 2 位的 2 个数用全加器计算,得到的和为结果的第 2 位(sum)
    • 将第 2 位计算的进位连接到百位的全加器输入 C 中
    • 在第 3-8 位上,循环第 3-4 步的操作。

 

 

 *现在电脑使用的加法器叫“超前进位加法器” 

  • 算术单元支持的其他运算

 

 

 

  •  溢出:在有限的空间内,无法存储位数过大的数,则称为溢出

 3. 逻辑单元

  • 作用:执行逻辑操作,如 NOT、AND、OR 等操作,以及做简单的数值测试

六、 寄存器和内存

1. 基本概念

  • 锁存器:锁存器是利用 AND、OR、NOT 逻辑门,实现存储 1 位数字的器件。
  • 寄存器:1 组并排的锁存器
  • 矩阵:以矩阵的方式来存放锁存器的组合件,n*n 门锁矩阵可存放 n^2 个锁存器,但同一时间只能写入/读取 1 个数字。(早期为 16*16 矩阵)
  • 位址:锁存器在矩阵中的行数与列数。eg.12 行 8 列  1100 1000
  • 多路复用器:一组电线,输入 2 进制的行址&列址,可启用矩阵中某个锁存器
  • 内存(RAM):随机存取存储器,由一系列矩阵以及电路组成的器件,可根据地址来写入、读取数据

2. 锁存器

通过设置和复位操作存储1位数字,需要同时输入两个数字信号,用两根线控制设置和复位操作

 

 

3. 门锁

只用 1 根电线控制数据输入,用另一根电线来控制整个结构的开关,当允许写入线输入为1 时更新数字

4. 寄存器

门锁只能存储一位数字,并排使用门锁,存储多位数字,1个n字节大小的数字需要用到 输入1+输出n+控制n

5. 门锁矩阵

  • 当行和列同时为1时才会写入
  • n*n 的矩阵有 n^2 个位址,则可以存储 n^2 个数。
  • 1 个n*n矩阵只可表示出 1位数,n 个矩阵组合在一起,可记录 n 位数。
  • 如1 个 8 位数,会按位数分成 8 个数,分别存储在 8 个矩阵的同一个位址中;8 个16*16矩阵,则可以记录 256 个 8 位数字。

 

通俗理解:16*16 的门锁矩阵,可理解为 1 个公寓,1 个公寓 256 个房间。8 个门锁矩阵并排放,则有了 8 个公寓。规定每一个公寓同一个编号的房间,都有一样的标记(地址),共同组成 8 位数字。那么 8 个公寓就能存 (8*256 / 8)个数字。

原因:16*16 的门锁矩阵虽然有 256 个位置,但每次只能存/取其中 1 个位置的数字。因此,要表示 8 位数字,就需要同时调用 8 个门锁矩阵。

使用方法:在多路复用器中输入位址,x 行 x 列(2 进制),即可点亮 x 行 x 列的锁存器。 

举例:

 

行列数

矩阵 1

矩阵 2

矩阵 3

矩阵 4

矩阵 5

矩阵 6

矩阵 7

矩阵 8

1 行 5 列

1

0

1

1

0

0

1

0

2 行 3 列

0

1

0

0

1

1

0

1

 

6. 内存

粗略定义:将一堆独立的存储模块和电路看做 1 个单元,组成内存方块,n 个内存方块组成内存模块。在一个电路板上所有的内存方块统称为内存(RAM)。 

七、 中央处理器

1、概念梳理

  • CPU(Central Processing Unit):中央处理单元,负责执行程序。通常由寄存器/控制单元/ALU/时钟组成。与 RAM 配合,执行计算机程序。CPU 和 RAM 之间用“地址线”、“数据线”和“允许读/写线”进行通信
  • 指令:指示计算机要做什么,多条指令共同组成程序。如数学指令,内存指令
  • 时钟:负责管理 CPU 运行的节奏,以精确地间隔,触发电信号,控制单元用这个信号,推动 CPU 的内部操作
  • 时钟速度:CPU 执行“取指令→解码→执行”中每一步的速度叫做“时钟速度”,单位赫兹Hz,表示频率
  • 超频/降频
    • 超频,修改时钟速度,加快 CPU 的速度,超频过多会让 CPU 过热或产生乱码
    • 降频,降低时钟速度,达到省电的效果,对笔记本/手机很重要 

2、CPU 工作原理

  • 必要组件
    • 指令表:给 CPU 支持的所有指令分配 ID
    • 控制单元:像指挥部,有序的控制指令的读取、运行与写入
    • 指令地址寄存器:类似于银行取号。该器件只按顺序通报地址,让 RAM 按顺序将指令交给指令寄存器
    • 指令寄存器:存储具体的指令代码

    

  • 过程
    • 取指令:指令地址寄存器发地址给 RAM  →  RAM发该地址内的数据给指令寄存器  →  指令寄存器接受数据
    • 解码:指令寄存器根据数据发送指令给控制单元   →  控制单元解码(逻辑门确认操作码)
    • 执行阶段:控制单元执行指令( →涉及计算时 →调用所需寄存器 →传输入&操作码给ALU执行)→调用RAM特定地址的数据→RAM将结果传入寄存器→指令地址寄存器+1

 

前4位是指令操作码,后四位是操作数的寄存器地址, 有些是两位两位表示寄存器

八、指令和程序

1. 基本概念

  • 指令:指示计算机要做什么的代码(机器码),多条指令共同组成程序。如数学指令,内存指令
  • 指令和数据都是存在同一个内存里的
  • 指令集:记录指令名称、用法、操作码以及所需 RAM 地址位数的表格
  • 程序:实现特定功能的一系列微指令集

2. 指令的执行

  • 原则:
    • RAM 每一个地址中,都存放 0 或 1 个数据
    • 特定的数字组合,就表示为一个指令,否则表示一个值
  • LOAD 指令
    • 计算机会按地址的顺序,读取 RAM 中所记录的指令/数据
    • 计算机接受到指令后,如 LOAD_A,则通过数据线将数据传至寄存器 A

 

  • ADD 指令:ADD B A 指令告诉 ALU,把寄存器 B 和寄存器中的数字加起来,存到寄存器 A 中
  • JUMP 指令:
    • 遇到 JUMP 指令,程序会跳转至对应的 RAM 地址读取数据
    • JUMP 指令可以有条件跳转(如 JUMP-negative: 是负数才会跳转),也可以无条件跳转
  • HALT指令: 表明程序结束

3. 计算机指令长度

现代计算机有两种方式解决指令不够用的问题:

  • 最直接的是用更多位来表示指令,如 32 位或 64 位
  • 采用“可变指令长度”,令不同的指令的长度不同,尽量节约位数,假设 1 个字为 16 位,如果某指令不需要操作内存,则可以省去寻址的位数
  • 部分指令后面需要跟数据,如 JUMP,称为立即值。

九、高级CPU 设计

1. 基本概念
  • 缓存:在 CPU 中的小块 RAM,用于存储批量指令。为了不让 CPU 空等数据,在 CPU 内部设置了一小块内存,称为缓存,让 RAM 可以一次传输一批数据到 CPU 中。(不加缓存,CPU 没位置放大量数据)。缓存也可以当临时空间,存一些中间值,适合长/复杂的运算
  • 缓存命中:想要的数据已经在缓存里
  • 缓存未命中:想要的数据不在缓存里
  • 脏位:缓存里每块空间,有个特殊标记,叫脏位,用于检测缓存内的数据是否与 RAM 一致,标志储存在缓存中与 RAM 不一致的数据
  • 多核处理器:一个 CPU 芯片中,有多个独立处理单元。他们整合紧密,可以共享一些资源

2. 现代 CPU 如何提升性能:早期通过加快晶体管速度,来提升 CPU 速度。但很快该方法到达了极限;后来给 CPU 设计了专门除法电路+其他电路来做复杂操作:如游戏,视频解码

3. 空等:从 RAM 到 CPU 的数据传输有延迟(要通过总线,RAM 还要时间找地址、取数据、配置、输出数据)

4. 缓存同步:缓存同步一般发生在 CPU 缓存已满,但 CPU 仍需往缓存内输入数据。此时,被标记为脏位的数据会优先传输回 RAM,腾出位置以防被覆盖,导致计算结果有误

5. 指令流水线:让取址→解码→执行三个步骤同时进行。并行执行指令,提升CPU性能。使得原本需要 3 个时钟周期执行 1 个指令,现在只需要 1 个时钟周期

6. 存在问题:数据具有依赖性 跳转程序  ==》 解决方法:乱序运行、预测分支(高端 CPU)

 

7. 提升CPU性能,减少空等==》 批量处理多条指令==》 多核多CPU

 

十、 早期编程方式

1、早期编程

早期,电脑无内存的概念,人们通过打孔纸卡等物理手段,输入数据(数字),进入计算机。
  • 打孔纸卡/纸带:在纸卡上打孔,用读卡器读取连通电路,进行编程。原因,穿孔纸卡便宜、可靠也易懂。62500 张纸卡=5MB 数据
  • 插线板:通过插拔线路的方式,改变器件之间的连接方式,进行编程
  • 面板开关(1980s 前):通过拨动面板上的开关,进行编程。输入二进制操作码,按存储按钮,推进至下一个内存位,直至操作完内存,按运行键执行程序。(内存式电脑)

2. 现代计算机基础结构——冯诺依曼计算机

冯诺依曼计算机的标志是,一个处理器(有算术逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存

十一、 编程语言发展与基础

1. 基本概念

  • 伪代码:用自然语言(中文、英语等)对程序的高层次描述,称为“伪代码”
  • 助记符: 规定好的指令,汇编指令,如LOAD_A 14 使得可以不用每次都从伪代码翻译成二进制语言
  • 汇编器:用于将汇编语言装换成机器语言。一条汇编语句对应一条机器指令,将助记符转成二进制
  • 编程发展:高级编程语言→编译器→汇编码/机器码
  • 安全漏洞&补丁:在 1940 年代,是用打孔纸带进行的,但程序出现了问题(也就是漏洞),为了节约时间,只能贴上胶带也就是打补丁来填补空隙,漏洞和补丁因此得名

2. 早期编程发展

  • 早期二进制写代码:先在纸上写伪代码,用"操作码表"把伪代码转成二进制机器码,翻译完成后,程序可以喂入计算机并运行
  • 汇编器&助记符: 1940~1950s,程序员开发出一种新语言, 更可读 更高层次(汇编码)。每个操作码分配一个简单名字,叫"助记符"。但计算机不能读懂“助记符”,因此人们写了二进制程序“汇编器"来帮忙,汇编器读取用"汇编语言"写的程序,然后转成"机器码"
  • 最早高级编程语言“A-0”:1950s,为释放超算潜力,葛丽丝·霍普博士,设计了一个高级编程语言,叫 "Arithmetic Language Version 0",一行高级编程语言  可以转成几十条二进制指令。但由于当时人们认为,计算机只能做计算,而不能做程序,A-0 未被广泛使用 
  • 高级编程语言 FORTRAN:1957 年由 IBM1957 年发布,平均来说,FORTRAN 写的程序,比等同的手写汇编代码短 20 倍,FORTRAN 编译器会把代码转成机器码。但它只能运行于一种电脑中
  • 通用编程语言——COBOL:1959 年,研发可以在不同机器上通用编程语言。
  • 高级语言:"普通面向商业语言",简称 COBOL:每个计算架构需要一个 COBOL 编译器,不管是什么电脑都可以运行相同的代码,得到相同结果

3. 现代编程语言:

  • 1960s 起,编程语言设计进入黄金时代。
  • 1960:ALGOL, LISP 和 BASIC 等语言
  • 70 年代有:Pascal,C 和 Smalltalk
  • 80 年代有:C++,Objective-C 和 Perl
  • 90 年代有:Python,Ruby 和 Java

4. 编程基础

  • 变量、赋值语句 :如a=5 ,其中a为可赋值的量,叫做变量。把数字 5 放a里面.这叫"赋值语句",即把一个值赋给一个变量 
  • if、while、for循环
  • 函数:打包好的方法或者子程序,调用函数即可执行

5. 数据结构

  包括但不限于数组,列表,向量,字符串,矩阵,结构体,指针,节点,链表,队列,栈,树,图等

6. 图灵问题

  • 可判定性问题:是否存在一种算法,输入正式逻辑语句 输出准确的"是"或"否"答案
  • 美国数学家 阿隆佐·丘奇,开发了一个叫"Lambda 算子"的数学表达系统,证明可判定性问题的算法不存在
  • 图灵机:只要有足够的规则,状态和纸带,图灵机可以解决一切计算问题。和图灵机一样完备,叫做图灵完备。
  • 停机问题:证明图灵机不能解决所有问题
  • 图灵测试:向人和机器同时发信息,收到的回答无法判断哪个是人,哪个是计算机,则计算机达到了智能程度。

十二、 软件工程

  • 对象:当任务庞大,函数太多,我们需要把函数打包成层级,把相关代码都放一起,打包成对象。对象可以包括其他对象,函数和变量。
  • 面向对象编程:把函数打包成对象的思想叫做“面向对象编程”,面向对象的核心是隐藏复杂度,选择性的公布功能。
  • API:当团队接收到子团队编写的对象时,需要文档和程序编程接口(API)来帮助合作。API控制哪些函数和数据让外部访问,哪些仅供内部
  • public、private:表明哪些是共享的,哪些是内部成员调用的
  • 集成开发环境(IDE):程序员用来专门写代码的工具
  • 调试(debug):IDE帮你检查错误,并提供信息,帮你解决问题,这个过程叫调试
  • 文档与注释:文档一般放在一个叫做README的文件里,文档也可以直接写成“注释”,放在源代码里,注释是标记过的一段文字,编译代码时,注释会被忽略。注释的唯一作用是帮助开发者理解代码
  • 版本控制:版本控制,又称源代码管理。大型软件公司会把会把代码放到一个中心服务器上,叫"代码仓库",程序员可以把想修改的代码借出,修改后再提交回代码仓库。版本控制可以跟踪所有变化,如果发现bug,全部或部分代码,可以"回滚"到之前的稳定版
  • 质量控制:测试可以统称“质量保证测试”(QA),作用是找bug
  • beta alpha:beta版软件,即是软件接近完成,但没有完全被测试过,公司有时会向公众发布beta版,以帮助发现问题。alpha是beta前的版本,一般很粗糙,只在内部测试

十三、 集成电路和摩尔定律

  1. 分立元件与数字暴政:一开始,计算机都有独立组件构成,叫"分立元件" , 然后不同组件再用线连在一起,这会导致计算机的构成很复杂,这个问题叫做数字暴政
  2. 集成电路与仙童半导体
    • 封装复杂性:与其把多个独立部件用电线连起来,拼装出计算机,不如把多个组件包在一起,变成一个新的独立组件。这种新的独立组件就叫集成电路(IC),仙童半导体(用硅做成)让集成电路变成了现实。
    • 为了不用焊接或用一大堆线,发明了印刷电路板(PCB),通过蚀刻金属线的方式把零件连接到一起
  3. 光刻0421:即用光把复杂图案印到材料上。我们把一片薄片状的硅叫做晶圆,通过一系列生产步骤,将晶圆表面薄膜的特定部分除去的工艺叫做光刻

暴露出的氧化层被光刻胶保护,用特质酸熔解暴露氧化层,在进行掺杂操作,在氧化层做通道,用细小金属导线连接不同晶体管,再次用光刻胶和光掩模蚀刻出小通道,放一层铝或铜进行金属化。叠加并重复上述操作,得到晶体管

 

 

  4. 摩尔定律:每两年左右,得益于材料和制造技术的发展 ,同样大小的空间,能塞进两倍数量的晶体管。

  5. 进一步小型化芯片的难点:由于光的波长限制,精度已到极限。加上量子隧穿效应:当晶体管非常小,电极之间可能只距离几个原子,电子会跳过间隙,会产生漏电问题

十四、 操作系统概念

  • 操作系统(OS):是一种程序,不过它有操作硬件的特殊权限,可以运行和管理其他程序
  • 批处理:一个程序运行后会自动运行下一个程序
  • 外部设备:和计算机连着的其他设备,如打印机
  • 设备驱动程序:为了使所写程序和不同类型的电脑兼容,我们需要操作系统充当软件和硬件之间的媒介,更具体地说,操作系统提供程序编程接口(API)来抽象硬件,叫“设备驱动程序”。程序员可以用标准化机制,和输入输出硬件(I/O)交互
  • 多任务处理:操作系统能使多个程序在单个CPU上同时进行的能力,叫做“多任务处理”
  • 虚拟内存:多程序处理带来了一个程序所占用内存可能不连续的问题,导致程序员难以追踪一个程序,为了解决这个问题操作系统会把内存地址虚拟化,这叫“虚拟内存”。
  • 动态内存分配:虚拟内存的机制使程序的内存大小可以灵活增减,叫做“动态内存分配”,对程序来说,内存看上去是连续的。
  • 内存保护:给每个程序分配单独的内存,那当这个程序出现混乱时,它不会影响到其他程序的内存,同时也能有效地防止恶意程序篡改其他程序,这叫做内存保护。
  • 多用户分时操作系统(Multics):用来处理多用户同时使用一台计算机的情况,即每个用户只能用一小部分处理器,内存等,
  • Unix:把操作系统分成两个部分,一个是操作系统的核心部分,如内存管理,多任务和输入/输出处理,这叫做“内核”,第二部分是一堆有用的工具,比如程序和运行库。

十五、内存

 

  • 延迟线存储器:利用线的延迟在线里存储数据,又叫顺序存储器或者循环存储器,但不能随意调出数据, 难以增加内存密度

  • 磁芯:利用电磁感应原理,但成本高

  • 磁带、磁鼓、硬盘:访问速度慢

  • 内存层次结构:在计算机中,高速昂贵和低速便宜的内存混合使用以取得一个平衡软盘:除了磁盘是软的,其他都和硬盘一样,好处是便携

  • 光盘:原理:光盘表面有很多小坑,造成光的不同反射,光学传感器会捕获到,并解码为 1 和 0 

  • 固定硬盘(SSD):里面是集成电路

标签:计算机科学,RAM,矩阵,指令,内存,CPU,输入
From: https://www.cnblogs.com/forever-fate/p/17103170.html

相关文章