计算机认知相关
2019-09-27 13:41:40 1 举报
AI智能生成
计算机认知
作者其他创作
大纲/内容
计算机的含义
计算机的发展趋势
巨型化
微型化
网络化
智能化
多媒体化
分子计算机
量子计算机
计算机发展史上不得不讲的人
巴贝奇( Charles Babbage )——通用计算机之父
图灵( Alan Turing )——计算机科学之父
约翰·阿坦那索夫( John Vincent Atanasoff )——电子计算机之父
冯·诺依曼( John von Neumann )——现代计算机之父
计算机硬件组成
主机
中央处理单元(CPU,Central processing unit)
运算器(Arithmetic Unit )
算术逻辑单元(Arithmetic and Logic Unit,ALU)
累加寄存器(Accumulator,AC)
数据缓冲寄存器 ( Data Register ,DR)
状态条件寄存器( Program Status Word ,PSW)
控制器(controller)
指令控制逻辑(Instruction control logic)
指令寄存器(Instruction Register,IR)
程序计数器(Program Counter,PC)
地址寄存器(Address Register,AR)
指令译码器(Instruction Decoder,ID)
时序控制逻辑(Sequential control logic)
总线控制逻辑(Bus control logic)
中断控制逻辑(Interrupt control logic)
寄存器组
内部总线
显卡(Graphics card)
集成显卡(integrated graphics card)
独立显卡(standalone graphics card)
主板
存储器(Memory)
内存
RAM(Random Access Memory)
静态RAM(Static RAM)
动态RAM(Dynamic RAM)
ROM(Read-only memory)
PROM(Programming ROM,可编程只读存储器)
EAROM(Electrically alterable Read-Only Memory,电可改写只读存储器)
EPROM(Erasable PROM, 可擦除的可编程只读存储器)
EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器)
外存
磁盘(Disk)
软盘(FIoppy Disk)
硬盘(Hard Disk)
按接口类型分
IDE/ATA硬盘
SCSI硬盘
光纤通道
SATA硬盘
按工作原理来分
固态硬盘(SSD)
机械硬盘(HDD)
混合硬盘(HHD、SSHD)
光盘(Compact Disc)
CD-ROM
CD-R
CD-RW
DVD
固态存储器(Solid State Memory)
虚拟内存技术(Virtual Memory)
电源
声卡
软驱
光驱
网卡
调制解调器(modem)
输入设备
键盘
鼠标
摄像头
触摸屏
扫描仪
光笔
......
输出设备
显示器
音响
打印机
绘图仪
......
编码(Coding)
进制
十进制(Decimal)
二进制(Binary)
八进制(Octonary)
十六进制(Hexadecimal)
位权
编码
为什么要编码
字符
字符集
字符编码
常见的编码体系
ASCII码
EASCII码
Base64
以编码字符'Man'为例(从上往下进行)
如果要编码的字节数不能被3整除
ISO8859系列
GB2312系列
附加
BIG5
ANSI
Unicode
如图是0平面-基本多语言平面的一个分布情况,其中每个方格都代表着256个码点,一共有256个方格,最多的那部分粉色的方块就对应着中日韩的所有字符
UTF
UTF-8
特点含义
向上兼容性
回退和自动检查
前缀码
自同步
排序
编码规则
UTF-16
UTF-32
乱码
编码引起的乱码
1)这里我们在vscode中,新建txt文档然后键入编程猫三个字,然后选择ISO8859-1保存,我们知道,8859-1是单字节编码,然后我们重新用gb2312打开文件,可以看到结果是三个问号,这是为什么呢,我们用16进制文本编辑器打开这个文件,看看里面到底存的啥。
2)
3)发现里面存了3组3f,这是因为用8859-1编码时,将不在字符集范围内的字符统一用 3F 表示,3F 对应的字符为问号“?”,这种情况下形成的乱码是不可逆的,也就是说无论用什么解码方式都不能正确显示字符,即使你换回8859-1也无济于事。
解码引起的乱码
4)从新写入编程猫,然后用gb2312保存,然后用8859-1打开,会显示一堆西欧字母和数学符号,也就是乱码,我们再次用16进制编辑器看看发生了什么。
5)
6)里面有6个字节,这个是gb2312编码,为了验证,我们查看一下gb2312的码表,看看这三个字的编码分别是什么。
7)GB2312编码表直通
缺少字体库引起的乱码
不是乱码的乱码
浅谈计算机的储存
如何存储0和1
附:采用二进制的原因
如何存储数字
正数
以十进制数37为例,最终会以上面的二进制形式存储
负数
以刚刚的37为例,其二进制码为00100101,那么先对每个位置取反得到它的反码,就是11011010,然后将这个反码加1,那么就是11011010+ 00000001=11011011,最后得到的这个二进制就是00100101的补码,也就是-37的对应二进制表示形式,计算机存储-37就以这个二进制内容存储。
为什么要使用补码形式存储负数?
首先既然数字分为正负数,那么就需要有一位来存储区分正负数的标志,所以我们规定最高位为1时代表负数,最高位为0时代表正数。但是我们还需要分清楚无符号数和有符号数,比如如果是无符号数那么二进制的11111111就表示十进制的255,也就是说一个8位字节表示数的范围就是00000000-11111111,对应着十进制的0-255,但是对于有符号数的表示来讲,一个8位字节只能表示-128-127,因为最高位为0代表正数,那么最大是只能是01111111,而最高位为1代表负数则可以是10000000,也就是-128,所以在讨论的时候一定要分清是无符号数还是有符号数,否则一个二进制数就表示了两个不同的10进制数。
1.为什么不以原码的形式存储?
1)0有两个存储方式
2)正数和负数相加,结果不正确
2.原码行不通,之后又提出了反码的形式,那么反码为什么不可行呢?
1)正负数相加正确
2)0仍存在两种形式
3)最后人们又提出了补码的形式
1)解决了0有两种表现形式的问题
2)解决了正负数相加的结果不正确问题
如何存储字符
如何存储中文
如何存储所有字符
计算机语言
计算机语言的概念
计算机语言的发展史
1.首先要知道什么是自然语言。自然语言是我们人类交流的语言,包括汉语、方言、日语、英文、韩语等。自然语言能够承载的信息非常丰富,越是高级的编程语言越接近于自然语言。不同的自然语言,有其独特的语法规则。这些年,计算机科学家们一直研究如何能够让计算机更好的识别、理解、模拟自然语言,这是人工智能的一个研究方向领域。
2.汉语的基本组成单位是偏旁部首,英语的基本组成单位是26个字母,一个道理。
3.为了让大家能容易理解,我们把计算机拟人化一下。
假设要让计算机把11和22进行相加,编程人员需要对计算机“说”:“001001001110001111001。”计算机就明白啦,原来是让我把11和22进行相加。
后来大家觉的这样太麻烦了,人类就是这样,因为嫌上楼麻烦,发明了电梯。因为嫌走路麻烦,发明了汽车,火车,飞机。
对计算机讲机器语言太麻烦了,还容易出错,万一多输入了一个0或者少输入了一个1,那意思可能完全变了。研究计算机的前辈大牛们觉得机器语言太不好用了,也不知道折腾了多久,捣鼓出了汇编语言。如果用汇编语言对计算机说,把11和22进行相加,那就容易多了。
假设要让计算机把11和22进行相加,编程人员需要对计算机“说”:“001001001110001111001。”计算机就明白啦,原来是让我把11和22进行相加。
后来大家觉的这样太麻烦了,人类就是这样,因为嫌上楼麻烦,发明了电梯。因为嫌走路麻烦,发明了汽车,火车,飞机。
对计算机讲机器语言太麻烦了,还容易出错,万一多输入了一个0或者少输入了一个1,那意思可能完全变了。研究计算机的前辈大牛们觉得机器语言太不好用了,也不知道折腾了多久,捣鼓出了汇编语言。如果用汇编语言对计算机说,把11和22进行相加,那就容易多了。
4.ax是计算机内部一个存数字的“小盒子”,它有一个专业的名词叫做“寄存器”,有没有想到超市里面临时存东西的柜子,一个道理。
但计算机理解不了汇编语言,因为计算机只懂机器语言。所以,大牛们又设计了一种程序,叫做“汇编器”。
汇编器相当于一个翻译,把人类写好的汇编代码翻译成机器语言,这样子计算机就听懂了。
汇编语言的每一行语句都和机器语言相对应,所以汇编语言,我们可以理解成人类能够直接看懂的“机器语言”。这个过程听起来简单,但其实非常不简单。
但计算机理解不了汇编语言,因为计算机只懂机器语言。所以,大牛们又设计了一种程序,叫做“汇编器”。
汇编器相当于一个翻译,把人类写好的汇编代码翻译成机器语言,这样子计算机就听懂了。
汇编语言的每一行语句都和机器语言相对应,所以汇编语言,我们可以理解成人类能够直接看懂的“机器语言”。这个过程听起来简单,但其实非常不简单。
5.但人类还是嫌麻烦,能不能更简单一点。
于是又设计了一些编程语言,我们就拿其中的C语言做代表吧。
于是又设计了一些编程语言,我们就拿其中的C语言做代表吧。
6.那计算机自然就更听不懂了,于是前辈们又设计了一种程序,叫做“编译器”。
编译器负责把高级语言翻译成汇编语言。汇编器再把汇编语言翻译成机器语言。
那么高级语言不能直接转换为机器语言吗?为什么要先用编译器,再用汇编器呢?
从技术上的确是可以实现的,但不是最优的解决方案,这涉及到编译原理的内容。
编译器负责把高级语言翻译成汇编语言。汇编器再把汇编语言翻译成机器语言。
那么高级语言不能直接转换为机器语言吗?为什么要先用编译器,再用汇编器呢?
从技术上的确是可以实现的,但不是最优的解决方案,这涉及到编译原理的内容。
7.机器语言是被设计出来的,只能使用0和1.但不同的公司设计的机器语言标准不一样。
让计算机把两个数相加:
让计算机把两个数相加:
8.那么一个程序如果使用A公司的汇编器生成的机器指令,就无法在B公司的机器上运行。自然而然就诞生了一些协会,或者有权威的机构企业为了避免让这种事情发生,会制定一些行业设计标准。这些行业设计标准要求大家设计机器语言按照标准来,不要乱定义,和谐是人类一直追求的事情,但有时候为了赚钱,总有人会破坏和谐。
x86架构和Arm架构就是两种标准指令集(机器语言)的编号缩写
9.想象一下你买的是联想电脑笔记本,你朋友买的是戴尔笔记本。
但是两台电脑的USB口大小不一样,你的U盘只能插到指定的笔记本上,那是一件多么糟糕的事情。
但是两台电脑的USB口大小不一样,你的U盘只能插到指定的笔记本上,那是一件多么糟糕的事情。
10.当然,慢慢的,计算机不仅仅局限于计算了,当可以处理简单的文字,图片信息的时候。人类开始考虑,能不能让计算机联网,信息共享传输,有了这个脑洞之后,后来大牛们就把互联网就捣鼓出来了。
11.随着科技进步,手机、嵌入式等各种电子设备诞生包括网站这个名词概念的诞生,为了应付不同的行业需求,也诞生了许多相关产业。在这个过程中,发明了各种各样的编程语言解决这些需求,当然也有各种各样的硬件厂商,CPU,显卡,鼠标,显示器,键盘,打印机,扫描仪,音响,路由器……
编程语言也是被发明出来一个接一个的
有了操作系统、数据库……
但这个过程是非常艰难,不容易的,花费了很多智商顶尖科学家的脑力才有了我们今天的计算机技术。
计算机语言的分类
机器语言(Machine Language)
汇编语言(Assembly Language)
高级语言(High-level Programming Language)
几种常见高级编程语言的了解
C、Java、C++、C#
- 所有语言都离不开C语言抽象出的顺序、分支以及循环结构
- 广泛来讲,C可以看做Java、C++、C#三种语言的源语言
- 语言诞生先后顺序,C、C++、Java、C#
- 面向过程:C;不完全面向对象:C++;面向对象:Java、C#
- C++早期一般看做C语言的扩展,不过现在它已经不只是扩展而被认为是一门新的编程语言
- Java的底层(运行时库)基于C开发,但并不依赖C
- C#是由微软开发,官方称其继承和吸取了Java,一般都认为C#是Java的翻版
- C、C++比Java更接近底层,Java的运行效率不如这两者,但具备相当重要的跨平台特性,C#是‘速度更快’的Java
- C语言诞生于1972年,由美国贝尔实验室的丹尼斯·里奇设计,其被广泛用于底层开发,几乎可以应用到程序开发的任何领域(应用软件、嵌入式、服务器、设备驱动程序……)
- C++诞生于1983年,由比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)实现,常用于系统开发、引擎开发等领域,还包括网络软件以及科学计算;
- Java诞生于1996年,詹姆斯·高斯林(James Gosling)发明了它,能开发桌面应用、web应用、移动应用及嵌入式、分布式系统……
- 安德斯·海尔斯伯格(Anders Hejlsberg)2001年重新发明了Java,并将其称为C#,因为C#只被微软自己的操作系统支持,所以用于windows应用,web应用开发
Python
- Python诞生于1991年,由吉多·范罗苏姆(Guido van Rossum)发明
- Python是一种面向对象的动态类型语言,最初被用于编写自动化脚本,但随着版本的更新和新功能的添加,越来越多的被用于大型项目开发
- 应用领域包括但不限于web和Internet开发、科学计算和统计、教育、桌面开发、软件开发、后端、自动化办公及运维、数据分析及可视化、数据挖掘、深度学习以及人工智能
HTML/CSS/JavaScript
- HTML/CSS/JavaScript是Web前端的三大基石
- HTML(Hyper Text Markup Language),超文本指页面中可以包含图片、链接、音乐、视频及程序等非文字元素(HTML5)
- CSS( Cascading Style Sheets ),层叠样式表是用来控制html页面中元素进行像素级的排版以及修饰元素(CSS3)
- JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。在html页面中用来增加动态内容(例如轮播图(当然轮播图用CSS3也可以实现),验证数据等)
SQL、NOSQL
- 结构化查询语言(Structured Query Language),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
- 数据库分为关系型数据库和非关系型数据库
- 关系型数据库管理系统代表:MySQL、SQL Server
- NOSQL代表:MongoDB、Redis
其他
- PHP是一种常用于web应用程序和后端开发的脚本语言
- Ruby是一种开源的服务器端脚本语言
- R是用于统计分析、绘图的语言和操作环境
- Scala主要用于大数据开发
- GO语言主要用于开发高性能分布式系统开发领域,例如游戏服务端
其他
指令和数据
存储单元
1.存储器被划分成若干个存储单元, 每个存储单元从0开始顺序编号,例如一个存储器有128个存储单元,编号0~127,如下图。
2.那么一个存储单元能存储多少信息呢?我们知道电子计算机的最小信息单位是bit,也就是一个二进制位,8个bit组成一个字节(byte)。微型机存储器的存储单元可以存储一个byte,即8个二进制位。一个存储器有128个存储单元,它可以存储128个byte。
微机存储器的容量是以字节为最小单位来计算的。对于拥有128个存储单元的存储器,我们可以说它的容量是128个字节。而对于大容量的存储器一般还有KB、MB、GB、TB等等。
微机存储器的容量是以字节为最小单位来计算的。对于拥有128个存储单元的存储器,我们可以说它的容量是128个字节。而对于大容量的存储器一般还有KB、MB、GB、TB等等。
CPU对存储器的读写
1.上面讲到,存储器被划分成多个存储单元,存储单元从零开始顺序编号。这些编号可以看作存储单元在存储器中的地址。就像一条街,每个房子都有门牌号码。
2.CPU要从内存中读取数据,首先要指定存储单元的地址。也就是说它要先确定它要读取哪一个存储单元中的数据。就像一条街上找人,首先要确定他住在哪个房子里。
除此之外,在一台微机中,不只有存储器这一种器件。CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读取数据还是向里面写入数据。
可见,CPU想要进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
除此之外,在一台微机中,不只有存储器这一种器件。CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读取数据还是向里面写入数据。
可见,CPU想要进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
- 存储单元的地址(地址信息)
- 器件的选择, 读或写的命令(控制信息)
- 读或写的数据(数据信息)
3.那么CPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢?电子计算机能处理、传输的信号都是电信号,电信号当然是用导线传送。在计算机中专门连接CPU和其他芯片的导线,通常称为总线。总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线逻辑上又分为3类,地址总线、控制总线和数据总线。
如下图的CPU从3单元读取数据的过程
(1)CPU通过地址线将地址信息3发出;
(2) CPU通过控制线发出内存读命令,选中存储器芯片,并通知它将要从中读取数据;
(3)存储器将3号单元中的数据8通过数据线送入CPU;写操作和读操作步骤类似。
(2) CPU通过控制线发出内存读命令,选中存储器芯片,并通知它将要从中读取数据;
(3)存储器将3号单元中的数据8通过数据线送入CPU;写操作和读操作步骤类似。
总线
地址总线
现在我们知道, CPU是通过地址总线来指定存储器单元的。 可见地址总线上能传送多少个不同的信息, CPU就 可以对多少个存储单元进行寻址。
现假设,一个CPU有10根地址总线,我们来看一下它的寻址情况。我们知道,在电子计算机中,一根导线可以传送的稳定状态只有两种,分别是低电平和高电平。 用二进制表示就是1或0,10根导线可以传送10位的二进制数据,也意味着10位二进制数可以表示2的10次方个不同的数据,最小为0,最大为1023。
现假设,一个CPU有10根地址总线,我们来看一下它的寻址情况。我们知道,在电子计算机中,一根导线可以传送的稳定状态只有两种,分别是低电平和高电平。 用二进制表示就是1或0,10根导线可以传送10位的二进制数据,也意味着10位二进制数可以表示2的10次方个不同的数据,最小为0,最大为1023。
例如下图表示的是一个具有10根地址线的CPU向内存发出地址信息11时10根地址线上传送的二进制信息。(从上往下是低位到高位)
总结:一个CPU有N根地址线,则可以说这个CPU的地址总线宽度为N,这样的CPU最多可以寻找2的N次方个内存单元。
数据总线
CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个8位二进制数据,即一个字节,16根数据总线一次可传送两个字节。
8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为。它们在向内存中写入数据89D8H时,是分别如何通过数据总线来传递的,参考一下下面的图。
控制总线
CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。
前面所讲的内存读或写命令是由几根控制线综合发出的,其中一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;有一根称为“写信号输出”的控制线则负责传送写信号。
上述内容总结
接口卡
BIOS
内存地址空间
上图的这些存储器,在物理上是独立的器件,但是在以下两点都相同。
- 都和CPU的总线相连。
- CPU对它们进行读或写的时候都通过控制线发出内存读写命令。
在下边的图中,所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
假设在上图的内存地址空间的地址段分配如下。
地址 0~7FFFH 的 32KB 空间为主随机存储器的地址空间;
地址 8000H~9FFFH 的 8KB 空间为显存地址空间;
地址 A000H~FFFFH 的 24KB 空间为各个ROM的地址空间。
这样,CPU 向内存地址为 1000H的内存单元中写入数据,这个数据就被写入主随机存储器中;CPU 向内存地址为 8000H的内存单元中写入数据,这个数据就被写入显存中,然后会被显卡输出到显示器上;CPU 向内存地址为 C000H的内存单元中写入数据的操作是没有结果的,C000H 单元中的内容不会被改变,C000H 单元实际上就是 ROM存储器中的一个单元。
地址 0~7FFFH 的 32KB 空间为主随机存储器的地址空间;
地址 8000H~9FFFH 的 8KB 空间为显存地址空间;
地址 A000H~FFFFH 的 24KB 空间为各个ROM的地址空间。
这样,CPU 向内存地址为 1000H的内存单元中写入数据,这个数据就被写入主随机存储器中;CPU 向内存地址为 8000H的内存单元中写入数据,这个数据就被写入显存中,然后会被显卡输出到显示器上;CPU 向内存地址为 C000H的内存单元中写入数据的操作是没有结果的,C000H 单元中的内容不会被改变,C000H 单元实际上就是 ROM存储器中的一个单元。
内存地址空间的大小受CPU地址总线宽度的限制。8086CPU的地址总线宽度为20,可以传送220个不同的地址信息(大小从0至22-1)。即可以定位220个内存单元,则8086PC 的内存地址空间大小为1MB。同理,80386CPU 的地址总线宽度为32,则内存地址空间最大为4GB。
我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。比如,我们希望向显示器输出一段信息,那么必须将这段信息写到显存中,显卡才能将它输出到显示器上。要向显存中写入数据,必须知道显存在内存地址空间中的地址。
我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。比如,我们希望向显示器输出一段信息,那么必须将这段信息写到显存中,显卡才能将它输出到显示器上。要向显存中写入数据,必须知道显存在内存地址空间中的地址。
不同的计算机系统的内存地址空间的分配情况是不同的,上展示了 8086PC机内存地址空间分配的基本情况。
奇偶校检
奇偶校检码(Parity Check Code)
二进制信息在传送时,可能由于外界干扰或其他原因而发生错误,即可能有的1错为0或者有的0错为1。奇偶检验码(Parity Check Code)是一种能够检验出这类错误的代码。这种代码由两部分组成:一是信息位,即需要传递的信息本身,可以是位数不限的一组二进制代码;二是奇偶检验位,它仅有一位。奇偶检验位的编码方式有两种:一种是使信息位和检验位中“1”的个数为奇数,称为奇检验(Odd parity);另一种是使信息位和检验位中“1”的个数为偶数,称为偶检验(Even check)。
例如,二进制代码 1001101 奇偶检验码表示时的两种编码方式为:
奇偶校检码的工作原理
采用奇偶检验码进行错误检测时,在发送端由编码器根据信息位编码产生奇偶检验位,形成奇偶检验码发往接收端;接收端通过检测器检查代码中含“1”个数的奇偶,判断信息是否出错。例如,当采用偶检验时,若收到的代码中含奇数个“1”,则说明发生了错误。但判断出错后,并不能确定是哪一位出错,也就无法纠正。因此,奇偶检验码只有检错能力,没有纠错能力。其次,这种码只能发现单错,不能发现双错,但由于单错的概率远远大于双错,所以,这种编码还是很有实用价值的。加之它编码简单、容易实现,因而,在数字系统中被广泛采用。
双向奇偶校检(Row and Column Parity)
为了提高奇偶校检的检错能力,在奇偶校检码的基础上,又采用了双向奇偶校检,又称为方块校检或垂直水平校检,这种方法是在一批字符传送之后,另外增加一个检验字符,该检验字符的编码方法是使每一位纵向代码行成的编码为奇性或者偶性。例如下图:
0 条评论
下一页