选择题
T3:循环队列
不同指针指向,队列判空/判满条件
1. rear:指向队尾元素 front:指向队头元素前一个位置
(1)牺牲一个存储空间
(2)判空条件:front == rear
(3)判满条件:(rear+1)%MaxSize == front
2. rear:指向队尾下一个元素 front:指向队头元素
(1)牺牲一个存储空间
(2)判空条件:front == rear
(3)判满条件:(rear+1)%MaxSize == front
3. rear:指向队尾元素 front:指向队头元素 ——注意判空和判满条件
(1)牺牲一个存储空间
(2)判空条件:(rear+1)%MaxSize == front
(3)判满条件:(rear+2)%MaxSize == front
区别与联系
(1)上述三种指针指向的判空/判满条件均是牺牲一个存储空间,上述三种需要特别注意第三种的指针指向(可以通过画一个换装图好好体会)。
(2)均可以在结构体内增加 tag (标记上一步是入队还是出队操作,只有入队才会造成假溢出现象) 或 size(标记循环队列中存储数据元素的个数,以此用来区分队满和队空)
(3)基本入队、出队操作略有不同
—— 同类型题目见 2011年408统考T3
T4:线索二叉树的基本概念与构造
- 线索二叉树是一种物理结构。 n个结点的线索二叉树含有的线索数为n+1。
- ltag、rtag==1 :前驱或后继
- 后序遍历线索树的遍历仍然需要栈的支持
T5:森林与二叉树的转换
- 左孩子右兄弟
- 树转换成二叉树的画法
- 1、兄弟之间加条线 2、只要大孩子 3、转一下
- 高度为h的满二叉树,对应森林的树的个数一定为h
- 对应二叉树 无右孩子的节点个数 = 森林分支结点个数 + 1
- 对应二叉树 的叶节点个数 = 森林左孩子指针为空的结点个数
T8:装填因子
- 表中记录数n/散列表长度m 即 实际数据数/可放数据数
- 装填因子越大,冲突越高;反之冲突越小
- 散列表的平均查找长度依赖于散列表的装填因子,不直接依赖于n或m
T14:IEEE754标准
这里阶码为移码运算,减去偏置值127,对应的效果即为 阶码最高位取反,其他位加1即可
T15:DRAM地址线与数据线复用
本题中地址线应为 log2(4M) = 22根,数据线应为8根。
由于DRAM送行列地址分两次传送,导致地址线减半,即11根。
T16:缺失损失、提高Cache命中率措施、数据Cache与指令Cache分离
Cache缺失损失主要是由访存时间决定的。—— 提高主存的存取速度。
提高Cache命中率 —— 增加Cache容量、增强程序局部性。
结构冒险/资源冲突:硬件资源竞争。解决:①后续暂停一个时钟周期 ②单独设置数据和指令存储器(现代 数据Cache和指令Cahce分离)
T17:寻址方式总结
- 指令寻址:寻找下一条将要执行的指令地址(始终由PC给出)
- 顺序寻址方式(PC+"1"指令字长)
- 跳跃寻址方式 (转移类指令实现),注意绝对地址(标记符直接得到),相对地址(偏移量)。
- 数据寻址:寻找本条指令的数据地址
- 隐含寻址:操作数默认在某个寄存器中或在栈顶,即无需指明操作数在何处
- 立即寻址:地址字段是操作数本身/立即数(补码)
- 直接寻址:形式地址即为真实地址EA
- 一次间接寻址、多次间接寻址:理解为指针的指针
- 寄存器寻址:给出操作数所在寄存器的编号
- 寄存器间接寻址:EA保存在寄存器中
- 相对寻址:EA = (PC) + A,基于局部性原理,广泛应用于转移指令
- 1、PC的内容加上指令中形式地址A形成操作数的有效地址,即EA = (PC)+ A(A为相对于下一条指令(即PC)的偏移量,可正可负,补码表示)
- 2、PC在取出使用相对寻址的指令时,就会进行+ “1”操作,即相对寻址是相对于下一条指令的存放地址的偏移量("1"的大小取决于当前正在执行指令的指令字长)
- 3、优点:便于程序浮动(一段代码在程序内部的浮动)
- 基址寻址:EA = (BR) + A
- 1、基址寄存器/重定位寄存器,可采用专用寄存器BR(隐式),也可采用通用寄存器(显式)
- 2、基址寄存器面向操作系统。
- 3、若采用专用寄存器,基址寄存器内容由操作系统或管理程序确定,程序运行前,CPU将BR的值修改为程序起始地址(存放在PCB中),程序执行过程中,基址寄存器内容不变(作为基地址),形式地址可变(作为偏移量)。若采用通用寄存器作为基址寄存器时,用户指明是哪个寄存器,但其内容仍由操作系统决定。
- 4、优点:扩大寻址范围(基址寄存器位数大于形式地址位数),用户不必考虑程序存在主存的哪个空间区域,利于多道程序设计(仅需修改基址寄存器的内容实现不同程序的正确寻址,相较于直接寻址,直接寻址需要修改每条指令的地址;OS动态分配中,每个程序占有连续的内存空间,可以通过基址寄存器记录每个程序在内存中的起始地址,通过偏移量的改变得到正确的地址),并可用于编址浮动程序,但偏移量位数较短。
- 变址寻址:EA = (IX) +A
- 1、变址寄存器可采用专用寄存器IX,也可采用通用寄存器。
- 2、变址寄存器面向用户,程序执行过程中,变址寄存器内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)。
- 3、优点:扩大寻址范围(变址寄存器位数大于形式地址位数),访问数组时,可设定A为数组首地址,通过改变IX的内容访问数组元素,适合编制循环程序。
- 堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
- 1、堆栈是寄存器(或专用寄存器组)中一块特定的按"后进先出(LIFO)"原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)
- 2、硬堆栈/寄存器堆栈:成本高。不同情况下对SP的操作顺序和操作方式不同(参考数据结构栈),取指令需访存,执行指令无需访存。
- 3、软堆栈:主存中开辟堆栈空间。每次操作都需要进行访存。
- 隐含寻址:操作数默认在某个寄存器中或在栈顶,即无需指明操作数在何处
T18:微指令
一条机器指令 = 一个微程序 = 一组微指令
T21:IO接口 相关总结
1、I/O接口的功能和基本结构
- 主要功能
- 地址译码和设备选择、实现主机与外设的通信联络、数据缓冲、数据格式转换、传送控制命令和状态信息
- 基本结构
- 状态端口可以和控制端口共用一个寄存器。
- I/O指令:对数据缓冲寄存器、状态/控制寄存器的访问操作的指令,是特权指令。只能在操作系统内核的底层IO软件使用。即通用寄存器与端口之间。
2、I/O端口及其编址
- I/O端口:接口电路中可被CPU直接访问的寄存器。(通常 CPU对 状态端口读 、数据端口 读写、控制端口 写)。
- I/O接口:若干端口加上相应的控制逻辑电路组成接口。
- 编址方式
- 统一编址(存储器映射方式):当做存储器单元进行地址分配。统一的访存指令访问端口。存储单元和I/O设备依靠不同地址码区分。
- 独立编址(I/O映射方式):与主存地址空间分离。专门的I/O指令访问端口。存储单元和I/O设备依靠不同指令区分。
T22:中断占据CPU时间的计算问题??
某计算机主频是50MHz,采用定时查询的方式控制设备A的I/O,查询程序运行一次所用的时钟周期至少是500.在设备A工作期间,为保证数据不丢失,每秒需要对其查询至少200次,则CPU用于设备A的I/O的时间占据整个CPU时间的百分比至少是:0.20%。
分析:如果真的查询到A有I/O请求了,那么CPU将完全用于A的I/O,因此,这里的情况是A并没有发起I/O,CPU作为大家长,要定期查询用掉的时间比。直接计算为:
某设备中断请求的响应和处理时间为100ns,每400ns发出一次中断请求,中断响应所允许的最长延迟是50ns,CPU用于该设备的I/O时间占整个CPU时间的百分比至少是25%。
分析:这种类型的问法需要理解每400ns发出一次中断请求的意思。意味着,400ns的CPU时间内可以处理一个中断,且处理时间是100ns,因此这是最直接的问法:100/ 400 = 25%即可。
至于最长延迟什么的并不会影响每400ns发出一次中断请求,并且这个中断请求一定会被响应、处理。
设备发出请求和CPU处理是并行的,当前CPU正在处理,此时设备已经在计时400ns后发送下一个请求。所以CPU用于该设备的I/O占比为1:4,同时延时是50ns,在这50ns中CPU没有做任何的处理,所以不算做用于该设备的I/O时间,同时这50ns也是跟设备每400ns发出一次请求并行。综上,至少为25%。
T25:常见的特权指令和非特权指令
常见的非特权指令
- 取数指令、存数指令
- 读时钟指令
- 加减乘除等算数运算指令
- 寄存器清零
- 指令压栈/弹栈指令(push/pop)
- 跳转指令(转移指令)
- trap指令
- 将运算结果装入内存
常见的特权指令
- 开中断指令、关中断指令
- 写时钟指令(置时钟指令)
- 输入/输出指令(I/O指令)
- 写PSW寄存器的指令
- 广义指令(系统调用)的执行
T26:一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。
A.修改进程状态为就绪态
B.降低进程优先级 —— 可不行
C.给进程分配用户内存空间 —— 无必然联系,创建新进程时,会分配内存空间。
D.增加进程时间片大小 —— 若进程调度使用时间片轮转调度算法,则时间片大小固定。
T28:加快虚实地址转换的措施、外存的两个部分:交换区vs文件区
下列措施中,能加快虚实地址转换的是()。
l.增大快表(TLB)容量 lI.让页表常驻内存 Ⅲ.增大交换区(swap)
【分析】虚实地址转换:即逻辑地址和物理地址的转换
1、增大快表容量:可增加查询快表命中的概率 —— 正确
2、让页表常驻内存:在采用多级页表的请求分页存储管理系统中,页表常驻内存可保证在查询页表时不会发生缺页、调页的情况,从而加快地址转换 —— 正确
3、外存的两个部分:交换区vs文件区
交换区I/O速度更快
当系统有足够的交换区空间时,页面的换入换出都是通过交换区进行。
当系统缺少足够的交换区空间时:不会被修改的文件直接从文件区调入,当它们需要换出时,由于未被修改,因此不必换出,直接覆盖即可。可能被修改的页面,将其换出时必须调到交换区,以提升I/0速度。
页表显然是可能被修改的内容,因此即使交换区空间不足,页表在换出时也必然放在交换区。因此,增加交换区对地址转换的速度无影响。
T29:read、open系统调用
- read要求用户提供三个输入参数:①文件描述符fd ②buf缓冲区首址 ③传送的字节数n
- read的功能是试图从fd所指示的文件中读入n字节的数据,并将它们送至由指针buf所指示的缓冲区。
- 一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB调入内存;
- 而不会把文件内容读到内存中,只有进程希望获取文件内容的时候才会读入文件内容。
T30:只有FIFO才会导致Belady异常。(分配的物理块数增加而页故障数不减反增)
T31:进程间通信方式
T35:信道数据传输速率
信号传播速度与新到的发送速率无关
应用题
T41:求二叉树的带权路径长度
二叉树中所有叶节点的带权路径长度之和!
基于先序遍历,递归即可。
不必层序遍历......
T42:图的存储结构、最短路径
部分内容参考于
王道
某设备中断请求的响应和处理时间为100ns_百度知道
中断占据CPU时间的计算问题_DrCrypto的博客-CSDN博客_中断响应所允许的最长延迟时间