计算机体系

  • 继电器,真空管,晶体管。

继电器。使用电控制的机械开关。控制导线连接一个中间线圈,电流通过中间线圈产生磁场,吸引金属臂闭合,产生通路。可以连接其它,比如马达。

真空管。密封玻璃管两个电极,加热一端电极会发射正电荷,另一端吸引这些正电荷,形成通路。如果发射负电荷,则不会吸引,无法形成通路。

引入控制电级,向控制电极施加正电荷,就会允许电子通过。如果施加负电荷,则阻止电子通过。从而连接或断开电路。

巨人计算机,第一台可编程的计算机。编程时把一些电线插到电板上即可。真空管的出现使计算机由机电驱动进入电子驱动。

晶体管。两个电级被某材料隔开,这种材料有时导电,有时不导电,称为半导体。引入控制线,连接一个门电极,改变门电极的电荷,可以控制半导体材料的导电性。控制通路形成。

  • 布尔运算,二进制?半加器,全加器,ALU?

使用晶体管构造NOT,AND,OR,XOR,逻辑门电路。完成基础的真假运算。只有两个值0和1,通过增加位数来表示更多的数。

使用一个异或逻辑门和一个与逻辑门构造一个半加器。

三个数A,B,C相加。A,B使用一个半加器,有输出位,进位两个引脚。输出位和C再构造一个半加器,有了新的输出位,进位。输出位是最终的输出位。进位和第一个半加器的进位组成或门,构造最终进位。

ALU由算术运算器和逻辑运算器构成。算术运算器实现多位数相加。

  • 与门,或门构造存储器

存一位,称为锁存器。一个与门和或门共同构成。有设置,复位两个输入。设置为1,复位为0时,输出为1;设置为1,复位为1时,输出为0;设置和复位都是0,输出不变,存放最后一个输出。

使用一个数据输入线代替设置和复位,一个允许写入线,构成一个门锁,称为锁存器。

存八位,称为寄存器。八个锁存器并排存放,有一条全局允许写入线,有八条数据输入线,八条结果输出线。

存256位,使用矩阵。16*16的锁存器构成一个矩阵。有一条输入输出数据线,一条允许写入线,一条允许读出线,16+16根定位一个锁存器的线。

使用只有4位输入的多路复用器表示矩阵中的一个行,再使用4位输入的多路复用器表示矩阵中的一个列。这样,一个256位存储器就使用8条地址输入线,1条数据输入输出线,一条允许写入线,一条允许读出线。

并排存放8个256位的寄存器,构成一个256字节的存储器。有8条数据输入输出线,8条地址输入线,一条允许写入线,一条允许读出线。

  • CPU和内存通信

CPU。指令地址寄存器,指令寄存器。向内存发出第一条指令地址,内存收到后,传入指令,称为取指操作。接下来就是解码,专门的解码电路分析出指令的意义,是把内存中的某个值放到寄存器A中。

最后就是执行过程,内存读入指令中地址码,拿到地址后,再传入CPU中的寄存器A。

在第三条指令中需要把寄存器A的值和寄存器B的值相加,就需要一个ALU单元,以寄存器A,B作为输入,相加后的结果存放至ALU中,再传输到寄存器A。

一些寄存器,控制单元,运算单元ALU共同构成一个CPU。

上述就是一个简单的程序,描述CPU和内存之间的数据传输以及地址传输。

  • 高端CPU,提升性能?

CPU和主存之间使用Cache缓解主存速度慢的问题。同时也要注意Cache和主存中的数据不一致的问题。也就是出现了脏位。

出现脏位后,Cache需要新数据是,对内存进行检查,把脏位数据写入内存。

另一种提升性能的方法是使用指令流水。以往CPU执行都是取指,译码。执行,一条指令需要三个时钟周期。

使用指令流水后,可以执行第一条指令,译码第二条指令,取指第三条指令,这样一个时钟周期就执行一条指令。提高了性能。

指令流水也会造成数据不一致的问题。解决方案是使用数据依赖性,必要时停止流水线,以免造成更大的错误。

指令流水第二个问题是遇到跳转指令,一般都会停止,等待运行。但这样也会造成资源浪费,所以使用指令预测,预测跳转指令后是什么指令,再执行。

另一种性能提升方法是超标量指令机。即便使用流水线,还是会有处理机资源空闲的情况。在取值过程中,ALU还是会闲置。

一次性执行多条指令就更好。这些指令频次都很高。

第四种提升性能方法是多核处理器。上述三种方法都是优化一条指令流,这种方法就是同时运行多条指令流。上述优化一条指令流的方法同样也也适应在这里。

  • 早期编程方式,编程语言?

早期使用打孔纸带,插线板,插线板集成后的开关编程。这些方式直接编制二进制0和1代码让计算机运行。

对二进制机器代码抽象后产生LOAD A 30这样的汇编指令。再对汇编指令抽象后产生高级编程语言。例如C,python,Java等。

  • 现代编程

算法,数据结构,软件工程,之后的最大软件操作系统诞生。

操作系统也是一种软件,只是能够驱动硬件,并提供其它程序的运行环境。打开计算机后,第一个运行的就是操作系统。

操作系统最基本功能有处理机管理,内存管理,设备管理,文件管理。这些功能都是操作系统的内核。

  • 存储器

有了操作系统,执行任务的程序外。这些程序的存储就是个问题。最开始使用打孔纸卡,打孔纸带存储。后来有磁芯存储器,磁带。

再到熟悉的硬盘,软盘,U盘,移动硬盘等。这些存储设备内部都是使用集成电路。

集成电路的制作过程。使用一个硅盘面。上面加氧化层,再加光刻胶,再加光掩膜。光照之下,没被光掩膜遮住的光刻胶会融化,露出氧化层。再使用一种化学物质洗掉光刻胶。

再使用另一种化学物质洗掉漏出的氧化层,到达硅表面。为了改变硅的导电性,一种掺杂的技术,填充被洗掉的氧化层。

使用几轮光刻,制作晶体管。多个晶体管组合构成逻辑门。组成集成电路。

  • 文件,压缩

有了上述的存储器后,就能够存储很大的数据。这些数据高达万亿位。就是操作系统也能够当做文件存储在存储器上。

文件系统抽象了文件在磁盘的存储情况。也是操作系统的一个具体功能。

压缩就是减少文件的存储空间,达到相同空间存储更多文件的目的。常见的压缩方法有哈夫曼压缩。

采用哈夫曼树,到树根的距离代表了使用的频率。如果一个项目使用频繁,就靠近树根,这样二进制代码就相对短。反之,就相对比较长。

  • 输入,输出

早期电传打印机,按下键盘后,信号通过电报线传到另一台打印机上,并在打印机的纸上输出。

阴极射线管,把电子发射到有磷光体的屏幕上。电子是带点粒子,路径由磁场控制。两种显示方式,用很多小线段绘制图形,甚至文字。

矢量扫描,电子只发光一会,重复的足够快,可以显示出图形。

光栅扫描,按固定路径,一行一行来,只在特定的点打开电子束,以此绘制图形。

像素,屏幕上显示清晰的点。使用字符生成器(第一代显卡),从内存读出每个字符的二进制代码,显示在屏幕。

显示任意的形状,使用CRT“矢量模式”,使用矢量指令显示各种形状。矢量指令和字符集一样都存储在内存中,所以程序可以改变。

sketchpad第一个图形程序,有线连着电脑的触控笔,笔尖用光线传感器,检测显示器的刷新,判断刷新时间,电脑判断笔的位置。有了光笔和按钮电脑就可以做出各种图形。

内存“帧缓冲区”的各种像素数据可以显示图形。

3D图形显示。扫描线填充,抗锯齿,光照,纹理化这些技术渲染图形。

  • 计算机网络,网络安全,密码学

网络安全三个特性。保密性,有权限的用户使用数据。完整性,有权限的用户修改数据。可用性,有权限的用户随时访问数据。

使用身份验证,访问控制。确定你是谁?你能访问什么?

身份验证包括,你知道什么?你有什么?你是谁?这三种验证。

身份验证之后,需要确定用户能访问什么数据。使用三种访问控制方式,绝密,机密,公开。只能向下读,向上写。

凯撒加密,英格玛,AES都是对称加密。RSA是非对称加密。

访问一个服务器,验证服务器的密钥,建立临时密钥,使用对称加密保证通信。

  • 机器学习,人工智能,计算机视觉,自然语言处理,计算机未来

机器学习算法,决策树,支持向量机都源于统计学。

人工神经网络不来自于统计学,加权,求和,偏置,激活函数是每个神经元的基本过程,有许多隐藏层,每一层的神经元都要执行上述过程,这就成为深度学习。

把核应用于像素块,这种操作就是“卷积”。两个边缘增强的核叫“prewitt算子”。

给每个神经元二维数组当做权重来计算,第一层得出是图形的某个特征,层层递进,最后识别出一个完整的图形。这种算法叫做卷积神经网络。

计算机能听懂人类语言,就是自然语言处理过程。使用短语结构规则,来分析人类语言。深度神经网络处理自然语言。

VR,AR,无人驾驶,无人机,可穿戴设备,服务型机器人,新服务连接人们,新硬件神经网络,3D图形,无处不在的虚拟助手。

加密货币,无线通讯,3D打印,生物信息学,量子计算。

  • 现代计算机体系结构?

冯诺依曼计算机工作原理,存储程序+程序控制。基本特点有,指令和数据以二进制形式存放于存储器中,并能够寻址。指令在存储器按顺序存放。指令由操作码和地址码组成,操作码表示操作的性质,地址码表示操作数在存储器中的位置。

基本构成。控制器,运算器,存储器,输入输出设备。

控制器。由程序计数器PC,指令寄存器IR,控制单元组成CU。PC用来存放当前欲执行的指令地址,可以自动加一形成下一条指令地址,与主存的MAR之间有一条通路。

IR用来存放当前执行的指令,内容来自于主存MDR。指令中的操作码送到CU,分析指令并发出各种微操作命令序列,地址码送往MAR取操作数。

运算器。完成数据运算和逻辑运算。包括若干通用寄存器,暂存操作数和中间结果(累加器ACC,操作数寄存器,变址寄存器,基址寄存器)还有程序状态字寄存器,保留各类运算指令或测试指令执行结果的状态信息,表征系统运行状态。

存储器。存储器由若干个存储单元组成,每个存储单元由若干个存储元件组成。每个存储元件存放一位二进制0或1,存储单元存放一连串二进制代码。这段代码称为存储字,代码长度为存储字长。

存储器按照存储单元的地址进行存取,这种方式称为按地址存取。

主存的基本组成。存储元件,存储二进制信息;地址寄存器MAR,存放访存地址,地址译码后找到所选的存储单元;数据寄存器MDR,主存和其它部件的中介机构,暂存从存储器读写的信息;时序控制逻辑产生存储器操作的各种时序信号。

MAR和MDR属于存储器,但位于CPU。

输入设备。将程序和数据以机器能识别和接收的形式传入到计算机。

输出设备。将计算机的处理结果以人能够接受的形式或其它系统要求的形式展示出来。

哈佛结构采用数据和程序的分离存储结构,是一种并行体系结构。程序存储器和数据存储器是两个独立的存储器,可以独立编址,独立访问。两个存储器对应系统四条总线,程序存储器数据总线和地址总线,数据存储器数据总线和地址总线。这种存储可以在一个机器周期内同时获得指令字和操作数,提高执行速度和吞吐量。程序和数据在两个物理空间,取指和执行能完全分开。

  • 计算机怎样启动,从电源开始?

第一阶段,基本输入输出系统BIOS。1970年,只读内存芯片ROM发明,通电后的第一件事就是读取BIOS。BIOS程序首先检查计算机硬件能否满足基本运行条件。

硬件自检后,BIOS会把控制权交给下一阶段的启动程序,所以,BIOS需要知道下一阶段的启动程序的存放位置。于是,BIOS需要一个外部设备的排序,这种排序就叫启动顺序。

第二阶段,主引导记录。BIOS按照启动顺序,把控制权交给排在第一位的存储设备。计算机读取该设备的第一个扇区,也是最前面的512字节,这512字节就叫主引导记录,告诉计算机到硬盘的那个位置去找操作系统。512字节中的最后两个字节是0x55和0xAA,则表示能够启动该设备,如果不是,则不能启动。控制权转移到启动顺序的下一个设备。

主引导记录512字节。1-446字节,存放调用操作系统的机器码。447-510字节,存放分区表。511-512字节,存放主引导记录签名。

硬盘分区表示在不同分区上装不同操作系统,主引导记录必须知道将控制权交给哪个分区。分区表64字节,分了四项,所以一个硬盘只能分四个一级分区,叫做主分区。

第三阶段,硬盘启动。这时,计算机的控制权要交给某个分区,有三种情况。

情况A,卷引导记录。四个分区里面只有一个是激活的,计算机会读取激活分区的第一个扇区,叫做卷引导记录。告诉计算机操作系统在分区的位置,然后加载操作系统。

情况B,扩展分区和逻辑分区。硬盘越来越大,四个分区已经不够了,需要更多的分区。分区表只有四项,因此规定一个区被定义成扩展分区,这个区里面又分多个区,这种分区里面的分区称为逻辑分区。

计算机先读取扩展分区的第一个扇区,叫扩展引导记录。再读取第二个逻辑分区的第一个扇区,找到第三个逻辑分区的位置,以此类推。所以扩展分区可以包含无数个逻辑分区。

情况C,计算机读取主引导记录前面446字节机器码后,不再把控制权交给某个分区,而是运行事先安装的启动管理器,用户选择启动哪个操作系统。

第四阶段,控制权转交给操作系统后,操作系统的内核首先被载入主存。

linux为例,先载入/boot下的kernel。内核加载成功后,第一个运行的程序是/sbin/init。根据配置文件产生Init进程。这是Linux产生后的第一个进程,pid编号为1,其它进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login,跳出登录界面,等待用户输入用户名和密码。

至此,计算机启动过程完成。

  • 控制单元分为组合逻辑和微程序?

电路的输出仅由某时刻的输入决定,称这样的电路为组合逻辑电路。

微程序,对逻辑电路按照一般程序设计的方法进行设计。

速度上,组合逻辑电路用户指定逻辑关系后,输入信号经过电路响应,直接得出结果,是纯硬件的响应,所以速度很快。微程序设计相比于组合逻辑电路就要慢很多。

复杂度上,组合逻辑电路是按照用户的设想组合众多逻辑器件,对于一个复杂的系统,设计逻辑电路就是一个很大的工程。微程序控制的方法就方便很多,只需要为CPU设计一个很精炼的算法就能实现。

成本上,大型可编程逻辑器件的成本要比高端处理器或单片机成本高得多,而且工作量大,花费也多。

  • 微程序设计,微指令,微操作?微指令序列地址形式?

微程序设计,把一个机器指令编写成一个微程序,每个微程序包括若干条微指令,每一个微指令包含若干个微操作。再把这些微操作存储到一个控制存储器中,使用寻找用户程序机器指令的方法寻找每个微程序中的微指令。

微指令,在机器的一个CPU周期中,一组实现一定操作功能的微命令组合。

微操作,控制部件通过控制线向执行部件发出控制命令,也叫微命令,而执行部件接收微命令后执行的操作就叫微操作。

微指令序列地址直接由微指令下的地址字段指出,根据机器指令的操作码,硬件产生微程序入口地址。

  • 指令周期,机器周期,时钟周期,总线周期?微指令周期,存取周期?

指令周期,计算机取出并执行一条指令所需要的时间。包括取指,译码,执行。每个阶段由一个或多个时钟周期完成。

机器周期,取指,存储器读写。这样的操作就称为一个基本操作。计算机完成一个基本操作所花费的时间。

时钟周期,计算机系统中最小的时间单位,定义为一个节拍。在一个时钟周期内,计算机仅能完成一个最简单的操作。

总线周期,CPU完成一次访问内存或I/O设备所需要的时间,一个总线周期由几个时钟周期组成。

微指令周期,串行微程序控制器中,微指令周期等于读出微指令需要的时间加上执行微指令的时间。

存取周期,CPU读写内存数据需要的时间。

  • CPU功能和基本结构,CPU主要寄存器? 

程序控制,控制指令的执行顺序,保证计算机按照一定顺序执行程序是CPU首要任务。

操作控制,控制指令进行操作,一条指令往往由若干个操作信号的组合实现,CPU管理每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求操作。

时间控制,各种指令的操作信号和一条指令的的整个执行过程都受到严格定时,这样,计算机才能有效工作。

数据加工,完成对数据的算术,逻辑加工。完成数据处理是CPU的根本任务。

CPU由控制器和运算器两个部件构成。控制器包括程序计数器PC,指令寄存器IR,指令译码器ID,时序发生器,操作控制器。运算器由算术逻辑单元ALU,累加寄存器AC,数据寄存器DR,程序状态字寄存器PSW。

北桥芯片,提供对CPU类型和主频的支持,系统高速缓存的支持,主板系统总线频率,内存管理,显卡插槽规格等的支持。

南桥芯片,提供对I/O设备的支持,提供对键盘控制器,时钟控制器,通用串行总线USB等的支持。

  • 32位机和64位机的具体含义?

32位处理器指一次性能处理32位,4个字节的数据。64位处理机指一次性能处理64位,8个字节的数据。

总长度128位的指令使用32位处理器需要四个指令,使用64位机需要2个指令。显然,在工作频率相同的情况下,64位机比32位速度更快。

传统32位机最大寻址空间时4GB,对于一些需要大容量内存的程序就无法满足。64位处理机在理论上可以达到1800万个TB,64位机能彻底解决32位机的瓶颈问题。

  • 主存和缓存?

内存又称为主存,是CPU直接寻址的存储空间。暂存程序和数据的地方。计算机系统中的应用,文件,数据一般都存放在磁盘上,需要用到时再调入内存。

把一些临时或少量的数据和程序放在内存。内存的大小直接决定计算机系统的性能。

缓存在CPU内部,CPU存取数据的速度非常快,一秒能够存取,处理十亿条指令或数据,内存的速度就慢很多。缓存就是解决CPU速度和内存速度差异而提出。缓存的速度接近于CPU,使得缓存具有静态性。

  • 物理内存,虚拟内存?

物理内存是主板内存槽上所插内存条的大小。CPU地址线决定进行寻址的内存空间大小。

虚拟内存是一种计算机系统存储管理的技术,属于计算机程序,使得应用程序认为它有连续的可使用的内存,实际上,只是将一部分装入内存,另一部分留在磁盘上,需要时进行数据交换 。

物理内存作为硬件,当处理较大程序时,内存不够用,就会把硬盘当做内存来使用,交换数据做缓冲区。

物理内存实质就是主板上的内存条。虚拟内存实质就是计算机程序。

  • 缓存与虚拟内存区别?

缓存解决的是CPU与主存速度不匹配的问题,属于内部存储器。虚拟存储器一般指虚拟设备,是外部存储器。

  • 存储容量扩展方式?存储的多级层次,及解决的问题?

字扩展,存储单元位数不变,增加地址线数目,增加存储单元个数。

位扩展,存储单元个数不变,增加数据线数目,增加存储单元大小。

字位扩展,结合上述两种方式,既增加存储单元个数,也增加存储单元大小。

每个存储系统主要包括,Cache-主存,主存-辅存。两个存储层次。

Cache-主存,使用高速缓冲存储器,弥补主存速度不足,解决主存和CPU速度不匹配的问题。

主存-辅存,使用容量大的存储器,弥补主存容量不足,实现虚拟存储。

  • 指令寻址和数据寻址方式?

指令寻址找到当前需要执行的指令的位置,有顺序寻址和跳跃寻址两种。

顺序寻址,每次执行指令后程序计数器PC指向下一条指令的位置,指令执行的顺序和指令在内存中的存储顺序一致。

跳跃寻址是通过特定的指令直接为PC寄存器赋值,实现特定位置指令的执行。

数据寻址有多种方式,通过指令中地址码获取操作数地址。

立即寻址,寻址中直接读取指令可获得操作数。

直接寻址,寻址先通过指令中的地址码获取操作数地址,再访问内存获得操作数。

隐含寻址,适用于特定的指令,不需要存储地址码,读取操作码即可知道操作数的地址。

间接寻址,寻址时,先根据指令中的地址码访问内存,得到操作数的地址,根据操作数地址,再次访问内存得到操作数。这里指令中地址码存放的是操作数地址的内存地址。

寄存器寻址,寻址时,根据指令中地址码得到寄存器编号,再访问寄存器,获取操作数。

寄存器间接寻址,寻址时,先根据指令中地址码得到寄存器编号,再通过寄存器得到操作数地址,访问内存获取操作数。

基址寻址,寻址时,把指令中地址码的偏移地址和基址寄存器BR中的基地址相加得到操作数地址,再访问内存获取操作数。

变址寻址,寻址时,先把地址码中的偏移地址和变址寄存器TX中数据相加获得操作数地址,再访问内存获取操作数。

相对寻址,寻址时,先把地址码中的偏移地址和PC寄存器数据相加获取操作数地址,再访问内存获取操作数。

  • 总线?总线的集中仲裁方式?

总线就是一个传输通道,接口就是一个连接标准。通俗讲,总线的尽头就是接口。

片内总线,芯片内部的总线。

系统总线,CPU,主存,I/O设备之间传输信息的通道。包括数据总线,地址总线,控制总线。

数据总线,把CPU的数据传送到I/O或其他设备,也可把I/O或其他设备的数据传送到CPU。数据总线的位数和微处理器的字长一致。双向传输。

地址总线,把地址从CPU传到外部设备或I/O上。地址总线的位数决定了CPU可直接寻址的内存空间的大小。单向传输。

控制总线,用来传送控制信号和时序信号。如读写信号,片选信号,中断信号。双向传输。

通信总线,计算机系统之间或计算机系统与其它系统之间的通信的通道。有串行通信和并行通信两种方式。

同步通信,双方采用统一时钟信号。

异步通信,双方不需要统一时钟信号,有不互锁,半互锁,全互锁三种方式。

异步通信不需要共同的时钟总线,为实现数据同步,采用“应答”机制。主模块发出数据后,等待从模块的应答信息,从模块收到数据后,立即向主模块发出应答信息。实现数据同步。

不互锁,主模块发出信号后,不必等待从模块的应答信号,等待一段时间后,便自动确认从模块收到数据。从模块发出应答信号后,不必等待主模块撤销请求信号,等待一段时间后,自动确认主模块已收到应答信号,主模块自动撤销请求信号。主从模块没有互锁关系。

半互锁,主模块发出信号后,一定要收到从模块的应答信号才能确认从模块收到数据,有互锁关系。从模块发出应答信号后,不必等待主模块撤销请求信号。等待一段时间,便确认主模块已收到应答信号,主模块自动撤销请求信号,没有互锁关系。

全互锁,主模块发出请求信号后,一定要收到从模块的应答信号才能确认从模块已收到数据。从模块发出应答信号后,必须等待主模块撤销请求信号后,才能确认主模块收到应答信号。主存模块有互锁关系。

总线仲裁

链式查询,依次询问各设备是否需要总线,第一个提出总线需求的设备占有总线,距离总线控制部件近的设备优先级高。

计时器定时查询,总线控制部件中设定计数器,依照编号各个设备轮流占有总线。

独立请求方式,为每一个设备安排独立的请求线,各个设备直接和总线控制部件交互。

  • 简述中断的处理过程?

中断源发出中断请求后,处理机响应这个请求,现行程序被中断,转去执行中断处理程序,直至中断处理程序执行完毕后,再返回原程序继续执行。

中断过程包括中断请求,中断判优,中断响应,中断处理,中断返回。其中,中断处理过程最为繁杂,先保护现场,对于非向量式的中断请求需要确定中断源,打开中断,允许高级别的中断请求打断低级别的中断处理程序,接着执行真正为某中断源服务的中断处理程序,关闭中断。防止在恢复过程中被中断。恢复现场,在程序恢复后,打开中断,接收新的中断。

  • 中断向量,中断向量地址,中断隐指令,中断屏蔽字?

中断向量,在CPU响应中断后,必须有中断源提供地址信息,引导程序进入中断处理子程序。用来形成相应中断处理子程序的入口地址或存放相应中断处理子程序的首地址就是中断向量地址。

中断隐指令,CPU响应中断后,经过某些操作,转去执行中断处理子程序,这些操作由硬件实现,称为中断隐指令。

中断屏蔽字,中断源申请中断,由软件设置,使之不能响应的控制字称为中断屏蔽字。

  • I/O端口和I/O接口区别?I/O端口编址?

接口是主机和外设之间的一种缓冲电路,包括硬件电路和软件控制,现在接口是可编程的大规模集成电路芯片

端口,接口电路通常有三种寄存器,数据输入输出缓冲寄存器,控制寄存器,状态寄存器。这些寄存器被称为端口。对I/O设备的访问就是通过对端口的访问实现,每个端口赋予一个唯一的地址码,称为端口地址。

端口两种编址方式。统一编址,独立编址。

统一编址,将端口当做寄存器单元,与内存统一编址。端口和内存的操作指令统一,所以功能强。但端口占用了内存的地址空间,使存储容量减少。

独立编址,端口和内存各自拥有独立的地址空间。端口不占用内存空间。80x86采用独立编址。

I/O端口译码,使用逻辑门电路译码,译码器译码,比较器译码,PROM和GAL译码。

  • 显卡,显卡作用,原理?

显卡,全称显示接口卡,将计算机系统所需要显示的信息进行驱动转换,并向显示器提供转换扫描信号,控制显示器的正确显示。

首先将CPU送来的数据送到北桥,再送到GPU芯片进行处理。将芯片处理完的数据送到显存。

从显存读出数据再送到RAM DAC进行数据转换(数据信号转模拟信号),将转完的模拟信号送到显示屏。

  • 什么是软件危机?典型表现?产生原因?

软件危机是计算机软件开发和维护过程中遇到的一系列问题。有以下表现。

软件的产品质量达不到要求。用户对软件系统不满意。软件维护困难。软件没有合适的文档资料。

对软件开发成本和进度估计不准确。软件成本在计算机总成本占比越来越大。

软件开发生产率的提高不能满足社会对软件产品增长的需求。

产生软件危机主要有以下原因。

软件规模庞大,程序复杂性随着程序规模增大以指数级增长。

软件是计算机的逻辑部件,而不是物理部件,缺乏可见性。软件开发缺乏科学的管理和控制。

只重视软件本身,而忽视其配置部分。轻视软件维护。

软件可靠性缺乏严格的标准,质量无法保证。对用户要求没有完整的认识,就开始写程序。

  • 软件产品的特性?

软件产品是逻辑实体,不是物理实体,具有抽象性。软件开发和硬件不同,没有明确的生产过程。

软件开发受计算机系统的限制,对计算机系统有依赖性。

软件开发至今是手工作坊的形式。软件使用期间,没有硬件的磨损,老化问题。

软件成本非常昂贵,包括人工费,宣传费,运营费和税收。

软件本身就很复杂,不可预见实际问题的复杂性(需求改变),不可预见外界环境的变化(断电,硬盘已满,网络故障,病毒),程序逻辑结构的复杂性(看别人程序困难)等。

  • 什么是软件工程?软件工程有那些基本原理?

软件工程是指导计算机软件开发和维护的一门工程学科。生产出按期交付,预算范围内,满足用户需求,质量合格的软件产品。主要有以下基本原理。

分阶段的生命周期严格管理。严格的产品控制。坚持阶段评审。结果能够审查。现代化程序设计技术。开发人员少而精。不断改进软件。

  • 什么是软件工程方法学?包含哪些要素?常用的方法学有哪些?

通常在软件生命周期全过程使用的一整套技术方法集合称为方法学,也称为范型。

软件工程方法学包含三个要素。方法,工具和过程。

方法,完成软件开发各项任务的技术方法。

工具,运用方法提供的自动或半自动软件工程支撑环境。

过程,获得高质量软件需要的一系列任务框架,规定了各项任务的步骤。

使用最广泛的软件工程方法学,传统方法学和面向对象方法学。

传统方法学(结构化范型)。采用结构化技术(结构化分析,结构化设计,结构化实现)完成软件开发。

把软件生命周期分为若干个阶段,然后顺序完成各阶段任务。

面向对象方法学(面向对象范型)。面向对象方法=对象+类+继承+消息通信

使用面向对象范型时,开发出的软件是由相对小的,独立的单元组成。面向对象降低了软件产品的复杂度,简化软件开发与维护工作。

  • 软件生命周期?

软件生命周期分为软件定义,开发,维护三个阶段。

软件定义。通常分为三个阶段,问题定义,可行性分析,需求分析。

问题定义,回答了要解决什么问题?可行性分析,回答对上一阶段问题有行得通的方案?需求分析,为了解决这个问题,目标系统必须做什么,就是确定目标系统具备哪些功能?

软件开发。通常分为四个阶段,总体设计,详细设计,编码和单元测试,综合测试。

总体设计,回答应该怎样实现目标系统?详细设计,回答了应该怎样具体实现这个系统?编码和单元测试,写出正确,易理解,易维护的程序模块。综合测试,通过各种类型的测试使软件达到目标要求。

软件维护。通过各种必要的维护使系统持久满足用户需求。软件使用过程中发现错误加以维护,环境改变时修改软件适应新环境。有新要求时及时改进。每一次维护本质上是压缩和简化的定义和开发过程。

  • 需求分析准则,需求分析的任务?

理解并描述问题的信息域,建立数据模型。定义软件的功能,建立功能模型。

描述外部事件结果的软件行为,建立行为模型。对数据,功能,行为模型进行分解,用层次的方式展示细节。

需求分析主要任务

确定对系统的综合要求,包括功能需求,性能需求,可靠性和可用性需求,接口需求等。

分析系统的数据要求。导出系统的逻辑模型。修正系统开发计划。

  • 总体设计和详细设计的任务?

总体设计主要有方案设计和软件体系结构设计。

方案设计,首先设想实现目标系统的各种可能方案,根据系统规模和目标,综合技术,经济和操作选出若干个可行方案。再综合分析,对比各方案的利弊,选出一个最佳方案。

软件体系结构设计,确定软件系统中每个程序由哪些模块组成,以及这些模块之间的关系。

详细设计主要有三项任务。过程设计,数据设计,接口设计。

过程设计,软件体系结构中每个模块的实现算法。数据设计,软件中所需的数据结构。接口设计,软件内部各模块之间,软件和协作系统之间,软件和用户之间的通信方式。

  • 软件过程,使用那些模型描述软件过程?

软件过程,为了获得高质量软件需要完成的一系列任务框架,规定了完成各项任务的工作步骤。

软件过程定义了运用技术方法的顺序,交付的文档资料,保证软件质量的管理措施。通常使用生命周期模型来描述软件过程。

瀑布模型,传统软件工程方法学中的软件过程都可以用瀑布模型描述。

优点,规定开发人员使用规范的技术方法,严格规定各个阶段提交的文档,每阶段结束前有严格的技术审查和管理复审。

缺点,软件交付给用户之前,用户只能通过文档了解产品,开发人员和用户缺乏沟通,导致开发出的软件不能真正满足用户需求。

快速原型模型,是快速建立起来,可在计算机上运行的程序,它所完成的功能往往是最终软件产品所有功能的子集。

优点,使用这种软件过程开发出的软件产品能满足用户的真实需求。开发过程基本上是线性顺序过程。

增量模型,把软件产品作为一系列增量构件来设计,编码,集成和测试。每个构件由若干个相互协作的模块构成,并能完成相对独立的功能。

优点,短时间内向用户提交完成部分工作的产品。逐步增加产品功能,减少全新软件带给用户的冲击。

螺旋模型,实质是一种在快速原型模型的每个阶段之前增加了风险分析过程。

优点,有利于软件的重用。有利于把软件质量作为软件开发的主要目标。减少过多测试和测试不足带来的风险。软件维护和软件开发没有本质区别。

喷泉模型,软件开发过程各阶段之间的迭代或同一阶段内各个工作步骤之间的迭代,在面向对象范型中很常见。

喷泉模型充分体现了面向对象软件开发过程迭代和平滑过渡的特性。

  • 软件设计过程中遵守哪些原理?

模块化和模块独立。模块化就是把程序分成独立命名且可独立访问的模块。每个模块完成一个子功能,全部模块集合成一个整体,可以完成指定的功能,满足用户的需求。

模块独立是指导模块划分和组织最重要的原理。开发具有独立功能且和其它模块没有过多相互作用的模块就能做到模块独立。

抽象。现实中,一些事物,状态或过程总有相似之处,把这些共性集中概括,忽略差异,这就是抽象。一个复杂的软件系统由一些高级抽象概念理解和构造。这些高级概念又可以由低级的概念理解和构造。如此下去,直至最底层元素。每级抽象层次的一个概念将以某种方式对应于程序中。

逐步求精,看做是一项把一个时期内必须解决的种种问题按优先级排序的技术。

信息隐藏,设计软件模块时,使一个模块内包含的信息(过程和数据)对不需要这些信息的模块来说不可访问。

局部化,把一些关系密切的软件元素物理地址彼此靠近,局部化有助于信息隐藏。

  • 什么来度量模块的独立性?

内聚,一个模块内部各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展。设计软件时,应该做到高内聚。

耦合,一个软件结构内不同模块之间的互联程度,耦合程度取决于模块间接口的复杂程度。在软件设计中应该尽可能的使用松耦合。

  • 一个好程序遵循的规则?

程序内部有好的文档。数据说明易于理解。语句构造尽可能简单直观。输入输出遵循人机交互准则。效率满足用户需求。尽可能少的运行时间。尽可能少的占用存储器。

  • 什么是测试?

软件测试的目标发现程序中的错误。

软件测试的准则。所有的测试追溯到用户需求。在测试之前制定测试计划。从小测试到大测试。由独立的第三方从事测试工作。

软件测试的方法。白盒测试,黑盒测试。

软件测试的步骤。模块测试,子系统测试,系统测试,验收测试。平行测试。

  • Alpha测试和Beta测试?

Alpha测试。用户在开发者场所测试,开发者对用户指导之下的测试。开发者负责记录错误和使用中的问题。

Beta测试。在客户场所进行,Beta测试是开发者不能控制的真实场景中,用户记录测试中遇到的一系列问题,并把这些问题报告给开发者,开发者再做出修改,发布最终软件产品。

  • 什么是白盒测试?白盒测试方法?

白盒测试是测试者完全知道程序的结构和处理算法。按照程序内部的逻辑,测试程序。检测程序中通路是否都按照特定要求正常工作。

逻辑覆盖。有选择的执行程序中最具代表性的通路是替代穷尽测试唯一方法。

语句覆盖。被测试的每个语句至少执行一次,只关心表达式的值,不关心取不同值的情况。逻辑覆盖标准弱。

判定覆盖。每个语句执行一次,每个判定的每个分支都执行一次。逻辑覆盖程度稍强,但仍不是很强。

条件覆盖。不仅每个语句执行一次,判定表达式中每个条件都取各种可能的结果。逻辑覆盖程度比判定覆盖强一点。

判定/条件覆盖。使判定表达式中的每个条件都取到各种可能的值,每个判定表达式取到可能的结果。

条件组合覆盖。每个判定表达式中条件的各种可能组合至少出现一次。

点覆盖。点覆盖标准和语句覆盖标准相同。

边覆盖。边覆盖标准和判定覆盖一致。

路径覆盖。选取足够多的测试。每条执行路径可能执行一次。

控制结构测试。

基本路径测试。从该基本集合导出的测试用例保证程序中每条语句执行一次。

条件测试。着重测试程序中的每个条件,不仅是检测程序条件中的错误,而是检测程序中的其它错误。

循环测试。简单循环,串接循环,嵌套循环。

  • 黑盒测试?

黑盒测试完全不考虑程序内部结构和处理过程。是对程序接口的测试。

等价划分,把程序的输入类划分成若干个数据域,导出测试用例。

边界值分析,处理边界情况时,程序最容易出现错误。

错误推测,不同类型不同特点的程序有一些特殊的容易出错的情况。

  • 面向对象思想?

对象。具有相同状态的一组操作集合,对象是属性值和操作的封装。

类。对有相同属性和行为的一个或多个对象的描述。

实例。以某个特定的类为样板建立的具体对象。

方法。对象所执行的操作,也就是类中定义的服务。

属性。类中定义的数据,对客观世界实体具有性质的抽象。

封装。就是信息隐藏,通过封装对外界隐藏了对象的实现细节。

继承。子类自动共享父类中定义的数据和方法。

多态。根据该对象所属类动态选用类中定义的实现算法。

重载。参数特征不同或被操作数类型不同时,实现函数的算法或运算符的语义不同。

  • 软件开发中一般产生哪些文档?

可行性与计划研究阶段。可行性研究报告,说明软件项目在技术,经济和社会条件的可行性。项目开发计划,开发人员数,开发进度,预算,所需软硬件问题。

需求分析阶段。软件需求说明书,用户和开发者对该软件初步认识。数据要求说明书,开发过程中处理数据和数据采集的描述。初步用户手册,用户初步了解软件各个功能。

设计阶段。

概要设计说明书,程序系统的基本流处理,组织结构,模块划分,功能分配,接口设计,运行设计,数据结构设计,处理错误设计。

详细设计说明书,软件系统中各层次每一个模块设计的考虑。

数据库设计说明书,对数据库中的标识,逻辑结构,物理结构做出具体的设计规定。

测试计划,本计划编制是为了提供一个对软件的测试计划。

实现阶段。用户手册,用户了解软件的各个功能;操作手册,向操作人员提供每一个模块的具体过程;模块开发卷宗,每完成一个模块就编写一份,把所有的模块开发卷宗汇集起来;测试计划。

测试阶段。模块开发卷宗(终稿);测试分析报告;开发进度月报;项目开发总结报告;

运行和维护阶段。

  • 操作系统,设计目标,功能,特征,类型? 

操作系统是为了用户能够方便的使用计算机软硬件资源而设计的系统软件。操作系统的设计目标有

  1. 方便性,提供方便,统一的用户接口。
  2. 有效性,管理各种软硬件资源,组织工作流程,提高工作效率。
  3. 可扩展性,为了匹配硬件及计算机体系结构的不断发展,操作系统应能够扩展各种功能。

操作系统具有 处理机管理,存储器管理,设备管理,文件管理,用户接口的功能。
操作系统具有并发性,共享性,虚拟性,异步性。
操作系统有,批处理系统,分时系统,实时系统,单用户系统,网络系统,分布式系统。

  • 什么是微内核?

微内核操作系统可以有效的支持多处理机的环境,非常适合分布式系统。

  1. 微内核有足够小的内核,不是操作系统的全部,而是操作系统的一部分。
  2. 采用C/S模式,将操作系统的一部分放入微内核,将操作系统的大部分放入微内核外部的一组服务器中。
  3. 采用“机制和策略分离”,一般将机制放在内核底层,将策略放在内核高层。而在微内核中将机制放入微内核。这样才使微内核足够小。
  4. 采用面向对象的设计技术

功能:进程管理,存储器管理,中断处理。
优势:可扩展,高可靠,可移植,支持分布式,面向对象。

  • 操作系统中硬实时和软实时?

硬实时系统是一个刚性的,不可改变的时间限制,不允许任何超时的错误。软实时的时限可以是柔性灵活,可以容忍偶然的时限错误。

  • 系统调用,及过程。

系统调用是应用程序与操作系统之间的接口。应用程序可以通过系统调用进行通信,获得操作系统的服务。系统调用不仅仅面向应用程序,也面向OS中的其它部分。如命令处理程序。

系统调用是OS为了扩充机器功能,增强系统能力,方便用户使用而建立。是用户编程时与操作系统之间交互的接口。
系统调用的处理步骤,
首先由用户态转为系统态,再由硬件和内核执行处理程序。保护被中断的CPU环境,处理机状态字PSW,程序计数器PC,系统调用号,用户栈指针,通用寄存器内容等压入堆栈。再由用户定义的参数放到指定的地址保存起来。
然后,分析系统调用类型,转去执行相应的系统调用处理子程序。
最后,在系统调用处理子程序执行完毕后,返回被中断的CPU现场,再返回中断进程或新进程。

  • 为什么有用户态,核心态?什么时候用户态转为核心态

限制不同程序之间的访问能力,CPU划分出两个权限等级,用户态,核心态。

当系统发生中断,异常,系统调用,执行特权指令均可由用户态转为核心态。

  • 总的来说,操作系统提供的服务可以分为哪两类?

第一类是OS为各个并发执行的进程提供保护功能。各个进程只能访问各自的存储空间,不允许破坏其它用户占有的文件,进程访问各设备只能通过操作系统的干预。

第二类是指扩展机器功能,为用户提供服务。如虚拟存储管理,文件系统。

  • 参数在操作系统之间的传递有哪些方式?

通过寄存器来传递参数;将参数的地址放置寄存器中,再传递;由程序将参数地址压入堆栈,操作系统再将参数弹出堆栈;

  • 操作系统为用户提供哪些接口?区别是?

为用户提供了命令级接口,供用户组织和控制作业的执行以及管理计算机系统。程序级接口,编程人员使用系统调用请求操作系统来提供服务。

  • 分时系统,实时系统特点及区别?

分时系统特点

  1. 多路性,多个用户共用同一台计算机,从宏观层面看,是多个用户同时使用一个CPU和其它资源,从微观层面看,是多个用户在不同时刻轮流使用计算机。
  2. 独占性,各终端彼此独立,互不干扰使用一台主机。用户感觉在独占了一台机器。
  3. 及时性,主机对各终端用户的请求能够快速的做出响应。
  4. 交互性,采用人机对话的方式,各终端用户直接输入,调试,运行程序。

实时系统是指系统对特定输入快速做出响应。

  1. 实时性,主机快速对各种请求做出响应并处理。
  2. 可靠性,安全性,实时系统的故障带来的后果无法估量,因此要更加注重其可靠性。

分时系统和实时系统的区别。

  1. 设计目标不同,前者提供一个通用的交互式开发运行环境,后者为特殊用途提供专用系统。
  2. 交互性强弱不同,前者交互性强,后者交互性弱。
  3. 响应时间不同,前者以用户能接受的响应时间为标准,后者与受控对象及应用场合有关。
  • 程序和进程的区别,进程和线程的区别?作业和进程的区别?为什么引入进程,线程?

程序和进程的区别

  1. 进程是一个程序的动态执行过程,具有动态性。程序是一组指令的有序集合,具有静态性。
  2. 一个进程可以执行一个或多个程序,同一程序可以由几个进程同时执行。
  3. 进程可以独立的接受调度,独立的分配单位,独立的运行,程序不可以。
  4. 程序和进程都包括数据段和程序段,进程还有进程控制块PCB这个数据结构。

进程,线程关系,区别?

线程是进程的一个执行单元。一个线程属于一个进程,一个进程有多个线程,至少一个线程。同一进程的所有线程共享进程所有资源。不同进程间的线程要通过消息通信实现同步。处理机上真正运行的是线程。

  1. 进程是系统资源分配的基本单位,线程是处理机调度的基本单位。
  2. 在创建或撤销进程时,系统都要分配回收资源。导致进程的系统开销明显大于线程的开销。进程有独立的地址空间,进程崩溃后不会对其它进程产生影响。线程只是进程的一个执行体,有自己的堆栈和局部变量,但没有单独的地址空间。一个线程崩溃等于整个进程崩溃,所以多进程的程序比多线程的程序更健壮,但在进程切换时,耗费资源大,效率差。
  3. 进程是拥有资源的基本单位,线程不拥有资源,但可以访问资源。
  4. 进程间可以并发执行,同一进程多个线程也可以并发执行。

进程,作业区别

进程是一个程序在一组数据集合上的动态执行过程。作业是用户需要计算机完成的各种任务,是要求计算机工作的集合。作业包括作业提交,作业收容,作业执行,作业完成。进程就是对已提交程序所执行过程的描述。主要区别如下。

  1. 作业是用户向计算机提交任务的任务实体,一旦提交,作业就会保存在外存的作业等待队列中等待运行。进程是对用户提交任务的执行体。进程一旦被创建,总有一部分存放于内存。
  2. 一个作业由多个进程组成,至少由一个进程组成。
  3. 作业的概念只出现在批处理系统中,而进程的概念存在于任何多道程序系统中,就是操作系统分配资源的基本单位。在windows系统中,进程又被细化成线程,允许一个进程有多个独立运行的更小单位。

引入进程是并发执行程序,提高系统资源利用率和吞吐量。进程的互斥和同步是进程间竞争和协作。
引入线程是降低处理机的空闲时间,降低处理机切换调度造成时间和空间的开销。

  •  进程同步

在操作系统中引入了进程,提高了系统资源利用率和吞吐量,但是也使得系统变得复杂。如果没有合理的进程管理方式,必然引起进程对系统资源的无序竞争,使系统变得混乱。实现对并发进程的有效管理,引入了同步机制。进程同步应遵循空闲让进,忙则等待,有限等待,让权等待。实现同步有硬件机制,信号量机制,管程机制。

  • 饥饿状态?和死锁的区别?

等待时间给进程推进和响应带来明显影响称为进程饥饿。饥饿不一定使系统发生死锁,但一定让系统中某个进程产生无限期推迟。

饥饿和死锁的差别是,饥饿的进程可以是一个,但是死锁的进程必须是两个以上。处于饥饿状态的进程是就绪状态,处于死锁的进程是阻塞状态。

  • 调度的几种方式?

高级调度,又称作业调度,把处于后备队列中的作业调入内存,创建进程,排在就绪队列中。

中级调度,把暂时不运行的进程调出内存,排在挂起队列上。

低级调度,又称进程调度,为处于就绪队列中的某个进程分配处理机资源,从而执行。

  • 进程切换系统内核的处理过程?忙等的概念?

当进程切换,内核需要保存进程的当前状态,包括内存的分配状况,CPU中各种寄存器的内容。上下文切换一般涉及到系统架构的操作,包括刷新数据和指令高速缓存。忙等是进程在循环队列中,同时还竞争处理机资源。忙等可以消除,可以通过阻塞等待的进程,在合适的时机再唤醒该进程。但同时会造成阻塞和唤醒的时间开销。

  • 什么是P,V操作?

信号量是表示一个资源的实体,是一个就绪队列中的整形变量。PV操作和信号量有关。P代表申请一个资源,V代表释放一个资源。PV操作是不可中断的操作,称为原语。如果把信号量看做共享资源,那么PV操作就是临界区。信号量除了赋初值外,其余都由PV操作执行。

  • 死锁?死锁的必要条件?死锁的解决方法?

系统中一组进程都占有资源,每个进程也都在等待其它进程释放资源,导致系统一直无法向前运行,此时称系统处于死锁状态。

产生死锁的四种必要条件。

  1. 互斥条件
  2. 不可剥夺条件
  3. 占有且等待条件
  4. 环路条件

死锁的解决方法包括,死锁预防,死锁避免,死锁检测和恢复。

  1. 死锁预防,破坏互斥条件,破坏不可剥夺条件,破坏占有且等待条件(资源静态分配策略),破坏环路条件(资源有序分配策略)
  2. 死锁避免,和死锁预防对进程申请资源加以限制不同,死锁避免是对进程申请资源进行检查,根据检查结果来决定是否分配资源。银行家算法是典型的死锁避免方式。
  3. 死锁检测和恢复
  • 存储器及功能?

存储器主要任务是为多道程序提供良好的运行环境,方便用户使用存储器,提高存储器的利用率及在逻辑上扩充存储器。

  1. 分配和回收内存,分配内存空间或回收系统,用户程序所释放的内存空间。
  2. 地址转换,将逻辑地址转为物理地址。
  3. 扩充存储空间,使用虚拟存储或自动覆盖技术为用户提供比内存空间大的多的地址空间,从逻辑上扩充内存。
  4. 地址保护,保证进入内存的各道作业在各自的存储空间内运行,互不干扰。
  • 动态分区存储管理思想?

动态分区存储管理根据用户程序大小,动态的划分内存区,所以分区数目无法预估,分区大小也不一致。动态分区相比于固定分区明显的提高存储空间的利用率,但需要为用户程序分配连续的主存空间,所以难免会产生内存碎片。

  • 程序的装入有以下几个阶段,方式?

应用程序从用户编写的源代码到在内存中运行,需要三个阶段。首先,编译程序将源代码编译成目标模块。然后,链接程序把目标模块和库函数链接形成完整的装入模块。最后,装入程序把装入模块装入内存执行。
绝对装入,在编译时就知道程序驻留在内存的物理地址,编译程序产生含有物理地址的目标代码。
可重定位装入,根据内存的情况,将装入模块装入到合适的位置,地址变换通常在装入时一次完成,之后,不可更改。称为静态重定位。操作系统为程序分配一个以某地址为起始地址的连续主存区域,重定位时,程序中指令或操作数的逻辑地址加上起始地址就得到了物理地址。
动态重定位,允许程序在运行时可以移动位置,装入模块在装入内存空间时得到的也是相对地址,只有程序执行过程中访问到指令和数据时,才将要访问的指令和数据地址转为物理地址。动态重定位的实现要靠硬件地址变换机构。

  • 程序的链接方式?

  1. 静态链接,将目标模块和所需库函数链接,形成一个完整的可执行程序,以后不再拆分。
  2. 装入时动态链接,对目标模块在装入内存时采用边装入边链接的方式。
  3. 运行时动态链接,直到程序运行过程中需要一些模块,才对这些模块进行链接。
  • 碎片,拼接技术?

碎片有内部碎片和外部碎片两种。
外部碎片,系统中无法利用的小存储块。内部碎片,分配给作业的存储空间未被利用的部分。
当系统运行一段时间后,内存会出现一部分的碎片,拼接技术就是解决碎片问题的方法。
把存储器中已分配的分区移动到一端,使本来分散的小分区连接成一个大分区。这种移动小分区拼接成大分区的方法称为拼接技术

  • 虚拟存储器,以及相关算法?

根据程序的局部性原理,一个作业在运行之前,先将一部分装入内存,另一部分留在磁盘,等到需要时,再装入内存。这样就可以用小的内存空间运行大的作业,也可将多个进程装入内存,并发执行。这样在用户看来,系统的存储容量要比实际存储容量大的多。这种存储方式称为虚拟存储。
FIFO算法,每次淘汰最先进入内存的页面,也是淘汰驻留内存时间最多的页面。
LRU算法,选择最近最久未被使用的页面淘汰。

  • 为什么要分页?分页需要哪些硬件支持?如何用分页实现虚拟存储?实现虚拟存储需要哪些硬件支持?

分页是将进程的逻辑地址空间分成若干个大小相同的页。由于内存空间有限,无法一次性调入全部进程,所以需要分页依次调入。

分页需要页表,地址转换机构(逻辑地址寄存器,物理地址寄存器,页表寄存器,快表)等硬件。

虚拟存储是为了扩充主存空间设置的一种存储方式。分页虚拟存储是将作业放入磁盘,调用作业时,不把全部作业装入主存,而是将一些立即执行的作业页面调入主存,执行过程中遇到不在主存的页,再把它们动态装入。

实现虚拟存储需要,分页/段的页表或段表,缺页中断机构,地址转换结构。

  • TLB?

TLB在处理机访问内存数据时做地址转换,可以叫做一个旁路缓冲,是一个具有并行查询能力的高速缓冲存储器。TLB存放了页表文件,记录了虚拟地址和物理地址的之间的映射关系。当应用程序查询出一个虚拟地址时,会从页表中找到物理地址,再访问物理地址。

  • 分页存储管理系统虚拟地址转为物理地址过程?
  1. 是否越界,若是,则中断。若不是,则继续寻址。
  2. 查找快表,若找到页表项,修改访问位,形成物理地址。若没有,继续寻址。
  3. 查找页表,若找到页表项,修改访问位,形成物理地址,页表项放入快表。若没有,产生缺页中断,继续寻址。
  4. 若内存没有满,则将外存调入内存。否则,置换一页出内存,再调入一页入内存。
  5. 修改页表。

分页存储管理系统虚拟地址转为物理地址

段页式存储管理中,地址映像表,每个作业或进程一张段表,每个段一张页表。

抖动是指刚被换出的页很快又要被访问,为此还需要再换出其它的页,而该页也很快被访问。如此频繁的置换页面,大部分时间都花在置换页面上,所以不合适的置换算法是导致系统抖动的根本原因。

对信号量进行V原语操作后,若信号量值大于0,则表示没有进程等待使用该资源,该进程继续调度或转进程执行。若信号量值小于0,则表示有进程由于申请该资源而没有得到分配,处于等待状态,所以需要唤醒一个等待队列,放入就绪队列。

  • 分页和分段的联系和区别

页是信息的物理单位,分页实现离散分配,提高内存的利用率,分页仅仅是系统管理的需要,不是用户的需要,对用户透明。段是信息的逻辑单位,含有一组相对完整的信息,数据段,代码段,堆栈段,为了满足用户而使用。

页的大小不固定由系统确定,逻辑地址分为页号和页内两部分,由硬件实现,所以系统只有一种页面,段的长度不固定,取决于用户编写的程序。

分页的作业地址空间一维,程序员只利用一个记忆符,线性地址的16进制,即可表示一个地址。段的作业地址空间二维,程序员在标识一个地址,既需要给出段名,又需要给出段内地址。

页段都有存储保护机制,存取权限不同。段有读写,执行三种权限。页只有读写两种权限。

  • 页面,块或物理块,页表?

页面,作业地址空间被分成若干个大小相等的区域。块,将内存空间分为和页面大小相同的区域,这些区域被称为物理块。页表,便于在内存中找到每个页面对应的物理块,系统为每个进程建立一个映射表,存储页号到物理块号的映射。

  • 可变分区的保护采用哪种方式?

界限寄存器,在CPU中设置一个下限寄存器和一个上限寄存器,存放用户作业在主存中的上限和下限地址。一个寄存器作为基址寄存器,另一个作为限长寄存器。当CPU访问主存,硬件自动将被访问的主存地址和界限寄存器比较,判断是否越界。如果未越界,按此地址访问主存,否则产生程序中断。

存储保护键机制,每一个被保护的存储块分配一个保护键,这个保护键相当于锁,进入系统的每个作业也赋予一个保护键,放在PCB程序状态字中,当选择一个作业运行时,把它的键(相当于钥匙)装入一个特定的寄存器,对一个保护键与钥匙不匹配存储块的访问,都将产生保护键违例中断,并中止该程序。

  • 缓冲区,缓冲池?

由于CPU与外设之间存在速度不匹配的问题,所以需要缓冲技术来缓解这种矛盾。缓冲技术有三种缓冲。

  1. 单缓冲,OS在主存中设置一个缓冲区。
  2. 双缓冲,OS在主存中设置两个缓冲区。
  3. 缓冲池,OS在主存中设置一组缓冲区。

处理机要读入一个文件,先发出读取指令,将文件读入主存的缓冲区中,再读入高速缓冲寄存器,再读入处理机中的寄存器,处理机中的控制单元和逻辑单元进行处理,处理后逻辑单元将处理结果送至处理机中的寄存器。完成读指令。

由于计算机系统中的大量信息都是存储在磁盘。系统在运行中不断的执行读写操作,采用缓冲技术可以减少处理机对磁盘的访问频率,提高系统效率。

  • Cache?Cache需要注意什么?

Cache是一种存取速度比一般RAM快的RAM,介于CPU和主存之间的一级存储器,由静态存储芯片SRAM组成,容量比主存小,但速度比主存快很多,接近于CPU速度。Cache包括三部分。

Cache存储体,存放由主存调入指令和数据块。地址转换部件,建立目录表实现主存地址到缓存地址的转换。替换部件,在缓存已满时按一定策略进行数据块转换,并修改地址转换部件。

Cache是为解决处理机和主存速度不匹配而提出的一种解决方案。使用Cache需要注意数据不一致的问题。尤其是在多处理器系统中,多个处理器对同一个数据进行操作,某个处理器操作共享数据时,其它

处理器的Cache数据块已成为过时的数据,如果不及时通知处理器更新数据,就会导致错误的处理结果。

  • Cache和主存的映射方式?

全相联映像是指将主存和Cache按照固定的大小进行分块,内存的块和Cache的块可以任意对应,在Cache块已满的情况下,也允许替换出一个旧Cache块。

直接映像先将Cache分成若干块,每块大小相同,并对块编号。同时根据Cache的容量将内存分成若干大小相同的区,每个区的容量和Cache容量相同。再对内存每区分块,每块大小和Cache块相同,对每个区的块编号。映像时,内存某区中的块只能保存在与块号相同的Cache块中。

组相联映像是全相联映像和直接映像的折中方案。先将Cache分成大小相同的区,再对每个区按照直接相联的方式分块,再编号。所以,Cache中有许多相同编号的块。对内存按照Cache区的大小分区,再对每区按照Cache块分块。每个内存块可以对应不同Cache区中相同块号的块。

  • 覆盖,交换,原理及区别?

    由于内存空间有限,作业或进程比较大,不能一次性运行完,所以提出了对内存空间的各种管理方式,来实现小内存运行大程序的任务。

  1. 覆盖,按自身逻辑把程序分成几个相互独立的模块,不会同时执行的模块可以共享同一块内存,按照时间顺序运行。程序员来划分模块和确定覆盖关系,编程难度增加。
  2. 交换,把在内存中暂时不运行的进程,程序,数据都换出,把已经具备运行条件的进程和数据换入内存。交换技术由OS控制。
  • Belady异常?抖动原理?如何解决?

对一个进程没有分配它要求的全部页面,有时出现分配的页面数增加但缺页率反而升高的现象。称为Belady异常。

在更换页面时,如果要更换的页面是很快又被访问的页面,那么在产生缺页中断后会再次发生缺页中断,使得系统的效率降低,此现象称为抖动或颠簸。

解决策略

  1. 如果页面替换算法有误,可以修改页面替换算法。
  2. 如果内存运行进程过多,无法同时将频繁访问的页面调入内存,则需要减少进程的数目。
  3. 终止该进程或扩充物理内存空间。
  • 什么是虚拟设备?操作系统为什么要引入虚拟设备?虚拟打印机的操作原理?

将一台独占的物理设备虚拟成多台逻辑设备,供多个用户使用。这种经过虚拟的设备称为虚拟设备。

操作系统引入虚拟设备是用高速设备模拟低速设备,把慢速的独占设备改造成多个进程共享的快速共享设备。

当进程请求打印输出时,操作系统并不是把实际打印机分配到该进程,而是在磁盘输出井上分配一块相关区域,该进程要输出的数据高速存入输出井的相关区域,输出井的相关区域就是一个虚拟打印机。各进程的输出数据都暂存在输出井上,形成一个数据队列,最后由SPOOLing技术将数据实际打印出。

SPOOLing技术是慢速字符设备如何与计算机主机交换信息的一种技术,称为假脱机技术。SPOOLing技术实际上是一种外围设备同时联机操作,又称为排队转储技术。在输入和输出之间增加了输入井和输出井的排队转储环节,消除用户的“联机”等待时间。

  • 什么是设备独立性?为何引入设备独立性?

设备独立性就是应用程序独立于物理设备。用户程序中不直接调用物理设备,而是使用逻辑设备。系统执行时,将逻辑设备转为物理设备,类似于存储管理中的逻辑地址和物理地址。

为了提高OS的可扩充性,可适应性,每种OS都提供了设备独立性。用户程序不使用物理设备,而是使用逻辑设备,转为物理设备。执行I/O操作。

操作系统中引入线程是为了提高系统效率,提高系统资源利用率,减少进程并发执行造成的系统开销,使OS有更好的并发性。

  • 轮询,中断,DMA,通道?

轮询,是指用户进程可以直接控制CPU与外设和主存与外设之间的信息传递。当用户进程传递数据时,通过CPU启动设备,此时用户进程进入测试等待状态,CPU不断执行I/O测试指令测试设备状态。

中断,当用户进程需要传递数据时,CPU启动I/O控制器,转去执行其他程序,I/O请求结束后,向CPU发出中断请求,CPU收到后才花很少的事件去处理。中断是解决了CPU与外设之间只能串行工作的问题,也就是封装好了CPU与外设之间相互测试的过程。但是每传输一次数据都要执行中断处理程序,每执行一次中断处理程序都要保护CPU现场,处理结束后还要恢复CPU现场。如果处理的I/O设备过多,CPU就会陷入这些I/O请求当中,无法执行其他程序。

DMA,直接存取控制。引入了直接存储器,外设直接与主存交换数据,没有CPU的干扰,减少了CPU对主存的控制。DMA在中断的基础上,又封装了传输数据的过程。DMA控制器包括,指令寄存器CR,数据缓冲寄存器DR,内存地址寄存器MAR,数据计数器DC。以CPU从磁盘读入数据为例,描述DMA工作流程。

CPU从磁盘读入数据块。向磁盘寄存器发送命令,该命令存放到CR。再发送要读入的字节(符)数到DR。再发送读入数据存放至内存的地址,该地址存放到MAR。把磁盘的源地址传送至DMA控制器的I/O控制逻辑上。然后启动DMA控制器来传输,此后一切传输都由DMA控制器来完成。

通道是一个控制外部设备工作的硬件机制,相当于一个简单的处理机。通道独立于CPU,专门负责数据输入,输出,传输。对外部设备统一管理,代替了CPU对外设的控制,使I/O与CPU可以并行。通道是计算机和传输并行的基础,提高整体性能。

  • 软中断,硬中断?区别?

软中断

  1. 是编程异常的中断。
  2. 是通信进程来模拟硬中断的一种方式。
  3. 是由程序运行时其他程序对该程序的中断。
  4. 中断源发送中断请求或软中断处理,相应进程会执行中断请求或完成软中断信号对应的功能。

硬中断

  1. 硬中断由外部事件引发,具有随机性和突发性。软中断是由中断指令驱动,由程序控制,所以不具有随机性和突发性。
  2. 硬中断的中断响应周期,CPU需要发送中断回合信号,软中断的中断响应周期,CPU不需要发送中断回合信号。
  3. 硬中断的中断号由中断控制器提供,软中断的中断号由中断指令提供,无需中断控制器。
  4. 硬中断可屏蔽,软中断不可屏蔽。
  • 磁盘概念,存储,原理?

磁盘是一种辅存设备。是构成计算机系统不可或缺的一部分。内部结构如下。

磁盘内部结构磁盘内部结构

磁盘的各种参数。

  • 磁道:当磁盘开始旋转,磁头保持移动的位置不变,会在磁盘上画出一个圆形轨迹,此轨迹即是磁道。
  • 柱面:不同盘面上的相同磁道构成一个柱面。柱面数和每个盘面上的磁道数相同。
  • 扇区:每个磁道都可划分成若干个大小相同的片段,此片段即是扇区。每个扇区大小512字节。
  • 盘面:硬盘的盘片,每个盘片都有正反两面。

磁盘容量计算:512B*扇区数*磁道数(柱面数)*盘面数

特权指令:对I/O操作的指令,(启动I/O,测试I/O,控制I/O指令),访问程序状态的指令,存取特殊寄存器的指令(中断寄存器,时钟寄存器)

  • 磁盘性能参数?磁盘调度?
  1. 寻道时间,磁头定位到磁道所需的时间
  2. 旋转时间,磁头定位后,磁盘控制器开始等待,直到适当的扇区旋转至磁头所在位置。
  3. 存取时间,寻道时间+旋转时间
  4. 传输时间,磁道,扇区定位后,磁头通过下面旋转的扇区,完成读或写的操作,称为传输时间。

磁盘调度就是在磁头寻道的过程中,磁头到达磁道的各种顺序。

CPU调度不影响CPU和I/O的使用时间,只影响进程的等待时间。

RAID,独立磁盘冗余阵列。把多块独立的硬盘按不同的方式组合形成一个硬盘组,提供比单个硬盘更高的存储性能和提供数据备份技术。

  • 什么是文件目录?文件目录包含哪些信息?常用的目录结构有哪几种?

文件目录包括文件的一些基本信息。也称为文件控制块FCB

文件目录一般包括以下几种信息。

  1. 文件的结构信息,逻辑结构,存储结构。
  2. 文件的管理信息,文件的建立,保留,上次存取文件的日期和时间。
  3. 文件的存取权限控制信息,文件主所具有的存取权限,同组用户所具有的存取权限,其它用户所具有的存取权限。

常用的文件目录有一级文件目录,二级文件目录,多级文件目录。

  • 文件在磁盘中的组织方式?

顺序组织。把逻辑文件的逻辑记录顺序的存储到磁盘块中,称为顺序文件。

链接组织。逻辑文件的逻辑记录任意的存放到各个磁盘块中,使用指针链接各个磁盘块,文件第一块的地址和最后一块的地址存放到FCB中,这样的组织称为隐式链接。

把链接文件的各个指针都存入一张表中,称为FAT表。每个磁盘只有一张FAT。在FCB中只存放首磁盘块号。这种组织称为显示链接。

索引组织。在主文件之外再建立一张关键字和磁盘块对应关系的表。称为索引表,主文件和索引表共同构成索引文件。

  • 什么是编译器,解释器?

一个程序在运行之前,需要翻译成一种能被计算机执行的形式,完成这项翻译工作的软件系统称为编译器。

源程序被分割成多个模块,需要一个预处理的程序聚合源程序,包括把宏定义转为源语言语句。

经过预处理的源程序传给编译程序,生成汇编语言程序。

汇编语言程序由汇编器处理,生成可重定位的机器代码。

大型程序分割成多个部分编译,可重定位的机器代码有必要和其它可重定位的机器代码以及库文件连接,形成真正的机器代码。链接器解决外部内存地址问题。

加载器把所有可执行目标文件放到内存运行。

解释器并不通过翻译的方式产生机器代码,从用户角度看,直接利用用户提供的输入执行源程序的操作。

由一个解释器产生机器代码比编译器快很多,但是编译器的错误诊断比解释器更好。

  • 编译过程的具体步骤?

我们把编译器当做一个黑盒子,把源程序映射成一个语义上等价的目标程序,映射过程由两部分组成,分析部分和综合部分。

分析就是把源程序分解为多个组成要素,在这些要素之上加入语法结构,使用这些结构创建源程序的中间表示。分析部分还会收集源程序信息,存放于符号表这种数据结构,符号表和中间表示一起传送给综合部分。

综合就是利用分析到的中间表示和符号表信息构造用户期待的目标程序。

词法分析。读入组成源程序的字符流,并组成有意义的词素序列。词法分析器产生键值对这种形式的词法单元(token)作为输出:(token-name,attribute-value)

源程序包含 position=inital+60*rate赋值语句。词法分析有下列表示。

position是一个词素,映射成词法单元<id,1>,id是标识符的抽象符号,1表示符号表中position对应的条目。剩余在符号表中类似表示。

语法分析。使用词法分析生成词法单元的第一个分量创建树形中间表示。给出了词法分析产生词法单元流的语法结构。

语义分析。使用语法树和符号表中的信息检查程序是否和源语言定义的语义一致。同时也收集类型信息,存放于语法树或符号表中,以便在中间代码生成过程使用。

语义分析很重要的部分是类型检查,检查每个运算符是否有匹配的运算分量。

中间代码生成。在翻译过程中,一个编译器可以构造出多个中间表示,这些中间表示可以有多种形式。

语法分析和语义分析后,编译器产生明确的低级的或类机器语言的中间表示,看做某个抽象机器的程序,这种程序易于生成,轻松翻译成目标机器上的语言。

也可以考虑一种类似于汇编指令序列的三地址代码的中间表示。

代码优化。试图改进中间代码,得到更好的目标代码。更好意味着更快,更短或能耗更低的目标代码。

代码生成。以源程序的中间表示作为输入,映射到目标语言。如果目标语言是机器代码,那就要为变量选择寄存器或内存地址。然后,中间指令翻译成完成相同任务的机器指令,代码生成重要的方面是合理分配寄存器存放变量。

符号表管理为每个变量名提供一个记录条目,记录各变量的属性。这种数据结构允许编译器迅速查到每个变量的记录,并快速存放或获取记录数据。

多个步骤组合成趟。前面的各步骤就是一个编译器的逻辑组织方式。多个步骤的活动被称为一趟。前面的词法分析,语法分析,语义分析,中间代码生成组合在一起可以成为一趟。代码优化作为一个可选的趟,特定目标机生成代码的后端一趟。

  • 数据库操作
  • 登录数据库 mysql -uroot -pwkf19961014
  • 查看数据库 show databases; 创建数据库 create database test; 删除数据库 drop database test;进入数据库 use test;
  • 创建数据表create table score(snum varchar(3),sname varchar(5));
  • 查看数据 show tables;   查看数据表属性 show columns from score 查看定义的表 show create table score 删除表 drop table score
  • 复制表 只复制表结构,不复制表数据 create table score1 like score  复制表,也复制表中数据 create table score2 as (select * form score)
  • 修改表名 alter table score rename score0  添加列 alter table score0 add column class varchar(10)  删除列 alter table score0 drop class 修改列名,alter table score0 change course age tinyint 修改列的类型 alter table score0 modify sname varch
  • 插入数据 insert into score values('','','') 插入多行数据  insert into score values('','',''),('','',''),('','','')
  • 修改数据 update score set course='english' where set snum='007'  修改时使用表达式 update score0 set score=score+5 where score<90
  • 删除数据 delete from score0 where snum='007'
  • 添加主键约束 alter table score0 add primary key (snum) 添加snum为表score0的主键
  • 添加外键约束 创建表时添加外键约束create table score(num varchar(5),score float,foreign key (num) references stu(snum));  创建表后添加外键约束 alter table score add foreign key (num) references stu(snum)
  • 增加自增长 auto_increment 通常和主键约束一起使用。
  • unique,表示唯一约束,该记录的关键字不能重复。
  • 非空约束 not null 表示该字段不能为空
  • 默认值约束 default 'default'

SQL数据类型,tinyint,大小1B,0-255,-127~128。int,大小4B,可以表示任意的整数数值。float,4B,表示7位小数。double,8B,15位小数。char,固定长度的字符串。varchar()不固定长度的字符串。二进制数据类型。时间类型date,3B,YY--MM--DD。time,HH:MM:SS,3B。datetime,8B,yy-mm-dd hh:mm:SS。

  • 什么是数据库?

数据库就是长期存储在计算机内有组织,可共享的数据集合。数据库系统具有共享性高,冗余度低,数据独立性高的特点。

  • 数据库出现不一致性,原因?

由于数据冗余,数据库的并发控制不当造成,各种故障,错误,如软硬件故障的失误。

  • 数据库系统特点?

数据的结构化,数据库系统实现整体的结构化,数据不是面向单一应用程序,而是面对整个组织或企业。这是数据库系统区别与文件系统最主要的特征。

数据共享性高,冗余度底,易扩充。

数据的独立性,数据库中的三层模式和两层映像保证了数据的独立性。应用程序与数据库中数据的存储结构之间的物理独立性,应用程序与数据库中数据逻辑结构之间的逻辑独立性。

数据由DBMS统一管理和控制。具有安全性保护,完整性检查,并发控制,数据库恢复的功能。

  • 数据,数据库,数据库系统,数据库管理系统?

数据,描述事物的符号记录称为数据,数据有文字,图像,图形,音频,视频。数据与其语义不可区分。

数据库,长期存储在计算机内,有组织,可共享的数据集合。数据库中数据按照一定的数据模型组织,描述,储存。数据库中数据具有独立性,冗余度底,可共享的特征。

数据库系统,在计算机系统中引入数据库后的系统构成。数据库系统包括数据库,数据库管理系统,应用程序,数据库管理员。

数据库管理系统,是用户和操作系统之间的一层数据管理软件。科学的组织和存储数据,高效的获取和维护数据。数据库管理系统具有定义,操纵数据,管理数据库的运行,以及数据库的建立和维护功能。

  • 使用数据库系统的好处?

提高了应用程序的开发效率。开发人员不必考虑数据的组织,存储和数据的存取,这些工作都由数据库管理系统来完成。

当应用逻辑改变时,数据的逻辑结构也需要改变,此时数据库系统提供了程序和数据之间的独立性,所以数据逻辑结构改变就是DBA的责任。开发人员不必修改应用程序,简化了应用程序的编制,减少了应用程序的修改和维护。

使用数据库系统可以减轻数据库管理人员维护系统的负担。总之,使用数据库系统有集中管理数据,控制数据冗余,提高数据的利用率和一致性,管理和维护应用程序。

  • 文件系统和数据库系统的联系,区别?

文件系统和数据库系统都是计算机系统中管理数据的软件。

文件系统面向某一个应用程序,数据共享性差,独立性差,冗余度高。记录内有结构,整体无结构,数据由应用程序自己控制。

数据库系统面向现实世界,数据共享性高,冗余度底,具有物理独立性和逻辑独立性,数据结构化,由数据模型来描述。数据库管理系统提供安全性,完整性,并发控制,数据恢复等功能。

  • 简述适应于文件系统的实例,适用于数据库系统的实例?

数据的备份,软件或应用程序使用过程中的临时数据存储使用文件系统比较合适。

企业或部门的信息系统使用数据库系统比较合适。某个工厂的信息管理系统,学生管理系统,人事管理系统,图书馆中的图书管理系统都使用数据库系统较为合适。

  • 数据模型概念,数据模型作用,数据模型三个要素?

数据模型是数据库中对现实世界的抽象工具,是数据库中用于提供信息表示和操作手段的形式架构。

数据模型是严格定义的概念的集合,这些概念精准的描述系统的静态特性,动态特性,以及数据库完整性约束。因此,数据模型包括数据结构,数据操作,完整性约束三部分。

数据结构,所研究对象类型的集合,是系统的静态描述。

数据操作,对数据库中各种对象允许进行各种操作的集合,对系统的动态描述。

数据约束条件,完整性规则的集合,完整性规则对给定的数据模型中数据及其联系所具有的制约规则。限定数据模型中的数据库的状态及其变化。

  • 概念模型?作用?

概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象。是数据库设计人员设计数据库的有力工具,也是数据库设计人员和用户交流的语言。

信息世界的基本概念有,实体,属性,码,实体型,实体集,联系。

实体:客观存在并可相互区别的事物称为实体。

属性:实体所具有的某一特性称为属性。

码:唯一标识实体的属性集称为码。

实体型:用实体名和属性名的集合来刻画和抽象同类实体,称为实体型。

实体集:同一类型的实体型合称为实体集。

联系:实体的内部联系是指组成实体的不同属性之间的联系。实体的外部联系是指不同实体集之间的联系。

实体-联系方法是常用的概念模型的表示方法,E-R图来描述现实世界的概念。

  • 数据库系统的结构

数据库有“型”和“值”的概念,模式相对稳定,实例则相对变动。数据库有三级模式,模式,外模式,内模式。

  1. 模式,称为逻辑模式。是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图,一个数据库只有一个模式。
  2. 外模式,也称为子模式和用户模式。是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,与某个应用有关的数据的逻辑表示。一个数据库可以有多个外模式。
  3. 内模式,也称存储模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。一个数据库只有一个内模式。

数据库的两层映像,外模式/模式映像,模式/内模式映像保证了数据库中数据较高的物理独立性和逻辑独立性。

  1. 外模式/模式映像,保证逻辑独立性。当模式发生改变时,数据库管理员对外模式/模式做出修改,可以使外模式保持不变,应用程序根据数据的外模式编写,从而应用程序不必修改,保证数据的逻辑独立性。
  2. 模式/内模式映像,保证物理独立性。当数据库的存储结构发生改变时,数据库管理员对模式/内模式做出修改,可以使模式保持不变,应用程序也不变,保证了数据的物理独立性。
  • 数据定义,数据操作,数据控制,数据查询?
  1. 数据定义DDL,create,drop,alter,关键字

  2. 数据操作DML,insert,update,delete关键字

  3. 数据控制DCL,revoke,grant关键字

  4. 数据查询DQL,select关键字

  • SQL语言特点?

  1. 综合统一,SQL语言包括数据定义DDL,数据操作DML,数据控制DCL,数据查询DQL。

  2. 高度非过程化,SQL语言只需知道“做什么”。无需知道“怎么做”,操作过程由系统自动完成。

  3. 面向集合的操作方式,不仅操作对象,查询结果是元组的集合,一次性插入,删除,更新的对象也是元组的集合。

  4. 一种语言形式,两种操作方式。SQL语言独立于联机交互,也可以嵌入到高级语言中,供程序员调用。

  5. 语言简洁,易学易用。

  • 什么是基本表?什么是视图?两者的区别?视图特点?视图优点?所有视图都是可以更新?哪类视图可以更新?

基本表是本身独立存在的表,在关系数据库中一个关系就是一个基本表。

视图是从一个或几个基本表中导出的表。视图本身不独立存储在数据库中,是一个虚表。数据库只存放视图的定义,不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

视图的优点,简化用户操作,使用户从多种角度看待同一数据,重构数据库提供了逻辑独立性,保护机密数据。

视图是不存放数据的虚表,对视图的更新要转为对基本表的更新。并不是所有视图的更新能够转为唯一有意义的相应基本表的更新。所以并不是所有的视图都可以更新。

基本表的行列子集视图一般可以更新。

  • 关系模型的三个成分

数据结构,数据操作,完整性约束。

关系数据语言有,关系代数语言ISBL,关系演算语言(元组关系演算语言,域关系演算语言),关系代数关系演算两重特点语言SQL。

  • 域,笛卡尔积,关系,元组,属性,主码,候选码,外部码?

域,具有相同数据类型的值的集合。

笛卡尔积,不同域之间的一种集合运算。

关系,笛卡尔积的一个子集称为关系。关系是一张二维数据表。表的每一行为一个元组,表的每一列为一个属性。

候选码,关系中某一属性组的值能唯一标识一个元组,该属性组为候选码。

主码,一个关系有多个候选码,选定一个作为主码。

外部码,f是关系R的一个或一组属性,但不是R的码,f与关系S的码ks相对应,则称f为关系R的外部码,简称外码。

  • 关系,关系模式,关系数据库?

关系的描述称为关系模式,关系是关系模式在某一时刻的状态或内容,关系模式是静态的,稳定的。关系是动态的,随时间不短变化。

关系数据库有型和值之分。关系数据库的型称为关系数据库模式,是对关系数据库的描述,定义一些域以及在域上的某些关系模式。关系数据库的值即为这些关系模式在某时刻所对应的关系的集合,称为关系数据库。

  • 数据依赖对关系模式的影响?

数据依赖通过一个关系中属性间值相等与否体现出数据间的相互关系。是现实世界属性间相互联系的抽象,是数据的内在性质,是语义的体现。函数依赖是数据依赖的一种。部分函数依赖,传递函数依赖会导致关系模式中的插入异常,更新异常,删除异常,数据冗余等诸多问题。

  • 关系模型的完整性规则?参照完整性外码为空条件?

关系模型的完整性是对关系的某种约束条件。

实体完整性,属性A是关系R的一个主属性,则属性A的值不能为空。

参照完整性,属性F是关系R的外码,它与关系S的某个主码ks相对应,则R中每个元组在F上必须取空或等于关系S中某个元组主码值。

用户定义完整性,针对某一具体关系数据库的约束条件。反映某一应用所涉及数据必须满足的语义要求。

参照完整性中,F是关系R的外码,但不是关系R的主码,则F可以为空。如果F是外码,但又是主码,则F不能为空。

  • DBMS在实现参照完整性需要考虑的问题?

参照关系的外码值能否为空。

删除被参照关系的元组,有以下策略。

  1. 级联删除,同时删除参照关系相关元组。
  2. 受限删除,当参照关系的元组外码值和被参照关系中要删除元组主码值相同时,才删除参照关系的相关元组。
  3. 置空值删除,将参照关系相关元组的外码值置为空。

参照关系中增加元组时,有以下策略。

  1. 受限插入,不允许在参照关系中插入。
  2. 递归插入,同时在被参照关系中插入一个元组,其主码值为参照关系插入元组的外码值。
  • 自然连接,等值连接?

等值连接,从关系R,S的笛卡尔积中选取A,B属性值相同的元组。

自然连接,特殊的等值连接,两个关系中要比较的分量必须是相同的属性组,并在结果中把相同的属性组去掉。若关系R,S有相同的属性组,就可以自然连接。

  • 关系模型,范式?

关系模型必须要求关系规范化,规范化的关系称为范式。

第一范式,列不可再分。

第二范式,非主属性完全函数依赖于主属性。消除了非主属性对码的部分函数依赖。

第三范式,非主属性间都不传递依赖于主属性。消除了非主属性对码的传递函数依赖。

第四范式,主属性间无依赖关系。

  • 关系范式中,关系的分解原则?完全函数依赖,部分函数依赖?多值依赖?多值依赖实例?

无损连接,保持原有的依赖关系。

关系模式中,函数依赖无法表示一对多的联系,这些属性之间没有直接联系,但有间接联系。把这种没有直接联系,但有间接联系的数据依赖称为多值依赖。

多值依赖对称性,若X->->Y,则X->->Z。Z=U-X-Y。

多值依赖传递性,若X->->Y,Y->->Z,则X->->Z-Y。

函数依赖为多值依赖的特殊情况,若X->Y,则X->->Y。

关系R(I,S,A)I为兴趣小组,S为学生,A为兴趣小组内活动。每个学生要求参加兴趣小组内的所有活动,每个活动都要求所有学生参加。I->->S,I->->A。

  • BCNF的判断准则?

关系R属于3NF,不存在主属性对非主属性的函数依赖,则称R为BCNF。

如果一个关系的每个函数依赖左部都是候选码,则称该关系为BCNF。

如果一个关系每个决定因素都是候选码,则称为BCNF。

关系R为1NF,且能决定其他属性取值的属性必定包含码,则称为BCNF。

  • 数据库的安全性和完整性?

数据库的完整性是保证数据的正确性和相容性。正确性是指数据库中的数据是符合现实中的语义。相容性是指同一个数据库对象中的数据在不同的关系表中符合逻辑。数据库完整性防止数据库中存在不符合语义的数据。

数据库安全性是指保护数据库,防止不合法使用数据库造成的数据泄露,更改,破坏。

数据库安全的五种措施。

用户身份认证,是DBMS提供的最外层的安全方法,每一个用户都有一个用户标识,用户标识包括标识名和标识号。

多层存取控制,包括用户权限和合法权限检查。

  1. 自主存取控制,用户可以自主的把存取数据的权限授予任何人,也可以把“授权”的权限授予任何人。
  2. 强制存取控制,对比主体敏感度和客体敏感度,决定主体是否有操作客体的权限。主体敏感度强于客体敏感度时,主体才能读客体。主体敏感度弱于客体敏感度,主体能写客体。强制存取控制是对数据本身进行安全标记,无论数据如何复制,标记和数据总是不可分割。只有符合密级要求的用户才能操作数据,提供了更高级别的安全性。

视图机制,对不同的用户创建不同的视图,把数据对象限制在一定的范围内。通过视图可以把要保密的数据对无权限的用户隐藏,这样就可实现更高级别的数据保护。

审计机制,将用户对数据库的各种操作都记录到日志文件中,审计员利用审计日志来监控数据库的行为,分析潜在的危险。

数据加密,使用一定的算法对原始数据加密,不知道加密算法的操作无法获取数据内容。数据加密包括存储加密和传输加密。存储加密有透明加密和不透明加密。传输加密有链路加密和端到端加密。基于SSL的可信传输是端到端加密。

  • 数据库设计各个阶段及其主要任务?

需求分析,准确了解与分析用户需求。

概念结构设计,对用户需求总结,归纳,抽象,形成一个独立于DBMS的概念模型。

逻辑结构设计,将概念模型转为某个DBMS所支持的逻辑模型,并进行优化。

物理结构设计,为逻辑模型选择一个合适的物理结构,包括存储结构和存取方法。

数据库实施,设计人员根据DBMS所提供的数据语言,工具,宿主语言,根据逻辑设计和物理设计的结果建立数据库,调试运行,组织数据进入数据库。

数据库运行,维护,数据库运行阶段对其评价,调整,修改。

  • 需求分析阶段设计目标,调查内容?

需求分析是调查现实世界中要处理的对象,了解原系统的工作状况,明确用户的需求,进而设计出新系统的功能。

信息要求,数据库要存储哪些数据,用户能从数据库中获得信息的内容和性质。

处理要求,用户要完成什么处理,对处理的响应有什么要求,处理方式的选择之类。

  • 数据字典内容,作用?

数据字典是数据库系统中各种数据描述的集合。包括数据项,数据结构,数据流,数据存储,数据处理。

数据字典是关于数据库中数据的描述,在需求分析阶段建立,是概念设计阶段的基础。

数据项是不可再分的数据单位,包括基本数据信息的类型,长度,取值范围。

数据结构是数据之间的组合关系。

数据流是数据结构在系统内的传输路径。

数据存储是数据结构停留或保存的地方。

处理过程描述该过程的功能及处理要求。

  • 数据库的概念结构,特点?数据抽象?概念结构的重要性?

概念结构是信息世界的结构,真实而充分的反映现实世界,是对现实世界的一个概念模型。

易于理解,用概念结构和不理解计算机的用户交换意见。

易于修改,当应用环境和应用要求改变时,容易对概念模型进行扩充和修改。

易于向关系,层次,网状模型转变。

概念结构是数据库设计的关键阶段,是对需求分析阶段所得到的需求进行抽象,以此作为各种数据模型的基础。更精确的使用DBMS实现这些要求。

常使用E-R图来描述概念模型。

  • 逻辑结构设计,步骤?

逻辑结构设计是将概念结构设计阶段设计好的E-R图转为选用的DBMS所支持的数据模型相符合的逻辑结构。

逻辑结构设计阶段的步骤

首先将E-R图转为关系,层次,网状等数据模型。

再将关系,层次,网状数据模型转为DBMS所支持的数据模型。对数据模型进行优化。

  • E-R图?E-R图构成元素?E-R图向关系模型的转化规则?

E-R图是实体-联系表示方法。是描述现实世界概念结构模型的方法。由实体型,属性,联系构成。

实体型,用实体名和属性名来刻画和抽象同类实体。属性,实体的某个特性,一个实体由若干属性来刻画。联系,也称关系。表示现实世界中实体内部或实体之间的某种联系。

一个1:1的联系可以转为一个独立的关系模式,也可和其它关系模式合并。如果转为一个独立的关系模式,关系的属性就是实体的属性和联系的属性。关系的码就是

各实体的码。如果合并其它关系模式,则该关系模式的属性加入另一个关系模式的联系构成新属性。

一个1:n的联系可以转为一个独立的关系模式,也可以与n端关系模式合并。转为一个独立的关系模式,则各实体的码和联系的属性转为关系的属性。关系的码就是n端实体的码。

一个n:m的联系可以转为一个独立的关系模式。该联系相连的实体的码和联系的属性转为关系的属性。实体码的组合构成关系的码,或码的一部分。

三个或三个以上的实体间的多元联系转为一个关系模式。该联系相连的各实体的码和联系的属性组成该关系的属性。关系的码为各实体码的组合。

  • 事务概念,事务特性?

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做。是一个不可分割的工作单位。

事务特性

  1. 原子性,事务是数据库操作的逻辑单位,要么全做,要么全不做。
  2. 一致性,事务对数据库的执行结果必须由一个一致性转为另一个一致性。
  3. 隔离性,一个事务对数据库的操作不能受其它事务的影响。
  4. 持久性,一个事务一旦提交,它对数据库的改变是永久的。
  • 数据库中的封锁

封锁是一种并发控制技术,用来对共享数据,例如数据库中数据的并行存取。

共享锁S,对读操作,每个事务都可以获得共享锁。阻止其他事务对已获得个共享锁的数据进行排它封锁。

排它锁X,一个事务对某个数据进行了排它锁,其他事务就不能再对该数据施加排它锁,而是要等待该事务解除对数据的排它封锁,才能再次加排它锁。

一级封锁协议,事务T对要修改的数据加X锁,直到事务结束时才释放。能够保证不丢失更新,不能保证读“脏”数据,不可重复读。

二级封锁协议,一级封锁协议之上加入事务T对要读取的数据加S锁,读完立即释放S锁。

三级封锁协议,一级封锁协议之上加入事务T对读取的数据加S锁,事务结束后才释放S锁。

  • 事务非正常结束影响数据库数据正确性?为什么要有数据库恢复子系统?

事务执行的结果必须是从一个一致性转为另一个一致性。如果数据库系统运行发生故障,导致事务被迫中断,事务的另一部分已经完成,对数据库的修改已经写入物理数据库。这时数据

就出于一种不正确的状态。

在计算机系统中的硬件故障,软件错误,操作人员的失误,恶意破坏,不可避免。这些故障使事务被迫中断,影响数据库的正确性,破坏数据库,使得数据库中部分数据丢失。必须要有数

据库恢复子系统。

  • 数据库产生的故障,数据库恢复技术?

数据库产生事务内部故障,系统故障,介质故障,计算机病毒。

事务内部故障,系统故障,介质故障影响事务的正常运行。介质故障,计算机病毒破会数据库中数据。

数据库恢复有数据转储,登录日志文件两种技术。当数据库系统发生故障,利用转储后的数据库后备副本和日志文件就能恢复数据库之前的某种状态。

  • 数据转储,转储方法?

数据转储是数据库恢复所使用的技术,数据库管理员定期将数据库复制到磁带或磁盘上,当数据库系统遭遇破坏,可将后备副本装入数据库,恢复到转储前的状态。

转储有静态转储,动态转储方法。

  1. 静态转储,当系统中无用户事务时,才进行转储操作。静态转储操作简单,但必须无用户事务运行,同样,用户事务也必须等待转储操作结束,才能运行。
  2. 动态转储,允许在转储过程中对数据库操作和修改,但是转储过程中,用户事务可能对数据库的数据进行修改,使得后援副本数据库与转储前数据库存在不一致的状况。所以,需要日志文件,记录用户事务对数据库的修改活动。这样,后援副本和日志文件两者共同作用即可得到某时刻数据库的准确状态。
  3. 转储还分为海量转储,增量转储。
  4. 海量转储,每次转储全部数据库。
  5. 增量转储,只转储上次转储之后所更新的数据。
  • 事务日志,作用?登记日志文件为什么先写日志文件,再修改数据库?数据库恢复转储冗余数据?

日志文件记录事务对数据库的更新操作文件。

日志文件用于事务故障恢复,系统故障恢复,和后援数据库文件协同完成介质故障恢复。

修改的数据写入数据库,修改的日志记录写入日志文件这两个是不同的写操作。

如果先修改数据,而运行记录中没有这个修改,则无法对数据进行恢复。如果先写入日志记录,再修改数据库,在恢复数据库时,只是进行了一次undo操作。所以,一定要先写入日志记

录,再修改数据库。

  • 根据不同的故障,给出不同的恢复策略和方法?

事务故障由DBMS完成,对用户完全透明。事务故障恢复方法如下。

  1. 反向扫描日志文件,查找事务的更新操作。
  2. 对事务更新操作进行逆操作,即将日志记录中“更新前的数据”写入数据库。
  3. 继续反向扫描日志文件,做同样处理。
  4. 如此处理下去,直到读到此事务的开始标记,则事务故障恢复完成。

系统故障有两种形式。

  1. 未完成的事务对数据库更新可能已写入数据库。
  2. 已完成的事务对数据库的更新还停留在缓冲区,未写入数据库。

对未完成的事务要执行撤销undo操作,对已完成的事务要进行redo操作。

  1. 对日志文件进行正向扫描,找出故障发生时,已提交的事务队列和未完成的事务队列。
  2. 对未完成的事务队列执行undo操作。
    undo操作,反向扫描日志文件,对每个undo事务的更新操作执行逆操作,将日志记录中“更新前的值”写入数据库。
  3. 对已提交的事务队列执行redo操作。
    redo操作,正向扫描日志文件,对每个redo事务重新执行日志记录的登记操作,将日志记录中“更新后的值”写入数据库。

介质故障恢复操作

  1. DBA装入最新的数据库后备副本,使数据库恢复到转储时的一致性状态。
  2. DBA装入转储结束时刻的日志文件副本。
  3. DBA启动恢复指令,由DBMS完成恢复功能。
  • 检查点恢复,优势?

利用日志技术恢复数据库,恢复子系统必须搜索日志文件,确定哪些是undo事务,哪些是redo事务。需要检查所有的日志文件。有两个缺点。

  1. 需要搜索全部日志文件。浪费时间。
  2. 许多redo事务已经将它们的更新结果写入数据库,恢复子系统又重新执行这些操作浪费时间

检查点方法恢复步骤。

  1. 从重新开始文件找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
  2. 由该检查点记录得到检查点建立时刻所有正在执行的事务清单。
  3. 从检查点开始正向扫描日志文件。
  4. 对redo事务执行redo操作,对undo事务执行undo操作。
  • 数据镜像,作用?

数据镜像根据数据库管理员的要求,自动把整个数据库或其中的关键部分复制到磁盘上,每当数据库更新时,DBMS自动把更新后的数据复制过去。DBMS自动保证数据镜像和主数据库的一致性。

数据镜像用于介质故障时的数据恢复操作,还能提高数据库的可用性,其它用户对数据库中数据加排它锁进行修改,其它用户可以读数据库镜像中数据,而不必等待用户解除排它锁。

事务日志用于保存事务的更新操作,转储冗余数据包括日志文件,数据库后备副本。

posted @ 2020-04-22 12:33  岐岐卡卡西  阅读(295)  评论(0)    收藏  举报