软件设计1
1、数据的表示
以H结尾的数字表示该数是 16进制的,比如C7FFFH
1.1、进制的转换
1.1.1、将R进制转10进制
1.1.2、将10进制转换为R进制
10进制转换为r进制数时,采用除r取余方法,即将十进制整数不断除以r取余数,直到商为0,所得的余数按逆序排列
1.1.3、二进制转八进制和十六进制
二进制转八进制可以将该二进制的数字从右到左,每三个为一组,一组转换为一个八进制数即可。比如:10001110 转为八进制为:216
二进制转十六进制可以将二进制的数字从右到左,没四个为一组,一组转换为一个十六进制即可,大于10进制的数,A表示10、B表示11、C表示12,以此类推。例如:10001110 转为十六进制为:8E
1.2、原码、反码、补码
原码、反码、补码能表示的数据范围如下:n 表示的是有多少位,1个字节有8位。
比如1个字节,原码范围:-127~127;反码:-127~127;补码:-128~127。可以看到原码和反码表示的范围是一样的,而补码比他们多了一个数,这是因为原码和反码的 0 有两种形式:0000 0000、1000 0000,而补码的 0 都是:0000 0000。
1.2.1、原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
1.2.2、反码
正数的反码和原码一样,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
1.2.3、补码
正数的补码跟原码一样,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后再+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
1.3、浮点数运算
浮点数其实就是数学中用科学计算法表示数字的方式,比如1000,可以表示为 1.0*103。
下面当中,其中 1≤|M|<10
2、计算机结构
2.1、CPU结构
CPU由运算器和控制器组成
运算器:
算术逻辑单元(ALU):负责对数据进行算术和逻辑运算,暂时存储计算结果等。
累加寄存器(AC):当ALU执行算术或是逻辑运算的时候,为ALU提供一个工作区。
数据缓冲寄存器(DR):对内存进行读写操作时,用来暂存数据的。作为CPU和内存,外围设备之间数据的中转站。是CPU和内存,外围设备之间在操作速度上的缓冲
状态条件寄存器(PSW):存储运算过程中相关的标志,比如一些运算涉及到进位、溢出、中断等待,涉及到一些状态的信息。
控制器:
程序计数器PC:具有寄存信息和记数两种功能,又称为指令计数器。用来存放下一条指令所在的单位的地址的地方。
指令寄存器IR:当CPU执行一条指令时,先把它从内存储器取到指令缓存器中,再送入到指令寄存器中,然后经过指令译码器的译码,从而产生各种微操作。
地址寄存器(AR):保存当前CPU所访问的内存单元的地址,由于CPU和内存在操作速度上的差异,所以需要使用AR保持地址信息,直到内存的读写操作完成。
指令译码器(ID):指令译码器对指令的操作码和地址码进行解析,转换成相应的操作信号,控制各部件的工作,完成所需要的功能。
2.2、各种不同的计算机体系结构分类
2.3、CISC和RISC指令系统的特点
CISC是计算机非常老旧时的指令系统,一台计算机可能就是专门为某个机构定制的,指令多且复杂。
RISC适应于大众使用,指令简化,追求高效率和简单
3、流水线
执行一条指令会分为:取指、分析、执行三个步骤:
由于取指、分析、执行三个步骤是由不同的部件完成的,所以第1 条执行分析时,此时取指部件可以空余出来执行第 2 条执行的取指步骤。
3.1、流水线的周期和计算指令执行时间
例题:
上面题目中,流水线周期为 2ns,100条指令的执行时间为:(2+2+1)+(100-1)*2 = 203ns,或者是(3+100-1)*2 = 204ns。一般来说都是采用理论公式计算,但也可能会采用实践公式来算。
3.2、流水线的吞吐率
,流水线的最大吞吐率计算公式:
如上面例题,流水线的吞吐率为:100/203 ,最大吞吐率为:1/2
3.3、流水线的加速比
如上面例题,加速比为:(2+2+1)*100/203
3.3、流水线的效率
上图中,流水线的效率为:((1+1+1+3)*4)/(15*4),也就是说,流水线的效率在空间图上可以看做是:工作占用时空区/总的时空区
4、计算机的层次化存储
4.1、cache
有时候并不会把寄存器放在存储体系中,所以可以将 cache 认为是访问速度最快的层次,但如果有寄存器,实际上还是会选寄存器。
电脑使用cache和主存储器时,平均周期的计算公式:
比如,对cache的访问命中率为 95%,cache的周期时间为 1ns,主存储器周期为 1000ns,那么此时系统的平均周期为:0.95*1 +(1-0.95)*1000 = 50.95ns
4.2、主存
主存可分为随机存取存储器和只读存储器。计算机系统的主存主要由DRAM构成,SRAM主要组成cache。
RAM和ROM的应用:系统的内存一般由RAM和ROM组成,像cache一般是用静态RAM的因为需要高速的缓存,需要读写速度快,而主存的话一般是用动态ram,便于存储对读写速度每那么的快,而ROM则是存放一些系统程序的存储器,有只读功能,不可写,比如开机的时候的BIOS。外存有很多种如闪存USB的硬盘,还有SSD的固态硬盘等。
4.3、主存 -- 编址
表示这个芯片有 8 个地址单元,每个地址空间有 4 个 bit 位信息,一共可以存储 32 bit 位信息。注意,这么一个存储器称之为一个芯片,每一行称之为 1 个地址单元或者内存地址,每 1 格就是 1 个 bit。
例题:
地址由AC000H到C7FFFH,由C7FFFH 减去 AC000H 得到的是多少,然后 +1,就是多少个地址单元,因为 1 个地址单元能表示 1 个地址,有多少个地址就有多少个地址单元。C7FFFH 和 AC000H 都是 16进制的数,相减得到是 1C000H,实际上就是1*164+12*163,然后再除以 K 即 210 就可以得到第一个空的答案:112。
如果该内存地址按字(16bit)编址,意思是每个地址单元有 16 位。由 28 片芯片构成,每个芯片有 16k 个存储单元,那么每个存储单元的存储位为:(112K * 16)/(28*16K)= 4
4.4、磁盘结构与参数
先在磁道读取完数据,然后才能对数据进行处理。
例题:
旋转周期为33ms,则旋转1个扇区需要3ms。磁头处于R0开始处,则读取R0需要3ms,但每个记录的处理也要3ms,处理完R0后磁头已经到了R2开始处,因为要顺序处理,所以需等到磁头重新旋转至R1开始处,需等待30ms,然后读取R1,处理R1,以此类推,计算后可以得到答案为 366ms。
如果信息存储可以优化分布,那就可以像左图,处理完R0后,磁头刚好处于R1开始处,可以立即处理R1,不用等待。以此类推,计算后可得此时答案为 66ms。
5、计算机总线
根据总线所处的位置不同,总线通常被分成三种类型,分别是:内部总线、系统总线(数据总线、地址总线、控制总线)、外部总线
数据总线:数据总线用于传递数据信息。
地址总线:地址总线用于传输地址的信息,如要访问外设的内存地址、某个外设的地址等。由于地址通常由CPU提供的,所以地址总线一般是单向传输的。
控制总线:顾名思义,控制总线用于传送控制信号。例如CPU向内存或输入输出接口电路发出的读写信号;又如,输入输出接口电路向CPU发送的用于同步工作的联络信号等。
6、串联系统和并联系统
串联系统模型:
可靠性:,即为各个子系统的可靠性相乘的值
可靠性: 当所有系统都失效时,系统才失效。
7、CRC与海明校验码
7.1、码距
在整个编码系统中,所有的任意的两个码字之间,一个码字最少需要改变多少个位才能变成另一个码字,这个位数就是码距。
7.2、循环校验码CRC
循环校验码可以检错但不能纠错。
在信息传送时,会在其尾部加入校验信息,加入校验码后的数据与生成多项式进行模2相除,余数如果为0则认为没出错,否则认为传输过程中出错了。
7.3、海明校验码
海明校验码可以检错也可以纠错。
根据接收到的数据的信息位生成校验位,如果生成的校验位和得到的校验位不一致,则认为出错。两个校验位信息异或,得到是多少就认为是哪个位置出错。
7.4、奇偶校验
8、操作系统
8.1、进程的状态
8.2、PV操作
PV操作利用信号量机制,是一种有效的进程同步与互斥工具,可以实现资源的互斥使用。
先执行P(S1),S1为0,此时S<0不成立,所以继续执行,V(S2),S2为1,S2<=0不成立,所以继续执行生产者进程。执行P(S1),S1为-1,S1<0成立,此时阻塞生产者进程,放到进程队列,执行消费者进程。消费者执行P(S2)、V(S1),以此类推,当S<=0时,消费者进程又激活生产者进程。
V操作可以激活P操作,PV操作一般来说都是配对的,即P(S1)和V(S1)。判断一个操作是P还是V操作,可以看他是否依赖于其他进程,如果需要依赖其他进程才能执行,那他就是P操作。
例题:
收银员进程由付款进程激活,所以可以知道a1是一个V操作,b1是一个P操作。而购书者付款进程也需要等收费进程执行完毕后才能执行完毕,所以说可以知道a2是一个P操作,b2是一个V操作,而PV操作都是配对的,所以根据选项可以知道选AC
8.3、死锁
避免死锁可以通过:有序资源分配法和银行家算法,但有序资源分配法会导致资源利用率比较低。
9、存储管理
9.1、页式存储
页式存储管理就是把内存物理空间划分成大小相等的若干区域,一个区域称为一块.。把逻辑地址空间划分为大小相等的若干页,页大小与块大小相等。“页”是逻辑单位,”块”是物理单位。
页式存储器的逻辑地址由两部分组成:页号+页内地址(这里的+是直接拼接的,而不是加法)。逻辑地址是指由程序产生的与段相关的偏移地址部分。
在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为 物理地址,又叫实际地址或绝对地址。物理地址=块号X块长+页内地址
例题:
第一个空,已知逻辑地址求物理地址,逻辑地址由 页号和页内地址组成,页面大小为4K,也就是212,也就是说页内地址应该有12位,逻辑地址为十六进制的5A29H,每四个2进制位转化为1个16进制位,也就是说后面三位的 A29 就是页内地址,那 5 就是页号。查看页表可以知道,页号5对应着块号 6,而页内地址都是一样的,所以物理地址为 6A29H。
第二个空,淘汰的话应该要淘汰在内存中,并且此时未被访问的,所以应该是页号为 1 的。
例题:
程序分为6个页面,且系统中没有使用快表,意思是每次执行一个页面都需要查表,也就是每执行一个页面需要访问两次内存,所以一共需要访问 12 次内存。
缺页中断指的是读取执行程序时,该程序没有在内存中,此时就产生1次缺页中断。约定读取指令时只产生 1 次缺页中断,所以读取 swap 指令产生 1 次缺页中断,读取操作数 A 时,由于该计算机系统按 8 位编址,AB都是16位,所以读取都需要访问两次内存,产生两次缺页中断,所以一共是产生 5 次缺页中断。
10、编译过程
在对高级语言源程序进行编译或解释处理的过程中,需要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。