计算机系统

数据表示

进制

  • 字母 D 代表十进制
  • 字母 H 代表十六进制
  • 字母 B 代表二进制
  • 字母 O/Q 代表八进制

image.png

image.png

image.png

image.png

移位指令

移位运算符:在二进制的基础上对数字进行平移。

  • <<(左移)
  • <<<(无符号左移)
  • (右移)

  • (无符号右移)

在数字没有溢出的前提下,对于正数和负数,左移一位相当于乘以 2 的一次方,左移 n 位就相当于乘以 2 的 n 次方。

存储系统

cache

  • 全相联地址映射:主存的任意一块可以映射到 Cache 中的任意一块。
  • 直接相联映射:主存中的一块只能映射到 Cache 的一个特定的块中。
  • 组相联映射:各区中的一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放。即从主存的组映射到 Cache 的组之间采用直接映射方式,在两个对应的组内采用全相联映射方式。

cache 与主存之间的地址映射是由硬件自动完成的。

各种存储方式

  • 连续分区:把所有用户区都分配给唯一的用户作业,当作业被调度时,进程全部进入内存,一旦完成,所有主存恢复空闲,因此它不支持多道程序设计。
  • 固定分区存储管理:这是支持多道程序设计的最简单的管理方式,它把主存划分成若干固定的和大小不同的分区,每个分区都能装入一个作业,分区的大小是固定的,算法简单,但是容易生成较多的存储器碎片。
  • 可重复定位分区存储系统:它能把相邻的空闲存储空间合并成一个完整的空区,还能够整理存储器内各个作业的存储位置,以达到消除存储碎片和紧缩存储空间的目的。紧缩空间需要大量的时间和系统资源。
  • 非请求分页式存储管理:非请求分页式是将储存空间和作业的地址空间分成若干个等分部分的分页式,要求把进程所需要的页面全部调入主存后作业方能运行。因此,当主存可用空间小于所需的地址空间时,作业无法运行。它克服了碎片多和紧缩处理时间过长的缺点支持多道程序设计,但不支持虚拟存储。
  • 请求分页式存储管理:实现以段为单位的共享和存储保护。
  • 段页式存储管理:充分利用了分段管理和分页管理的优点。作业按照逻辑结构分段,段内分页,内存分块。作业只需部分页载入即可运行,支持虚拟存储,可实现动态链接和装配。

作业调度算法

  • 时间片轮转调度算法
  • 先来先服务调度算法:有利于长作业,不利于短作业。有利于 CPU 繁忙型的作业,不利于 I/0 繁忙型作业。
  • 短作业(进程)调度算法
  • 优先权调度算法:

设备与 CPU 之间传送控制方式

  • 程序直接控制方式
  • 中断控制方式
  • 直接内存访问(DMA)方式
  • 通道控制方式

常见的磁盘调度算法

  • 先来先服务:顾名思义,先来先服务就是按照请求访问磁道的顺序来访问磁道。
  • 最短寻道时间优先(SSTF):SSTF 的原理是访问的下一个磁道是距离现在这个磁道最近的那一个磁道。
  • 扫描算法(电梯调度算法,SCAN):扫描算法的解决方式是,让磁头按照一定方向一直移动(先选择距离当前磁道最近的方向,从里到外,在从外到里)。
  • 循环扫描算法(Circular SCAN):循环扫描规定了磁头单向移动,在回返是直接快速移动到起始端。

程序语言与语言处理程序

高级语言源程序的编译过程

高级语言源程序的编译过程通常分为五个阶段:

  • 词法分析:对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称为单词符号,或简称符号)在词法分析阶段工作所依循的是语言的词法规则。描述词法规则的有效工具是正则式和有限自动机。
  • 语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位(语法范畴),如“短语”、“句子”、“子句”、“程序段”等。
  • 语义分析:对各种语法范畴的进行静态语言检查。
  • 中间代码生成和优化:对语义分析正确的代码进行翻译;优化的任务对中间代码进行加工,以期在最后阶段产生更为高效(节省空间和时间)的代码。优化所遵循的是程序的等价变化原则,其方法有公共表达式的提取、循环优化、删除无用代码等。
  • 目标代码:把目标代码(或经处理后)变换成机器上的低级语言代码。它依赖于硬件系统和机器指令含义。

中间代码就是一种含义明确,便于处理的标记系统。中间代码除四元式外,还有后缀式、三地址码、三元式、间接三元式、逆波兰记号、树形表示等。

有限自动机

image.png

image.png

image.png

image.png

耦合程度分类

  • 公共耦合:通过一个公共数据环境相互作用的那些模块的耦合。
  • 控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制另一模块的功能,就是控制模块。
  • 标记耦合:一组模块通过参数传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。
  • 数据耦合:一个模块访问另一个模块时,彼此之间通过简单的数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。

中缀、后缀、前表达式

中缀表达式

一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。

虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。

前缀表达式(前缀记法、波兰式)

前缀表达式的运算符位于操作数之前。

前缀表达式的计算机求值:

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。

例如前缀表达式 - × + 3 4 5 6

  1. 从右至左扫描,将 6、5、4、3 压入堆栈;
  2. 遇到 + 运算符,因此弹出 3 和 4(3 为栈顶元素,4 为次顶元素,注意与后缀表达式做比较),计算出 3+4 的值,得 7,再将 7入栈;
  3. 接下来是 × 运算符,因此弹出 7 和 5,计算出 7×5=35,将 35 入栈;
  4. 最后是 - 运算符,计算出 35-6 的值,即 29,由此得出最终结果。

可以看出,用计算机计算前缀表达式的值是很容易的。

后缀表达式(后缀记法、逆波兰式)

后缀表达式与前缀表达式类似,只是运算符位于操作数之后。

后缀表达式的计算机求值:
**
与前缀表达式类似,只是顺序是从左至右:

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。

操作系统

进程管理

PV 操作

依照此原则进行 PV 操作填充:

  • 若 P 进程节点引出某些信号量,则在 P 进程末尾对这些信号量执行 V 操作。
  • 若有信号量指向某进程 P,则在 P 进场的开始位置有这些信号量 P 操作。

网络与信息安全

OSI 参考模型

IMG_20190921_145251.jpg

防火墙:有软件防火墙和硬件防火墙之分,是网络安全设备被放置在网络的入口处,不属于 OSI 的哪一层。

FTP

FTP 协议的数据端口为 20,控制端口为 21。但是数据端口不是总是 20,当 FTP 处于主动模式(即服务器向客户端发起连接)时数据端口为 20,当 FTP 处于被动模式(即客户端向服务器发起连接)时数据端口在 1025~65535 中随机产生。

几种加密协议

  • RSA:非对称加密算法,效率低,不能用于大量明文的加密
  • SHA-1:信息摘要算法
  • MD5:信息摘要算法
  • RC5:非对称加密算法

系统千小时的可靠度

串联系统可靠度为 R=R1 x R2 x … x Rn;并联系统可靠性为 R=1 - (1-R1) x (1-R2) x … x (1-Rn)

流水线指令周期

流水线指令周期为最长的那个

参考

【1】软件设计师考试冲刺(习题与解答)@张友生
【2】前缀、中缀、后缀表达式