这又是我们之前没有提过的一个点,特权指令,我们先看看计算机特权指令是什么。
计算机特权指令集是指那些只能在特定的操作模式下执行,通常是由操作系统或其他系统软件使用的特殊指令。这些指令主要用于系统资源的分配和管理,包括改变系统工作方式、检测用户的访问权限、修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。
常见的特权指令有以下几种:
- 有关对I/O设备使用的指令:如启动I/O设备指令、测试I/O设备工作状态和控制I/O设备动作的指令等。
- 有关访问程序状态的指令:如对程序状态字(PSW)的指令等。
- 存取特殊寄存器指令:如存取中断寄存器、时钟寄存器等指令。
- 允许和禁止中断:控制中断禁止屏蔽位。
- 在进程间切换处理。
- 存取用于主存保护的寄存器。
- 执行I/O操作。
- 停止一个中央处理器的工作。
- 清理内存。
- 设置时钟。
- 建立存储键。
需要注意的是,特权指令一般不被直接提供给用户使用,而是由操作系统或其他系统软件在需要时执行。如果用户程序试图执行特权指令,硬件会拒绝执行该指令,并可能产生保护中断,由操作系统进行错误处理。
特权指令集的存在是为了确保操作系统的正常执行和系统的安全性。在多用户、多任务的计算机系统中,特权指令是必不可少的。
以上介绍来自文心一言。
简单来说特权指令集是计算机指令集的一个子集,通常与系统资源的操纵和控制有关。只用于操作系统或者其他系统软件,一般不直接提供给用户使用。只有当计算机处于系统态运行时,才可以执行特权指令。
或者我们直接用题目来复习,除了C这个选项是错误的之外,其他选项都是正确的,我们记下来就好啦。
这道题我选出来是因为我第一次做的时候做错了QAQ。
中断大家应该都懂,但是这题考的比较细,我们一个个来看。
首先A是正确的,这个应该没什么争议,回想一下我们编写单片机程序的时候,不就是软硬件结合的嘛,硬件触发中断,然后交给我们写好的中断函数处理。
B选项咋一看没啥问题,不过我们再回顾一下中断的流程,计算机在执行程序的过程中,当出现异常情况或特殊请求时,CPU响应中断,由硬件自动将相应的中断向量地址装入程序计数器PC,转入该中断服务程序进行处理。因此CPU在这个过程中仅仅是响应了中断,后面是由硬件自动完成的,因此B选项是错误的。
C和D合一起讲,因为说的都是程序状态字。那么什么是程序状态字呢?程序状态字(PSW)是计算机系统的核心部件(控制器的一部分),用来反映CPU的当前状态,通常存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位)、有无溢出(0V位)、结果正负(SF位)、结果是否为零(ZF位)、奇偶标志位(P位)等;另一类是存放控制信息,如允许中断(IF位)、跟踪标志(TF位)等。有些机器中将PSW称为标志寄存器FR(FlagRegister)。然后C和D都是正确的,程序状态字是CPU中一些重要寄存器内容的有序集合,硬件响应中断时,要进行新老程序状态字的交换。我们就把C和D的内容记下即可,不需要知道程序状态字具体都有哪些。
这题很简单,不需要CPU干预的数据传输那就是DMA,选出这题的原因就是怕有些小伙伴DMA叫习惯了,忘了人家中文名了。我们再顺便简单回顾一下DMA。直接内存存取(Direct Memory Access,DMA)方式的基本思想是通过硬件控制实现主存与I/O设备间的直接数据传送,数据的传送过程由DMA控制器(DMAC)进行控制,不需要CPU的干预。在DMA方式下,由CPU启动传送过程,即向设备发出“传送一块数据”的命令,在传送过程结束时,DMAC通过中断方式通知CPU进行一些后续处理工作。
又是一个之前没提过的知识点,我们来了解了解什么是菊花链。
就是上图这样的。
串行链接仲裁简称串链仲裁、串行仲裁,又叫“菊花链"仲裁。该仲裁法又有二线菊花链、三线菊花链、四线菊花链之分,其中三线菊花链使用普遍,最具代表性。三线菊花链使用3根控制线:总线请求BR、总线允许BG(BuSGrant)和总线忙BB,各模块通过OC(集电极开路)门在请求线BR和忙线BB上分别'线或(负逻辑),各个模块的BR(或BB)线连在一起,当有一个为低电平时,输入到仲裁器的BR(或BB)即为低电平,这种“负或“的关系若从正逻辑来看则为“正与”,因此也有叫“线与”的。
如同上图这样,如果有多个设备同时向总线发起请求,那么会被响应的就是离总线控制部件近的设备,因此优先级的固定死的。
因此本题错误选项是D,其实大多数通信模式同一时刻也就只能有一个模块作为实际主控模块。
“直接”指出操作数本身的寻址方式。可能有小伙伴看到“直接”就选了直接寻址了,不过实际上直接指出的这个方式是立即寻址。
我们稍微了解了解各种寻址方式,理解性记忆,混个眼熟即可,因为通过寻址方式的名称就能猜出大概了。
- 直接寻址:处理器直接访问内存中的特定地址以获取数据。这种方式速度快,但内存空间利用率可能不高。
- 间接寻址:所需数据的存储地址被存储在寄存器或内存单元中。处理器首先读取这个寄存器或内存单元的值,然后使用该值作为数据的实际存储地址。这种方式适用于数据地址动态变化的情况。
- 寄存器寻址:处理器直接访问存储在寄存器中的数据。这种方式速度快,但受到寄存器容量的限制。
- 立即寻址:操作数作为指令的一部分直接写在指令中,这种操作数称为立即数,这种方式也称为立即数寻址方式。通常用于给寄存器赋值。
- 隐含寻址:操作数隐含地由累加器给出,即某指令有固定的操作数,不需要明确给出。
- 自增寻址:每次读取数据后,地址自动加1,继续读取下一个数据。这种方式适用于连续存储的数据,如数组。
- 自减寻址:每次读取数据后,地址自动减1,继续读取前一个数据。
- 索引寻址:先读取索引值,再加上一个偏移量得到数据存储地址,然后读取数据。这种方式适用于多维数组和结构体的访问。
- 相对寻址:读取相对于当前地址偏移量的数据。这种方式常用于分支指令,如条件分支指令,也便于编制浮动程序。
- 基址寻址:使用一个基地址加上一个偏移量得到数据存储地址。这种方式可以扩大操作数的寻址范围,适用于多道程序设计,常用于为程序或数据分配存储空间。
- 堆栈寻址:数据存储在堆栈中,处理器按照堆栈规则读取数据。