整理不易,请多多支持笔者,谢谢
计算机执行指令的过程中,需要由CPU的控制器产生每条指令的操作信号并将信号送往相应的部件进行处理,以完成指定的操作。
CPU的运算器只能完成运算,而控制器用于控制整个CPU的工作。
CPU 访问存储器时,被访问数据一般聚集在一个较小的连续存储区域中。若一个存储单元已被访问,则其邻近的存储单元有可能还要被访问,该特性被称为空间局限性。
程序的局限性:时间和空间。时间局限性是指如果程序中的某条指令一旦被执行,则不久的将来该指令可能再次被执行。
RISC (Reduced Instruction Set Computer,精简指令集系统计算机)
- 指令长度固定、指令种类尽量少
- 寻址方式比较单一,多寄存器寻址
- 增加寄存器数目以减少访存次数
- 用硬布线电路实现指令解码,快速完成指令译码
CISC(Complex Instruction Set Computer,复杂指令集系统计算机)
CPU 在执行指令的过程中,会自动修改程序计数器的内容,以使其保存的总是将要执行的下一条指令的地址。
计算机在一个指令周期的过程中,为从内存读取指令操作码,首先要将程序计数器的内容送到地址总线上。
CPU 执行指令的过程中,会自动修改 PC 的内容,PC 是程序(指令)计数器,用来存放将要执行的下一条指令。
指令寄存器(IR)用于存放当前从主存储器读出的正在执行的一条指令。指令寄存器的位数取决于指令字长。
指令译码器(ID)对指令中的操作码字段进行分析和解释。
地址寄存器(AR),不是我们常用的 CPU 内部部件,其作用是是用来保存当前 CPU所要访问的内存单元或 I/O 设备的地址。
累加器(AC)全称累加寄存器,是一个通用寄存器。其功能是,当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为 ALU提供一个工作区。累加寄存器暂时存放 ALU 运算的结果信息。
在程序运行过程中,CPU 需要将指令从内存中取出并加以分析和执行。CPU 依据指令周期的不同阶段来区分在内存中以二进制编码形式存放的指令和数据。
指令和数据是都存储在内存中,传统计算机 CPU在执行过程中根据指令周期的不同阶段来区分是指令还是数据,取指周期取出的是指令,执行周期取出的是数据。
CPU访问速度:通用寄存器 > Cache > 内存 > 硬盘
三总线结构的计算机总线系统由数据总线、地址总线和控制总线组成。
下列关于流水线方式执行指令的叙述中,不正确的是 A
A.流水线方式可提高单条指令的执行速度
B.流水线方式下可同时执行多条指令
C.流水线方式提高了各部件的利用率
D.流水线方式提高了系统的吞吐率
对于只有单条指令的情况下,流水线方式与顺序执行时没有区别的。流水线的原理是在某一时刻可以让多个部件同时处理多条指令,避免各部件等待空闲,由此提高了各部件的利用率,也提高了系统的吞吐率。
流水线的吞吐率是指单位时间流水线处理的任务数,如果各段流水的操作时间不同,则流水线的吞吐率是最长流水段操作时间的倒数。
某四级指令流水线分别完成取指、取数、运算、保存结果四步操作。若完成上述操作的时间依次为 8ns、9ns、 4ns、8ns,则该流水线的操作周期应至少为9ns 。
将一条指令的执行过程分解为取指、分析和执行三步,按照流水方式执行,若取指时间t 取指=4△t、分析时间 t 分析=2△t、执行时间 t 执行=3△t,则执行完 100 条指令,需要的时间为405△t。
第一条指令执行时间+(指令数-1)*各指令段执行时间中最大的执行时间。 4△t + 3△t + 2△t +(100-1)X 4△t =405△t
某指令流水线由 4 段组成,各段所需要的时间如下图所示。连续输入 8 条指令时的吞吐率(单位时间内流水线所完成的任务数或输出的结果数)为8/28△t。
(1+2+3+1)+7*3=28
如果流水线出现断流,加速比会明显下降;要使加速比和效率最大化应该对流水线各级采用相同的运行时间;流水线釆用异步控制并不会给流水线性能带来改善,反而会增加控制电路的复杂性。
VLIW:(Very Long Instruction Word,超长指令字)一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。
移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:
- 左移(<<)
- 带符号右移/算术右移(>>)
- 无符号右移/逻辑右移(>>>)
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移 n 位就相当于乘以 2 的 n 次方。
在机器指令的地址字段中,直接指出操作数本身的寻址方式称为立即寻址。
例如:MOV AX, 1234H ;
给AX寄存器赋值为1234H。指令中地址码字段直接给出操作数本身,而不是其访存地址,不需要访问任何地址的寻址方式被称为立即寻址。
Flynn 主要根据指令流和数据流来分类,分为四类:
- 单指令流单数据流机器(SISD)
- 单指令流多数据流机器(SIMD)
- 多指令流单数据流机器(MISD)
MISD 是采用多个指令流来处理单个数据流。在实际情况中,采用多指令流处理多数据流才是更有效的方法。因此MISD 只是作为理论模型出现,没有投入实际应用。- 多指令流多数据流机器(MIMD)
若某计算机字长为 32 位,内存容量为 2GB,按字编址,则可寻址范围为512M。
内存容量 2GB=2x1024x1024x1024x8位,按字编址时,存储单元的个数为2x1024x1024x1024x8/32=512x1024x1024,即可寻址范围为 512MB。
存储上的 k 是1024,速度上的 k 是1000,注意区分。
直接主存存取(Direct Memory Access,DMA)是指数据在主存与I/O设备间(即主存与外设之间)直接成块传送。
DMA方式工作时,CPU交出计算机系统总线的控制权,在DMA控制硬件的控制下,实现内存与外设间数据的直接传送,并不需要CPU参与工作。故这种方式传送的速度最快。
CPU 是在一个总线周期结束时响应 DMA 请求的。
计算机运行过程中,遇到突发率件,要求 CPU 暂时停止正在运行的程序,转去为突发事件服务,服务完毕,再自动返回原程序继续执行,这个过程称为中断,其处理过程中保存现场的目的是返回去继续执行原程序。
当用户通过键盘或鼠标进入某应用系统时,通常最先获得键盘或鼠标输入信息的是中断处理程序。
计算机中 CPU 的中断响应时间指的是从发出中断请求到开始进入中断处理程序的时间。
中断向量可提供中断服务程序的入口地址。
为了便于实现多级中断嵌套,使用堆栈来保护断点和现场最有效。
计算机运行过程中,CPU 需要与外设进行数据交换。采用中断方式和 DMA 方式控制技术时, CPU 与外设可并行工作。
BIOS(Basic Input Output System)(基本输入输出系统)是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从 CMOS 中读写系统设置的具体信息。
某系统由 3 个部件构成,每个部件的千小时可靠度都为 R,该系统的千小时可靠度为(1-(1-R)²)R,则该系统的构成方式是前两个部件并联后与第三个部件串联。
三个部件串联:R * R * R
三个部件并联:1 - (1-R) * (1-R) * (1-R)
前两个部件并联后与第三个部件串联:(1 - (1-R) * (1-R)) * R
第一个部件与后两个部件并联构成的子系统串联:R * (1-(1-R) * (1-R))
在循环冗余校验方法中,采用模 2 运算来构造校验位。
循环冗余校验(Cyclic Redundancy Check, CRC)
海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。对于 32 位的数据,至少需要加6个校验位才能构成海明码。
海明不等式:校验码个数为 k,2 的 k 次方个校验信息,1 个校验信息用来指出“没有错误”,满足 m+k+1<=2^k(数据位数 + 校验位数 + 1 <= 2^(校验位数))。所以 32位的数据位,需要 6 位校验码。
海明码是奇偶校验的一种扩充。和奇偶校验的不同之处在于海明码采用多位校验码的方式,在这些多个校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行的校验的位组合,可以达到发现错误、纠正错误的目的(当出现两位错误时,海明码能够查错,但无法纠错)。还需要记住以下几个关键的关系:
- 可查出多少位错误:可以发现“≤码距-1”位的错误
- 可以纠正多少位错误:可以纠正“<码距/2”位的错误,因此如果要能够纠正 n 位错误,所需最小的码距应该是“2n+1”
采用 n 位补码(包含一个符号位)表示数据,可以直接表示数值-2(n-1)。
在计算机中,n 位补码(表示数据位),表示范围是 -2(n-1) ~ -2(n-1)-1,其中最小值为人为定义,以 n=8为例,其中-128 的补码是人为定义的 10000000
机器字长为 n 位的二进制数可以用补码来表示2n个不同的有符号定点小数。
某机器字长为 n,最高位是符号位,其定点整数的最大值为2(n-1) -1。
浮点数编码由两部分组成:阶码(即指数,为带符号定点整数,常用移码表示,也有用补码的)和尾数(是定点纯小数,常用补码表示,或原码表示)。
因此可以知道,浮点数的精度由尾数的位数决定,表示范围的大小则主要由阶码的位数决定。
浮点数的表示分为阶和尾数两部分。两个浮点数相加时,需要先对阶,即将小阶向大阶对齐,同时将尾数右移 n 位(n 为阶差的绝对值)。
如果“2X”的补码是“90H”,那么 X 的真值是-56。
90H即为二进制的:10010000。说明此数为负数,其反码为:10001111,其原码为:11110000,即-112,2X=-112,所以X=-56。
若计算机存储数据采用的是双符号位(00 表示正号、11 表示负号),两个符号相同的数相加时,如果运算结果的两个符号位经逻辑异或运算得 1,则可断定这两个数相加的结果产生了溢出。
若符号为01,则表示运算结果大于允许取值范围的最大正数,称为正溢出;若符号位为10,则表示运算结果是负数,其值小于允许取值范围的最小负数,称为负溢出。
与安全电子邮箱服务有关的协议是:SSL,HTTPS,S/MIME,PGP。
注意MIME只是一个互联网标准,扩展了电子邮件标准,与安全无关。
与安全电子邮件相关的是S/MIME安全多用途互联网邮件扩展协议。
SSL(Secure Sockets Layer 安全套接字协议) 和 HTTPS涉及到邮件传输过程的安全。
PGP(全称:Pretty Good Privacy,优良保密协议),是一套用于信息加密、验证的应用程序,可用于加密电子邮件内容。
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。HTTPS 使用端口 443,而不是像 HTTP 那样使用端口 80 来和 TCP/IP 进行通信。
入侵检测技术:专家系统、模型检测、简单匹配。
漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。而不是对入侵行为的检测技术。
网络攻击有主动攻击和被动攻击两类。
其中主动攻击是指通过一系列的方法,主动向被攻击对象实施破坏的一种攻击方式,例如重放攻击、IP地址欺骗、拒绝服务攻击等均属于攻击者主动向攻击对象发起破坏性攻击的方式。
流量分析攻击是通过持续检测现有网络中的流量变化或者变化趋势,而得到相应信息的一种被动攻击方式。
重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。
会话拦截属于典型的被动攻击。
拒绝服务攻击是指不断对网络服务系统进行干扰,改变其正常的作业流程,执行无关程序使系统响应减慢直至瘫痪,从而影响正常用户的使用。
当网络服务系统响应速度减慢或者瘫痪时,合法用户的正常请求将不被响应,从而实现用户不能进入计算机网络系统或不能得到相应的服务的目的。
DDoS是分布式拒绝服务的英文缩写。分布式拒绝服务的攻击方式是通过远程控制大量的主机向 H 标主机发送大量的干扰消息的一种攻击方式。
SYN Flooding 攻击以多个随机的源主机地址向目的路由器发送 SYN 包,在收到目的路由器的 SYN ACK后并不回应,于是目的路由器就为这些源主机建立大量的连接队列,由于没有收到ACK—直维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务,甚至导致路由器崩溃。服务器要等待超时才能断开己分配的资源,所以SYN Flooding 攻击是一种 DoS 攻击。
从 netstat -n 的输出信息中可以看出,本地主机 192.168.0.200 使用的端口号 2011、2038、2052都不是公共端口号。根据状态提示信息,其中己经与主机 128.105.129.30 建立了连接,与主机 100.29.200.110正在等待建立连接,与主机 202.100.112.12 已经建立了安全连接。
机房安全属于物理安全,入侵检测属于网络安全,漏洞补丁管理属于系统安全,数据库安全是应用安全。
Web 服务器是为一种为公共网络提供 Web访问的服务器;网络管理服务器和入侵检测服务器是管理企业内部网和对企业内部网络中的数据流进行分析的专用设备,一般不对外提供访问;而财务服务器是一种仅针对财务部门内部访问和提供服务的设备,不提供对外的公共服务。
常见的蠕虫病毒有红色代码、爱虫病毒、熊猫烧香、Nimda 病毒、爱丽兹病毒、欢乐时光等。
冰河是木马软件,主要用于远程监控,冰河木马后经其他人多次改写形成多种变种,并被用于入侵其他用户的计算机的木马程序。
CIH为系统病毒。
X 卧底是新近产生的、通过木马形式传播、目标为智能手机的病毒。
震网(Stuxnet)病毒是一种破坏工业基础设施的恶意代码,利用系统漏洞攻击工业控制系统,是一种危害性极大的蠕虫病毒。
引导区病毒破坏的是引导盘、文件目录等。
宏病毒破坏的是OFFICE文件相关。
木马的作用一般强调控制操作。木马程序的客户端运行在攻击者的机器上。
蠕虫病毒可以利用漏洞主动攻击。
计算机病毒具有隐蔽性、传染性、潜伏性、触发性和破坏性等特征。
公开密钥加密(非对称加密):ECC、DSA 和 RSA。
共享密钥加密(对称加密),常见算法有:DES,三重DES、RC-5、IDEA、AES。
用户 A 和 B 要进行安全通信,通信过程需确认双方身份和消息不可否认。A 和 B 通信时可使用数字证书来对用户的身份进行认证;使用数字签名确保消息不可否认。
信息摘要算法(Message-Digest Algorithm,MD5) 是一种摘要算法,经过一系列处理后,算法的输出由四个 32 位分组组成,将这四个 32 位分组级联后将生成一个 128 位散列值。SHA-1也是一种摘要算法。它们不能用于加密数据。利用报文摘要算法生成报文主要的目的是防止发送的报文被篡改。
RSA、RC-5(效率比前者高),属于非对称加密算法 RC-5加密算法适合对大量的明文消息进行加密传输。
RSA主要具有数字签名和验签的功能。
IDEA、RC4,属于对称加密算法,只能用来进行数据加密。
在安全通信中,S 将所发送的信息使用S 的私钥进行数字签名,T 收到该消息后可利用S 的公钥验证该消息的真实性。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用 HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名的作用:接收者可验证消息来源的真实性,发送者无法否认发送过该消息,接收者无法伪造或篡改消息。
假定用户 A、B 分别在 I1 和 I2 两个 CA 处取得了各自的证书,I1、I2 互换公钥是 A、B 互信的必要条件。
交换私钥是无论什么情况下都绝对不允许发生的情况。本题AB的信任基础应该建立在CA之上。
CA认证,即电子认证服务,是指为电子签名相关各方提供真实性、可靠性验证的活动。证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。
PKI 体制中,保证数字证书不被篡改的方法是用 CA 的私钥对数字证书签名。
防火墙通过对流经数据流进行分析和检查,可实现对数据包的过滤、保存用户访问网络的记录和服务器代理功能。
包过滤技术对应用和用户是透明的。
应用级网关防火墙是内部网和外部网的隔离点,它可对应用层的通信数据流进行监控和过滤。
防火墙工作层次越高,工作效率越低,安全性越高。
防火墙区域按照受保护程度从高到低正确的排列次序应为内网、DMZ 和外网。
DMZ (Demilitarized Zone,隔离区)是指非军事化区,也称周边网络,可以位于防火墙之外也可以位于防火墙之内。非军事化区一般用来放置提供公共网络服务的设备,这些设备由于必须被公共网络访问,所以无法提供与内部网络主机相等的安全性。
甲公司购买了一工具软件,并使用该工具软件开发了新的名为“恒友”的软件。 甲公司在销售新软件的同时,向客户提供工具软件的复制品,则该行为侵犯了著作权。甲公司 未对“恒友”软件注册商标就开始推向市场,并获得用户的好评。三个月后,乙公司也推出名为“恒友”的类似软件,并对之进行了商标注册,则其行为侵犯了著作权。
著作权自产品完成之时就开始保护,所以甲公司当软件产品完成之后,该产品就已经受到著作权保护了,乙公司的行为侵犯了著作权。
有可能无限期拥有的知识产权是商标权。
商标权可以通过续注延长拥有期限,而著作权、专利权和设计权的保护期限都是有限期的。
我国保护计算机软件著作权的两个基本法律文件是《中华人民共和国著作权法》和《计算机软件保护条例》(一法一条例)
凡是供职于某公司,利用公司相关资源进行开发完成的作品,其著作权归公司所有。
甲软件公司受乙企业委托安排公司软件设计师开发了信息系统管理软件,由于在委托开发合同中未对软件著作权归属作出明确的约定,所以该信息系统管理软件的著作权由甲享有。
目前根据我国法律法规的规定必须使用注册商标的是烟草类商品。
某软件公司参与开发管理系统软件的程序员张某,辞职到另一公司任职,于是该项目负责人将该管理系统软件上开发者的署名更改为李某(接张某工作)。该项目负责人的行为侵犯了张某开发者身份权(署名权)。
开发者的身份权,不随软件开发者的消亡而丧失,且无时间限制。
美国某公司与中国某企业谈技术合作,合同约定使用1项美国专利(获得批准并在有效期内),该项技术未在中国和其他国家申请专利。依照该专利生产的产品在中国销售,中国企业不需要向美国公司支付这件美国专利的许可使用费。
以下作品中,不适用或不受著作权法保护的是 D。
A.某教师在课堂上的讲课
B.某作家的作品《红河谷》
C.最高人民法院组织编写的《行政诉讼案例选编》
D.国务院颁布的《计算机软件保护条例》
国务院颁布的《计算机软件保护条例》是国家为了管理需要制定的政策法规,故不适用著作权法保护。
结构化设计方法是一种面向数据流的设计方法,与结构化分析方法衔接。在需求分析阶段,结构化分析方法产生了数据流图,而在设计阶段,结构化设计方法将数据流映射为软件系统的模块结构。
数据流图从系统的输入数据流到系统的输出数据流的一连串变换形成了一条信息流。其中的信息流一般情况下包括变换流型和事物流型。不同类型的数据流到程序模块的映射方法不同。一个软件系统往往不仅仅有一种数据流类型。
数据流图(Data Flow Diagram,DFD)建模应遵循自顶向下、从抽象到具体的原则。
数据流图中的基本图形元素包括数据流、加工、数据存储和外部实体。其中,数据流、加工和数据存储用于构建软件系统内部的数据处理模型,而外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向。外部实体包括:人/物、外部系统、组织机构等。
对数据流图中的每个基本加工,需要有一个加工规格说明,描述把输入数据流变换为输出数据流的加工规则,但不需要描述实现加工的具体流程。可以用结构化语言、判定表和判定树来表达基本加工。
在结构化分析中,用数据流图描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模。当采用数据流图对一个图书馆管理系统进行分析时,读者是一个外部实体。
在结构化分析中,用数据流图对软件功能建模,加工是数据流的一个重要要素,可以用多种方式描述,如流程图、NS盒图等,其中决策树和决策表适于用来表示加工中涉及多个逻辑条件的情况。
数据流图对功能建模,E-R图对数据建模。
结构化设计方法中使用结构图来描述构成软件系统的模块以及这些模块之间的调用关系。结构图的基本成分不包括数据。
结构化开发方法由结构化分析、结构化设计和结构化程序设计构成,是一种面向数据流的开发方法。
结构化方法总的指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,而且难以适应需求的变化。
.
架构定义/体系结构设计任务:定义软件的主要结构元素及其之间的关系。
数据存储设计任务:确定软件涉及的文件系统的结构及数据库的表结构。
接口设计任务:描述软件与外部环境之间的交互关系,软件内模块之间的调用关系。
详细/过程设计任务:确定软件各个模块内部的算法和数据结构。
结构化方法的分析结果由以下几部分组成:一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。
在结构化设计中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则:
- 模块的大小要适中。
- 模块的扇入和扇出要合理。(高扇入低扇出)
- 深度和宽度适当。
数据字典的条目有数据流、数据项、数据存储、基本加工等。
某商店业务处理系统中,基本加工“检查订货单”的描述为:若订货单金额大于 5000元,且欠款时间超过 60 天,则不予批准;若订货单金额大于 5000 元,且欠款时间不超过 60天,则发出批准书和发货单;若订货单金额小于或等于 500 元,则发出批准书和发货单,若欠款时间超过 60 天,则还要发催款通知书。现采用决策表表示该基本加工,则条件取值的组合数最少是3。
ERD(实体关系图) 的弱实体是指存在和标识需要依赖于其他实体的实体。
比如成绩需要依赖于某个课程。
在采用结构化开发方法进行软件开发时,设计阶段接口设计主要依据需求分析阶段的数据流图。
软件体系结构的各种风格中,仓库风格包含一个数据仓库和若干个其他构件。
数据仓库位于该体系结构的中心,其他构件访问该数据仓库并对其中的数据进行增、删、改等操作。
仓库风格包括数据库系统、黑板系统、超文本系统。
优点:
- 解决问题的多方法性
- 具有可更改性和可维护性
- 有可重用的知识源
- 支持容错性和健壮性
缺点:
- 测试困难:由于黑板模式的系统有中央数据构件来描述系统的体现系统的状态,所以系统的执行没有确定的顺序,其结果的可再现性比较差,难于测试。
- 不能保证有好的求解方案
- 效率低
- 开发成本高
- 缺少对并行机的支持
对高级语言源程序进行编译的过程中,有穷自动机(NFA 或 DFA)是进行词法分析的适当工具。
10 个成员组成的开发小组,若任意两人之间都有沟通路径,则一共有45条沟通路径。
任意两人之间都有沟通路径,那么A1与A2、A3、…、A10之间存在9条沟通路径,A2与A1沟通路径已计算,与A3、A4、…、A10之间有8条沟通路径,依次类推,总的沟通路径数为9+8+7+6+5+4+3+2+1=45条沟通路径。
下图所示为一个不确定有限自动机(NFA)的状态转换图,与该NFA等价的DFA 是 C。
题目给出的NFA能够识别字符串000,010等,以这两个字符串为例进行分析。与之等价的DFA,也必须能够识别这样的串。A选项不能识别000,B选项不能识别010,D选项不能识别010。只有C选项能够同时识别这两个串。
下图所示为一个不确定有限自动机(NFA)的状态转换图。该 NFA 识别的字符串集合可用正规式 A 描述。
A. ab* a
B. (ab)* a
C. a*ba
D. a(ba) *
运算符"|“表示“或”、并集。” * "表示 * 之前括号里的内容出现0次或多次。b可以出现0或多次,因为可以选择经过b或不经过b,两个a必须经过。
某确定的有限自动机(DFA)的状态转换图如下图所示(A 是初态,C 是终态),则该DFA 能识别 B 。
A. aabb
B. abab
C. baba
D. abba
简单算术表达式的结构可以用下面的上下文无关文法进行描述(E 为开始符号), B 是符合该文法的句子。
E→T|E+T
T→F|TF
F→-F|N
N→0|1|2|3|4|5|6|7|8|9
A.2- -34
B.2+ -3*4
C.(2+3) * 4
D.2 *4-3
乔姆斯基(Chomsky)将文法分为 4 种类型,程序设计语言的大多数语法现象可用其中的上下文无关文法描述。
上下文无关文法:形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为 2 型文法。
表达式采用逆波兰式表示时,利用栈进行求值。
己知文法 G: S→A0|B1,A→S1|1, B→S0|0,其中 S 是开始符号。从 S 出发可以推导出某些 0 和 1 个数相等的字符串。
推导出 1010 的过程为 S→A0→S10→A010→1010,
推导出 0110 的过程为S→A0→S10→B110→0110,
对于 0000、1111、1100、0011 等则推导不出。
算术表达式 a+(b-c)* d 的后缀式是a b c - d * + (-、+、* 表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。
a+(bc-)* d -> a+(bc-d*) -> abc-d*+
L = {anbn|n>=1}中的字符串特点是 a 的个数与 b 的个数相同,且所有的 a 都在 b之前,该集合不是正规集,不能用正规式表示。
正规集可用正规式描述,用有限自动机识别。
程序设计语言的基本成分包括数据、运算、控制和传输等。
程序设计语言的控制成分包括顺序、选择和循环三种。
高级程序设计语言不依赖于具体的机器硬件。
程序中常量的值在运行时不能改变。
局部变量的值通常在其生存期内是变化的。
函数 f 和 g 的定义如下图所示。执行函数 f 时若采用引用(call by reference)方式调用函数 g(a),则函数 f 的返回值为28。
对于实参 a,传递给 g(a) 之后,在 g(a) 函数,表现为形参 x。根据 g(x)代码:m=5*2=10,x=10-1=9,返回值 x+m=19; 返回 f()代码,此时 a(即 g(x)中的 x)的值已经改变,为 9;c 等于 g(a)的返回值,也就是 19。最终可得 f() 的返回值 a+c=28。
弱类型语言(动态类型语言)是指不需要进行变量/对象类型声明的语言。Python属于弱类型语言。
程序设计语言
声明式系内函数式:Lisp
命令式系内过程式:C、Fortran
面向对象:Java、C#
XML(可扩展标记语言)是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
Python是一种面向对象、解释型计算机程序设计语言。
Prolog 是逻辑型程序设计语言。
语法制导翻译是一种静态语义分析方法。
标记语言常用于描述格式化和链接。
编译型语言的执行效率更高。
脚本语言(Script languages,scripting programming languages,scripting
languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本"screenplay",每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言中可以使用变量。脚本语言中可以定义函数和调用函数。
运行下面的 C 程序代码段,会出现动态语义错误。
int k=0;
for(;k<100;);
{
k++;}
动态语义错误:逻辑上的错误,比如死循环等,编译器在编译的时候并未发现,但逻辑上这是个错误;
静态语义错误:可被编译器发现的语法错误,比如 (5+6(); 这种在编译器编译的时候就会被发现的语法错误;
在本题中,for语句后有“;”号,说明该循环语句的语句体为空,此时,循环会是一个死循环,所以存在语义错误。
程序运行时的用户内存空间一般划分为代码区、静态数据区、栈区和堆区,其中栈区和堆区也称为动态数据区。全局变量的存储空间在静态数据区。
以编译方式翻译 C/C++源程序的过程中,语法分析阶段的主要任务是对各条语句的结构进行合法性分析。
在以阶段划分的编译器中,词法分析阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。
语义分析:进行类型分析和检查,主要检测源程序是否存在静态语义错误。
包括:运算符和运算类型不符合,如取余时用浮点数语法分析的单位是句子,词法分析的单位是字符,语义分析是检查合不合法。
在对高级语言源程序进行编译或解释处理的过程中,需要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的符号表中;对可执行语句,则是翻译成中间代码或目标代码。
中间代码的作用是可使程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码有多种形式,常见的有逆波兰记号(后缀式)、语法树、四元式和三元式,它们的共同特点是与具体的机器无关,不依赖于具体的计算机。
将高级语言源程序翻译成机器语言程序的过程中,常引入中间代码。以下关于中间代码的叙述中,不正确的是D。
A.中间代码不依赖于具体的机器
B.使用中间代码可提高编译程序的可移植性
C.中间代码可以用树或图表示
D.中间代码可以用栈和队列表示
将高级语言程序翻译为机器语言程序的过程中,常引入中间代码,其好处是有利于进行与机器无关的优化处理。
编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成 6 个阶段,其中,中间代码生成和代码优化并不是每个编译器都必需的。目标程序可以独立于源程序运行。
分配寄存器的工作在目标代码生成阶段进行。
与编译器相比,解释器参与运行控制,程序执行的速度慢。
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它是直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。
移进–归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于自底向上/自下而上的语法分析方法。
语法分析方法有多种,根据产生语法树的方向,可分为自底向上和自顶向下两类。
递归下降分析法和预测分析法是常用的自顶向下分析法。
算符优先分析法和 LR 分析法属于自底向上的语法分析方法。
编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址。
在单处理机系统中,采用先来先服务调度算法。系统中有 4 个进程 Pl、P2、P3、 P4(假设进程按此顺序到达),其中 P1为运行状态,P2 为就绪状态,P3 和 P4 为等待状态,且P3 等待打印机,P4 等待扫描仪。若 P1时间片到,则 P1、P2、P3 和 P4 的状态应分别为就绪、运行、等待和等待。
PV 操作是操作系统提供的具有特定功能的原语。利用 PV 操作可以实现资源的互斥使用。
PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。
计算机系统中互斥资源 R 的可用数为 8,系统中有 3 个进程 P1、P2 和 P3 竞争 R,且每个进程都需要 i 个 R,该系统可能会发生死锁的最小 i 值为 4。
本题对于 R 资源可用数为 8,分配到 3 个进程中,为了让最后的 i 值最小,所以每个进程尽量平均分配,可以得到 3 、3、2 的分配情况,此时如果假设 i 的取值为 3,则必定不会形成死锁。当 i>3 时系统会形成死锁,此时取整,即最小 i 值为 4。
进程 P1、P2、P3、P4 和 P5 的前趋图如下所示:
若用 PV 操作控制这 5 个进程的同步与互斥的程序如下,那么程序中的空①和空②处应分别为V(S2)和 P(S1);空③和空④处应分别为P(S3)和 V(S5);空⑤和空⑥处应分别为V(S6)和 P(S5)P(S6)。
xx执行前为P(xx)(检查)(申请资源),xx执行后为V(xx)(唤醒)(释放资源)。
某系统中有 3 个并发进程竞争资源 R,每个进程都需要 5 个 R,那么至少有13个 R,才能保证系统不会发生死锁。
系统保证不发生死锁的资源数为:并发进程数 x (进程需要资源数 - 1) + 1
假设系统中有 n 个进程共享 3 台扫描仪,并采用 PV 操怍实现进程同步与互斥。若系统信号量 S 的当前值为-1,进程 P1、P2 又分别执行了 1 次 P(S)操作,那么信号量 S 的值应为-3。
P减V增
某企业的生产流水线上有 2 名工人 P1 和 P2,1 名检验员 P3。P1 将初步加工的半成品放入半成品箱 B1;P2 从半成品箱 B1 取出继续加工,加工好的产品放入成品箱 B2;P3 从成品箱 B2 去除产品校验。假设 B1 可存放 n 件半成品,B2 可存放 m 件产品,并设置 6 个信号量 S1、S2、S3、S4、S5 和 S6,且 S3 和 S6 的初值都为 0。采用 PV 操作实现 P1、P2 和 P3 的同步模型如下图所示,则信号量 S1 和 S5都是互斥信号量,其初值分别为 1 和 1;S2、S4 的初值分别为n、m。
因为信号量 S1 是一个互斥信号量,表示半成品箱 B1 当前有无工人(生产者)使用,所以初值为 1。
信号量 S5也是一个互斥信号量,表示成品箱 B2 当前有无工人或检验员使用,所以初值为 1。
信号量 S2 表示半成品箱 B1 的容量,故 S2 的初值为n。
当工人 P1 不断地将其工序上加工的半成品放入半成品箱 B1 时,应该先测试半成品箱是否有空位,故工人 P1 使用 P(S2),当工人P2 从半成品箱取一件半成品时,半成品箱 B1 就空出一个空位,故工人 P2 使用 V(S2)释放空间。
同理,信号量 S4 表示成品箱 B2的容量,故 S4 的初值为 m。
当工人 P2 完成一件产品放入成品箱 B2 时,应该先测试成品箱是否有空位,故工人 P2 使用 P(S4),当检验员 P3 从成品箱取一件产品检验时,成品箱 B2 就空出一个空位,故检验员 P3 使用 V(S4)释放空间。
假设系统采用 PV 操作实现进程同步与互斥。若 n 个进程共享两台打印机,那么信号量S 的取值范围为-(n-2)~2。
系统采用 PV 操作实现进程同步与互斥,若有 n 个进程共享两台打印机,那么信号量 S初值应为 2。
当第 1 个进程执行 P(S) 操作时,信号量 S 的值减去 1 后等于 1;
当第 2 个进程执行 P(S) 操作时,信号量 S 的值减去 1 后等于 0;
当第 3 个进程执行 P(S) 操作时,信号量 S 的值减去 1 后等于-1;
当第 4 个进程执行 P(S) 操作时,信号量 S 的值减去 1 后等于-2;
……;
当第 n 个进程执行 P(S) 操作时,信号量 S 的值减去 1 后等于 -(n-2) 。
可见,信号量S的取值范围为-(n-2)〜2。
在如下所示的进程资源图中,P1、P2 是阻塞节点、P3 是非阻塞节点;该进程资源图是可以化简的,其化简顺序为 P3→P1→P2或P3→P2→P1。
图中 R1 资源只有 2 个,P2 进程申请该资源得不到满足,故 P2 进程是阻塞节点;
R2 资源只有 3 个,P1申请该资源得不到满足,故 P1 进程也是阻塞节点;
R3 资源只有 2 个,分配给 P1 进程 1 个,P3 申请 1 个该资源可以得到满足,故 P3 是非阻塞节点。
R3资源有2个,已分配1个,P3申请1个R2资源可以得到满足,故进程P3可以运行完毕释放其占有的资源。
这样可以使得P1、P2都变为非阻塞节点,得到所需资源运行完毕,因此,进程资源图是可化简的。
其化简顺序可以为 P3 - P1 - P2 或 P3 - P2 - P1。
进程资源图如图(a)和(b)所示,其中:图(a)中P1、P2 都是阻塞节点,所以该图不可以化简,是死锁的;图(b)中P2 是阻塞节点,P1、P3 是非阻塞节点,该图可以化简,是非死锁的。
假设某计算机系统中资源 R 的可用数为 6,系统中有 3 个进程竞争 R,且每个进程都需要 i 个 R,该系统可能会发生死锁的最小 i 值是 3。若信号量 S 的当前值为-2,则 R 的可用数和等待 R 的进程数分别为 0、2。
假设系统中有三类互斥资源 R1、R2 和 R3,可用资源数分别为 10、5 和 3。在 T0 时刻系统中有 P1、P2、P3、P4 和 P5 五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示,此时系统剩余的可用资源数分别为2、0 和 1。如果进程按P5→P2→P4→P3→P1序列执行,那么系统状态是安全的。
假设某分时系统采用简单时片轮转法,当系统中的用户数为 n、时间片为 q 时, 系统对每个用户的响应时间 T=n*q。