目录
让我们来从以下两个方面来了解计算机:
1.从硬件角度学习计算机的基本原理————CPU的基本工作原理
2.从操作系统软件角度,学习程序是如何工作起来的的————进程管理
计算机的发展史(稍作了解即可)
第一阶段:一个国家组织共同使用一台计算机
第二阶段:一个商业组织共同使用一台或多台计算机
第三阶段:PC(Personal Computer)以家庭为单位开始使用计算机了
第四阶段:以个人为单位开始使用计算机(手机)
未来: 一个会有很多台计算机
从硬件方面来了解计算机
冯诺依曼体系:指令只是一种特殊的数据
处理器(cpu)= 运算器 + 控制器
存储器(Memory) = 内存
外部数据(物理数据)进入到存储器主要通过输入设备(Input Device)
存储器内的数据传输到外部世界主要是通过输出设备(Output Device)
运算器 + 控制器 + 存储器 + 输入设备 + 输出设备
硬件体系下 CPU + 内存 + I/O 内部的数据交换通过 总线(BUS)
程序的存储
我们都知道 程序 = 指令 + 数据 那么指令和数据又是怎样在内存中进行存储的呢?
1.程序中的指令是一组预规定的动作,主要表现为一种特殊的数据需要我们存储在内存中,但是我 们的计算机只能存储操作码(Opcode)也就是以二进制的形式存数,所以我们要给CPU支持的所有动作都编码一个唯一的 数 字,然后利用编码的规定就可以成功的将指令存入我们的计算机了。
2.数据只需要转为二进制再存入内存即可
广义数据在内存的存储问题
我们的数据主要分为数和非数的数据
我们先来了解一下非数数据是怎样存储的,非数数据包括字符串,声音,图片……我们要在计算机中进行"非数数据"的存储就需要把"非数数据"通过编码表转换成数据类型的数据
举个栗子:
字符串 ===> 字符 通过Unicode 编码
'A' 003
'我' 1003098
图片 通过RGB编码
红绿蓝 0~255/0~255/0~255
我们再来了解一下数类型的数据在内存中的表示方法,数类型主要就是整数和小数
有限范围内整数的表示:正码,反码,补码 ===> 整型数
有限范围内的小数表示:IE标准 ===> 浮点数
接下来我们局限在整型中,但表示的数据可能是 整数,指令,字符,图片,声音……
CPU的基本工作原理
计算机的主要组成
1.cpu——又称为逻辑算数运算器可以处理(与,或,非,加,减,乘,除,取余)
2.控制器
3.寄存器——临时存储数据的存储单元(每个都只能保存一个整型数)现代的高级CPU为了提升性能,一般都带有缓存(CPU内缓存)
CPU的基本组成
首先我们来组建一下 与门(and gate),或门(or gate),非门(not gate),异或门(xor gate)
那计算机中的核心部件算数逻辑单元(ALU)是如何工作的呢?
算数逻辑单元主要处理两大方面的运算
算数方面: 加法,减法,乘法,除法,取余
逻辑方面: 与,或,非。
半加器
全加器
有全加器和半加器我们就可以组建一个八位数的加法器
ALU运算器的内部结构
三个输入:
A:要参与计算的第一个数
B:要参与计算的第二个数
C:本次的运算是什么opcode
输出:
正常输出以及三个标志位(溢出,为0,负数)
CPU是计算机的核心 ===> ALU是CPU的核心
所有程序的执行,本质上都是计算 + 读取 + 存入
读取:memory -> register
存入:register -> memory
所以我们的程序也就可以抽象为:opcode + a1 + b1
a,b都是需要寄存器来临时保存数据的,计算结果也是需要寄存器来保存的
要计算的opcode是控制单元CU告诉ALU的
CPU的执行过程
我们的程序是怎样运行的呢?其实只要有个起始位置填充到PC里,执行流就可以正常的运行起来了,而这个就是我们平时的main方法,我们程序的启动需要有“人”把我们的程序翻译出来的指令的第一条地址放到PC中,我们的程序就可以正常的跑起来了。至于为什么我们的程序中有函数(方法)等概念,并不是计算机硬件要用到这些概念,这些概念是为了方便程序员而诞生的。
1.取码阶段
CU根据PC寄存器的值,去内存的相应位置,把数据(指令)读取到IR寄存器中,正常情况下, PC寄存器中的值自动加1(PC寄存器中的值在这个指令周期中很关键,可以控制执行哪一条指 令,由于硬件中PC在自动 + 1,所以代码变成指令才能顺序的往下去执行,且代码中的一条语 句,很可能是需要多条指令才能完成)
2.解码阶段
CU按照预先设定的指令集解读指令数据(opcode + 操作数)
例如:0010 1110
人为规定:0010是opcode
查询指令表,知道0010代表的意思:从后边地址指定内存出,将数据读取到A寄存器
地址:0b1110 -> 14
3.执行阶段
LOAD指令应该由CU执行,所以按照规定执行指令
从内存的14地址处,将数据读取到A寄存器中
CPU的运算快慢,就是看CPU执行指令周期的频率。
CPU主频可以粗略的看作:每秒钟CPU能执行多少个指令周期。
CPU中往往会提供一些指令,这些指令可以去修改PC的值,进而影响执行流,也就是我们的分支语句:if,else,while,for,break,continue
CPU的中断模式(Interrupt Mode)
正常模式下,CPU可以顺序执行,可以分支执行。但总归只能按照既定顺序去执行。但现实中,很多时候,需要暂时中断CPU的当前执行流,先让CPU去做点其他工作,再回过头来继续原来的执行流。
CPU硬件中提供了一种机制(中断)让CPU停下,主要有以下四个步骤
1.保存当前的PC的值到内存的某个位置
2.修改PC的值,让执行其他的执行流
3.其他执行流执行结束之后,通过将刚才保存的PC值恢复到PC寄存器
4.继续原来的执行流
中断经常用作:
1.IO设备的处理
当有外部数据到达Input设备时,触发某个中断让当前正在执行的执行流暂停,切换到Input驱动 对应的执行流,把Input设备中读取到的数据,放到内存的某个位置,然后再恢复之前的执行流
2.操作系统中用来作进程调度(线程调度)
以上就是CPU的主要工作模式