前言回顾
目前认为,三大思维能力是指:1.理论思维;2.实验思维;3.计算思维
为了实现自动计算,需要解决的基本问题是:1.数据的表示;2.计算规则的表示;3.数据的存储及自动存取;4.计算规则的存储及自动存取目录
一、冯·诺依曼计算机
1.符号0和1
主要是运用在三个方面:①二进制-采用符号0和1的计数系统;②布尔代数;③数字电路-工作信号只有符号0和1。
①二进制-采用符号0和1的计数系统
采用数制表示数值数据需要考虑以下问题:a.数字符号的选用-进位制数及其相互转换;b.小数点位置的表示-定点与浮点表示;c.正号与负号的表示以及运算的简化-机器数。
a.进位制数及其相互转换
十进制数:符号0~9;规则-逢十进一;基数为10,第i位的位权为10^i (整数部分最低位为第0位)。比如:
二进制数:符号0~1;规则-逢二进一;基数位2,第i位的位权为2^i (整数部分最低位为第0位)。比如:
转换方法:
二进制数转化为十进制数:按十进制数的规则,把二进制数的各位数按位权展开相加。比如:
十进制数转化为二进制数(除2取余法):首先用2连续除该十进制整数及得到的商,并列出余数,直至商为0,然后把先后得到的余数从低位到高位排列。
十进制小数转换为二进制小数(乘2取整数法):首先用2连续乘该十进制小数及得到的积的小数,并列出积的整数部分,直至积的小数为0,然后把先后得到的积的整数按从高位到低位排列。
十进制数转换为N进制数:除N取余,逆序排序。
十进制小数转换为N进制小数:乘N取整,顺序排列。注:十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。若要使二进制转换为N进制,可以先转换为十进制,再进行转换。当然也有其他方法,比如说二进制转为八进制,从小数点往两边取二进制数,每3个(不足的补0)转换成一个8进制。
b.定点与浮点的表示
计算机采用的存储单位
8bit = 1Byte 1024B = 1KB
1024KB = 1MB 1024MB = 1GB
1024GB = 1TB
定点表示:小数点位置固定不变(定点整数)。
浮点表示:小数点位置随着阶的变化而左右浮动(浮点实数)。
定点整数:小数点位置固定在数值位之后。比如说:我们设存储长度为8位,从高位到低位依次是:符号1位,数值7位,小数点位置隐式地固定在数值位之后。那么我们所能表示的十进制数值范围为 ±(2^7 - 1)。
浮点实数:采用记阶表示。
比如说:我们设存储长度为8位,从高位到低位依次是阶符1位,阶数2位,尾符1位,位数4位,小数点位置隐式地表示在尾数位之前,尾数随着阶的变化而变化,因此小数点位置也随着阶的变化而左右浮动。所能表示的数值范围由阶数位数决定,数值精度由尾数位数决定。
c.机器数
原码:二进制整数x的原码记为[x]原。
当x为正的时候,[x]原的符号位为0,数值位不变;
当x为负的时候,[x]原的符号位为1,数值位不变。
比如说:我们设存储长度为8位,那么则有
x = +10011 [x]原 = 00010011
x = - 10011 [x]原 = 10010011补码:二进制整数x的补码记为[x]补。
当x为正的时候,[x]补的符号位为0,数值位不变;
当x为负的时候,[x]补的符号位为1,数值位为取反加1。比如说:我们设存储长度为8位,那么则有
x = +10011 [x]补 = 00010011
x = - 10011 [x]补 = 11101101补码加法运算的特点:[x+y]补 = [x]补 + [y]补,即二进制数的加法运算可以转换为补码的加法运算;在补码的加法运算中,符号位直接参加运算。
补码减法运算的特点:[x- y]补 = [x]补 + [-y]补,而[-y]补则将[Y]补的各个位(连同符号位)均取反,然后最低位加1,即可得到。
比如说:我们设存储长度为8位,110110 - 1111001=(+110110) + (-1111001)
②布尔代数
布尔代数:<{0,1},∧,∨,┐>;
逻辑值:0(F/假)、1(T/真)
逻辑运算:∧(逻辑与),∨(逻辑或),┐(逻辑非)
逻辑变量:取值只能为逻辑值的变量。
逻辑表达式:由逻辑变量或者逻辑变量与逻辑运算构成。
真值表:逻辑表达式的所有可能取值情况的罗列。③数字电路:工作信号只有0和1
门电路:实现逻辑运算的电路。可分为三种:与门;或门;非门。
2.存储程序
存储程序是指程序存储在内存储器中,中央处理器按照存储的程序有条不紊地进行。主要分为有三个方面:①指令系统;②内存储器;③中央处理器(运算器、控制器)。
①指令系统
程序:人们编写的计算机可以识别的如何处理问题的步骤集合。
机器指令:编码表示的计算机可以直接识别和处理的基本操作。
指令系统:计算机的机器指令集合。
基本操作(机器指令)包含:a.功能信息-需要执行什么操作(操作码);b.数据信息-操作的数据来自何处,操作的结果去向何处(操作数)。
举个例子:设两个加数分别存于地址X和Y的内存单元中,两个加数相加,将和存于地址为Z的内存单元中。我们采取归纳基本操作,分为三个基本操作(引入寄存器):第一步为取数操作,我们从地址为X的内存单元中取出加数1,存于地址为A的寄存器中;第二步为加法操作,我们将地址为A的寄存器中的加数1与地址为Y的内存单元中的加数2相加,和存于地址为A的寄存器中;第三步为存数操作,我们从地址为A的寄存器中取出和,存于地址为Z的内存单元中。
编码机器指令:
设:功能不同的基本操作(机器指令)的数目为16,寄存器的数目为4,内存单元的数目为1K。则:操作码的编码长度至少为4位,寄存器地址至少为2位,内存地址至少为10位,机器指令长度至少位16位。机器指令格式如下图所示:
②内存储器
特点:a.容量小;b.存储速度快;c.成本高。
若内存单元为mB,内存容量为nGB,则内存地址至少为log2(2^30*n/m)位。③中央处理器(运算器、控制器)
中央处理器(CPU):有条不紊地执行机器指令性是的程序。
具体示例图:
当中央处理器在执行机器指令形式的程序时,从程序计数器中得到下一条指令的地址以实现自动执行。
二、现代计算机
1.操作系统
操作系统是计算机系统中的一个系统软件,它是这样一些程序模块的集合——它们管理和控制计算机系统中的硬件及软件资源,合理地组织计算机工作流程(资源管理),以便有效地利用这些资源,为用户提供一个功能强、使用方便的工作环境,从而在计算机与其用户之间起到接口作用(用户接口)。它可以说是硬件功能的第一层封装及扩展。
①CPU管理
并发执行与分时调度
进程:程序对给定的数据集在处理机上的一次执行过程,包括如下基本状态:
a.就绪态:其他条件满足,具备运行条件,等待CPU的状态。
b.执行态:占有CPU并在CPU上执行的状态。
c.阻塞态:其他条件不满足,不具备运行条件的状态。
死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
产生的必要条件:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。
解决方法:第一种方法,我们可以通过设置一些限制条件,去破坏产生死锁必要条件的一个或多个来预防死锁,称为预防死锁;第二种方法,我们可以在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁;第三种方法,我们可以让进程回退到某个状态(回退到没有获取某种资源的状态),从而释放已经获得的资源。
活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。处于活锁的实体是在不断的改变状态,活锁有可能自行解开。
解决方法:通过先来先服务的方式进行解锁。
死锁与活锁的区别:处于活锁的实体是在不停的改变状态,而处于死锁的实体处于等待状态;活锁有可能自行解开,但死锁不行。②存储管理
现代计算机的存储体系包括:外存;RAM,ROM(内存);Cache(高速缓冲存储器)。
虚拟存储管理技术:当程序运行时,不是将程序一次性全部从外存调入内存,而是先调入将要执行的部分,再逐步调入需要的部分,调出不要的部分到外存。
内存空间——实际地址、物理地址;
虚拟空间——虚拟地址、逻辑地址。
请求页式管理:
a.将内存空间分成若干个大小相等的块,物理地址包括块号和块内地址;将虚拟空间分成若干个大小与块相等的页,逻辑地址包括页号和页内地址。
b.内存分配和回收以块为单位,一个块存储一个页,逻辑上连续的页可以存储在物理上不连续的块中。
c.页表存储块和页的映射关系(页号、块号、中断位……),根据中断位可以判断该页是否在内存。
d.当访问某页时,根据页表判断该页是否在内存,如果在内存,则根据页表计算物理地址后访问,否则发生缺页中断,即分配一个块,将该页调入内存,修改页表,之后根据页表计算物理地址后访问。
存储体系中:通过主存— —辅存(即虚拟存储器):解决内存容量扩充问题;通过Cache — —主存:解决主存与CPU之间速度不匹配的问题。在请求页式管理中,如果页面在内存,我们可以通过四步骤将逻辑地址转换为物理地址:
第一步,我们需要确定虚拟地址的有效位,比如说:我们设页面大小为1Kb,现有8页,那么此时虚拟地址的有效位为13 ( 2^10 * 8 =2^10 * 2^3 = 2^13 );
第二步,我们需要确定逻辑地址的页面位数,继续就第一步的假设,那么此时页面位数为10 ( 2^10 )。
第三步,我们根据“逻辑地址=页号+页面”计算出页号,比如说:现有逻辑地址0000 1111 1000 0000,那么页号位为3 ( “000011+1110000000(10位),000011转十进制值为3”);
第四步,我们根据页号找出对应的页框号,再根据“物理地址=页框号*页块大小+页面逻辑地址”计算出物理地址。如果发生缺页中断,页面置换策略有:最佳⻚⾯置换算法 (OPT);先进先出置换算法 (FIFO);最近最久未使⽤的置换算法 (LRU);时钟⻚⾯置换算法 (Lock);最不常⽤置换算法 (LFU);
三、现代程序
1.程序设计语言
程序设计语言:用于书写程序的语言,它规定了书写程序时可以使用一组记号和一组语法规则。
语言处理程序
面向对象语言的优点有:易维护;易扩展;模块化;方便建模。
编译过程包括:词法分析;语法分析;语义分析;中间代码生成;代码优化;目标代码生成。(具体完成什么任务可以去查阅)2.软件开发方法
组件:是实现IComponent接口的类,或者直接或简介地从实现IComponent接口的类派生的类。
事件:是可以通过代码处理的操作。用户操作或系统操作——产生事件;代码执行——处理事件。
事件驱动:事件产生——代码执行
基本实现步骤:①绑定对象事件与事件处理方法;②编写事件处理方法。