1-5
1.存储器的存储速度
2.存储元的电路结构
3.存储单元的电路结构
4.DRAM存储器芯片的电路结构
5.SRAM和DRAM是否是破坏性读出,是否是易失性的存储器
6-10
6.如果有很多很多存储单元译码器难道要接到所有存储单元上吗
7.DRAM如何刷新,三种不同的刷新策略
8.SRAM和DRAM的行列地址传送策略
9.ROM的分类
10.BIOS芯片是什么存储器
11-15
11.多核cpu访问存储器比较慢,而且同时写、一读一写都会发生错误,怎么办
12.磁盘地址的组成
13.RAID是什么
14.直接相联映射的地址结构是什么,访存的过程是什么样的
15.全相联映射的地址结构,访存的过程
16-20
16.组相联映射的地址结构,访存过程
17.实地址、虚地址、辅存地址分别由什么组成
18.指令系统
19.指令字长是什么,由什么决定
20.定长指令字结构和变长指令字结构的定义
21-25
21.四地址指令的第三个地址和第四个地址分别是什么意思
22.拓展操作码
23.转移指令包括哪些类型
24.调用指令和转移指令的区别
25.指令寻址和数据寻址的含义
26-30
26.指令寻址的两种方式
27.顺序寻址的实现方法
28.跳跃寻址的实现方法
29.数据寻址的几种方式,如何确定使用哪种数据寻址方式
30.偏移寻址
31-35
31.X86架构的含义
32.cpu常用寄存器名称
33.栈中元素的大小
34.call和ret指令的作用
35.enter指令是什么,有什么用
36-40
36.过程P调用过程Q的执行步骤
37.调用者和被调用者如何共享寄存器
38.栈帧的定义
39.该代码的栈帧变化过程
40.大端方式和小端方式是什么
41-45
41.CPU中用户可见寄存器和用户不可见寄存器分别有哪些
42.指令周期
43.指令执行的过程
44.数据流
45.取址周期的数据流向
46-50
46.间址周期的数据流
47.中断周期的数据流
48.数据通路
49.组合逻辑元件
50.时序逻辑元件
51-55
51.指令流水线
52.流水线对指令集的要求
53.流水线设计的原则
54.流水段
55.流水线冒险的原因
56-60
56.指令和数据都存放在内存中,计算机如何区分它们是指令还是数据
57.指令周期、机器周期、时钟周期
58.指令、微指令、微命令
59.什么是指令流水线,优点是什么
60.单总线结构、双总线结构、三总线结构
61-65
61.总线宽度、总线带宽、总线工作频率
62.总线事务
63.总线上的数据传送方式
64.总线定时是什么,有哪几种方式
65.机器数的定义
66-70
66.原码反码补码能否表示无符号数
67.补码
68.算数右移和逻辑右移
69.补码一位乘法和原码一位乘法
70.short和int分别多少位
71-75
71.IEEE 754标准的float、double、long double怎么表示
72.AT&T格式和Intel格式分别是什么,有什么区别(操作数和目的数、寄存器的表示、立即数的表示、主存地址的表示)
73.如何实现程序中的选择语句
74.循环语句的实现
75.计算机中有符号数和无符号数怎么表示
76-80
76.原码乘法
77.IEEE754尾数的有效数字位数
78.数值类型转化
79.无符号数和带符号数如何判断溢出
80.大端方式和小端方式
81-85
81.C语言边界对齐
82.阶码的特殊值
83.如何判断一个浮点数是否是规格化数
84.对于位数相同的定点数和浮点数,克表示的浮点数个数一定会比定点数个数多吗
85.现代计算机中,是否需要考虑原码加减运算
86-90
86.IEEE754中阶码的偏移量和移码的偏移量分别是多少
87.CPU检测到中断就要进行处理,如果不想要CPU中断,就要停止CPU检测中断这一行为,而不是检测到了不处理
88.SRAM和DRAM的地址引脚
89.指令体系结构ISA
90.拓展指令码计算
91-95
91.求字长
92.并行处理技术的指令结构有哪些
93.判断哪些小数不能被IEEE754浮点数表示
94.cache容量计算
95.汇编语言程序员可见的是哪些寄存器
96-100
96.磁盘的格式化容量
97.磁盘存储器的读写单元
98.CPU主频
99.微内核的优缺点
100.系统调用执行前必须是用户态,执行时是内核态,执行后是用户态
101-105
101.机器字长
102.二地址指令结构:操作码|寻址方式|一地址|寻址方式|二地址
103.单周期CPU、多周期CPU、基本流水线CPU、超标量流水线CPU
104.QPI总线
105.关中断只影响可屏蔽中断,不可屏蔽中断不受关中断的影响
106-110
106.溢出判断
107.CF、OF的确定
108.IEEE754的0、NAN、∞分别怎么表示
109.中断隐指令完成哪些操作
110.进程从磁盘读取数据由于磁盘读取速度较慢,进程需先释放CPU资源,会进入阻塞态
111-115
111.ALU不能存储数据,必须借助暂存器存储输入和输出,否则ALU两个输入端只能传输相同的数据,只能进行两个相同数据的计算
112.多路选择器和地址译码器的选择:一根线连一个寄存器是多路选择器,n根线连2^n^个寄存器用地址译码器
113.扇区的平均访问时间
114.用机器视角模拟进行算数运算时,不是看是否丢弃了1来判断溢出,而是按照溢出判断规则进行,有时候丢弃了1照样没有溢出,如:
带符号整数计算 1011 0000 0101 0010 – 0000 0000 0000 1000 = 1011 0000 0101 0010 + 1111 1111 1111 1000 = 1011 0000 0100 1010,最高位丢弃了一个1,也就是CF=1,但是减法运算的溢出判断规则是负-正=正和正+正=负,显然这里负-正=负并没有溢出。
115.RISC(Reduced Instruction Set Computer)是一种计算机架构设计理念,旨在通过简化指令集来提高计算机的性能和效率。RISC架构的核心思想是使用较少且简单的指令集,以实现高效的指令执行和更高的处理速度。与CISC(复杂指令集计算机)相比,RSC更加注重硬件的高效性和指令的执行速度,适用于现代高性能计算需求。
RISC架构通常采用深度流水线设计,将指令的执行过程分解为多个阶段(如取指、解码、执行、访存、写回)
RISC通常采用定长指令字结构
116-120
116.汇编语言中如何访问函数调用参数,如何访问局部变量
117.运算器的基本组成
118.控制器的基本组成
119.CU取址的信号是如何产生的
120.运算器的基本结构
121-125
121.微指令和微命令
122.乘法器的OF是如何确定的
123.解释程序是否生成可执行文件
124.左规和右规
125.cache块大小和主存块大小的关系
126-130
126.主存地址引脚和数据引脚的求法
127.指令体系结构规定的内容
128.微程序、微指令、机器指令的关系
129.操作系统终止进程的过程
1-5
1.用数据传输率衡量,数据传输率=数据宽度(存储字长)/存储周期
2.
MOS管:可以看成一个电控开关,输入电压达到某个阈值时,MOS管就可以接通
(栅极)电容:由两个金属板和中间的绝缘体组成
接地:图中下方的金属板接地,代表该侧电压为0V
充电(写入):电容是可以存储电荷的,当MOS管接入5V电压且最右边也接上5V电压,此时电容充电,上面的金属板聚集电荷。当MOS管断开的时候,电路断开,电荷跑不出去
数据读取:当MOS接5V电压时,若电容中有电荷,则右边显示高电压,表示1;若MOS接5V电压且电容中无电荷,则最右边显示低电压,表示0。由于DRAM是破坏性读出(电荷会在读出的时候跑掉),读出后应有重写操作(因此DRAM比SRAM慢)
3.
一个存储单元的每个存储元的MOS管连接在同一条电路上(字选线),所以读取一次得到的是一个存储字
4.
如图,地址总线将地址送入MAR寄存器(以前是MAR和MDR都在芯片中,但是现代的MAR、MDR已经放在CPU中,芯片中的寄存器只是普通寄存器),MAR输入译码器,打开一个MOS电路,选择一个存储单元,存储单元将数据写入MDR,MDR再通过数据总线发送。
从地址总线到MAR不是一瞬间完成的,必须等MAR中数据稳定后,再传入译码器;同理,MDR的数据也需要稳定下来再从数据总线发送,所以需要控制电路,控制什么时候将MAR输入到译码器和控制什么时候从MDR发送到数据总线
5.SRAM是非破坏性读出,DRAM是破坏性读出,但二者都是易失性存储器。非易失性:SSD、ROM等
6-10
6.针对这个问题引入了行列地址,如果以前是256根选通线(连接256个存储单元),则引入行列地址后,只需要16+16=32根选通线。这样每次刷新存储单元也可以直接刷新一行
7.有硬件支持,读取一行存储单元后重新写入,占用一个存储周期
8.SRAM因为存储空间一般比较小,所以同时传输行列地址给译码器进行地址选择;DRAM存储空间比较大,一般先传行地址后传列地址给译码器
9.
①MROM(mask ROM)掩膜只读存储器,芯片在生产过程中直接写入信息,之后任何人不可重写。
②PROM(programmable ROM)用户可用专门的写入器写入信息,写一次后就不能更改
③EPROM(erasable programmable ROM)可擦除可编程只读存储器,允许用户写入信息,之后用某种方法擦除数据(用紫外线擦就是UVEPROM,ultroviolet;用电擦就是EEPROM(E^2^PROM),electrically),可进行多次重写
④Flash Memory 闪速存储器,如U盘,可进行多次快速擦除重写
⑤SSD(solid state drives)固态硬盘,由控制单元+存储单元(Flash芯片)构成,可进行多次快速擦除重写,目前的PC普遍使用
10.BIOS芯片是存储了自举装入程序的ROM
11-15
11.双端口RAM技术可以优化多CPU访问同一内存条,类似于读者写者算法控制CPU进行访问
多体并行技术也能加快CPU读取速度(避免等待存储器刷新),其中的低位交叉编址在cpu访问连续地址的时候,在存储器刷新时继续访问其他存储器。(不同芯片的低位不同就是低位交叉编址,高位不同就是高位交叉编址)
图中的存取周期为4r,存取时间为r,说明存储器需要3r进行刷新
单体多字存储技术(灵活性较于多体交叉要差,还会读出不需要的数据)
12.驱动器号+柱面号+盘面号+扇区号
13.RAID(独立磁盘冗余阵列)是一种重要的存储技术。RAID的核心思想是将多个独立的磁盘驱动器组合成一个逻辑单元,以提高存储性能和数据冗余。
14.直接相联映射的地址结构是:标记(t位,主存高位)|Cache行号(c位,由主存行总数%cashe行数得到)|块内地址(b位),访存过程如下:
①根据访存地址中间的c位(行号,在cache中是隐含的),找到cache行(标记|有效位1位,脏位1位,替换算法位|数据)。注意有效位等信息不是包含在标记中的
②将cache行中的标记与访存地址的高t位进行比较,若相等且有效位为1,则访问cache命中
③若命中,根据块内地址在对应的cache中存取信息。若未命中,则进行替换算法等
15.
主存地址:主存块号|块内地址
cache:标记|有效位1位,脏位1位|数据
CPU访存需要与所有cache行标记进行比较,命中(有效位为1)则根据块内地址访问cache行中的数据,未命中则从主存取出信息送到cache的任意空闲行中,有效位置1
16-20
16.主存地址:标记|组号(主存块号%cache组数)|块内地址
cache:标记|有效位1位,脏位1位,替换算法位(访问计数)|数据
访存过程:①根据访存地址中间的组号找到cache组
②将cache组中每个行的标记与主存高位地址进行比较,若命中,则根据块内地址读取;若未命中,则从主存调取数据到cache该组的任意一个空闲行
17.实地址=主存页号+页内偏移
虚地址=虚存页号+页内偏移
辅存地址=磁盘号+盘面号+磁道号+扇区号
18.一台计算机所有指令的集合,也称指令集
19.指令字长是一条指令包含的二进制代码的位数,由操作码的位数和地址码的长度和位数决定。指令长度的不同会导致不同的取址时间开销,单字长的指令只需访存一次,而双字长的指令需访存两次
20.如果一个指令系统中所有指令的长度相同,称为定长指令字结构;反之称为变长指令字结构
21-25
21.第三个地址中存放结果,第四个地址中存放下一条取址的地址
22.拓展操作码是一种变长操作码,它使操作码的长度随地址码的减少而增加
23.JMP(无条件转移)、BRANCH(有条件转移)、CALL(调用)、RET(返回)、TRAP(陷阱)
24.调用指令执行时必须保存下一条指令的地址(返回地址),转移指令不用
25.指令寻址是寻找下一条将要执行指令的地址,数据寻址是寻找当前执行指令的数据地址
26-30
26.指令寻址的两种方式:顺序寻址和跳跃寻址
27.程序计数器PC自动加一条指令的长度
28.跳跃寻址包括绝对转移(地址码直接给出下一条指令的绝对地址)和相对转移(地址码指出相对于当前PC值的偏移量)
29.指令的格式为:操作码|寻址特征|形式地址A
①隐含寻址:不给出操作数的地址(比如操作数隐含地由ACC提供)
②立即寻址: 形式地址字段直接存储的操作数
③直接寻址:形式地址A就是真实地址EA
④间接寻址:形式地址A存放操作数地址的地址
⑤寄存器寻址:与直接寻址一样,只不过形式地址A存放的是寄存器编号,寄存器存放操作数
⑥寄存器间接寻址:形式地址A存放的是寄存器编号,寄存器存放的是真实地址EA
⑦相对寻址:形式地址A存放的是相对于PC的偏移量,即EA=(PC)+A
⑧基址寻址:形式地址A+基址寄存器BR的内容得到EA,即EA=(BR)+A。基址寄存器是面向操作系统的,内容由操作系统确定,主要解决程序逻辑地址和物理存储空间的无关性。
⑨变址寻址:EA=(IX)+A,IX是变址寄存器,和BR的区别是IX是用户自己改变其中的内容
⑩堆栈寻址:堆栈是一块存储区(寄存器(硬堆栈)或者存储器(软堆栈)中的),按照后进先出的原则进行管理,该存储区中的读写单元地址是由一个特定寄存器给出的,该寄存器称为堆栈指针SP。
30.相对寻址、基址寻址、变址寻址称为偏移寻址
31-35
31.能够被代号为xx86型号的cpu执行的汇编语言指令,就是X86指令
32.累加寄存器EAX、基址寄存器EBX、计数寄存器ECX、数据寄存器EDX、变址寄存器EDI/ESI、ESP堆栈顶指针、堆栈基指针EBP
33.32位(4字节)
34.call:将IP旧值压栈保存,并设置IP新值,无条件转移到被调用函数的第一条指令
ret:从函数的栈帧顶部找到IP旧值,将其出栈并恢复IP寄存器
35.enter:
push ebp
mov ebp esp
每个函数的开头都必须是以enter指令开头
36-40
36.P:调用者,Q:被调用者
①P将自己的实参放到Q能够访问到的地方
②利用call指令:P将返回地址放到某个地方,然后转移控制权到Q
③Q保存P的现场(通用寄存器),并为自己的非静态局部变量分配空间
④执行Q
⑤Q恢复P的现场(通用寄存器的内容),并将自己返回的结果放在P能访问到的地方,并释放局部变量访问空间
⑥利用ret指令:Q根据返回地址,将控制转移到P
37.若被调用者直接覆盖对方的寄存器,会导致程序错误。因此,被调用者要使用寄存器时,需要将寄存器的内容先保存。根据寄存器由谁来保存,寄存器分为调用者保存寄存器和被调用者保存寄存器。
调用者保存寄存器:若Q(被调用者)要使用EAX、ECX、EDX,则由调用者P将这些内容保存到栈中,并在Q返回后恢复这些寄存器中的内容
被调用者保存寄存器:若被调用者Q要使用EBX、ESI、EDI,则由Q将这些内容保存到栈中,并在Q返回前恢复这些寄存器中的内容
38.栈帧是属于过程自己的栈区
39.
40.是指令中给出操作数地址的方式。大端方式:指令给出操作数最高有效字节所在地址 小端方式:指令给出的是操作数最低有效字节所在的地址
41-45
41.用户可见:通用寄存器组(含变址寄存器、基址寄存器,存放操作数和各种地址信息,如AX、BX、CX、DX、SP等)、程序字状态寄存器、程序寄存器、程序计数器PC、累加寄存器ACC(ALU不是寄存器)
用户不可见:MAR、MDR、IR、暂存寄存器、移位寄存器SR
42.CPU每取出并执行一条指令的全部时间,称为指令周期。不同指令的指令周期可能不同。指令周期≥机器周期(CPU周期)≥时钟周期
43.CPU开始执行指令时,首先进入取址周期,从PC指出的主存单元中取出指令,送至指令寄存器。同时PC+1指向下一条指令的地址,遇到转移指令的话,PC+1后重新更新PC的值。然后判断是否有间接寻址,如果有则进入间址周期,获取操作数的有效地址。之后进行指令执行周期,完成取操作数、执行运算和存操作数的任务。执行周期结束后,如果CPU检测到中断请求,则进入中断周期,此时需要关中断、保存断点、修改PC值为中断服务程序的入口地址,并转向中断服务程序。
44.数据流是根据指令要求依次访问的数据序列
45.
46-50
46.
47.
48.
数据通路是数据在指令执行过程中所经过的路径,包括路径上的部件。组成数据通路的元件分为组合逻辑元件和时序逻辑元件两类。
49.组合逻辑元件任何时候的输出只取决于当前的输入,电路中不含存储信号的单元,也不受时钟信号的控制(不是不受控制信号控制)。如加法器、ALU、译码器、多路选择器
50.时序逻辑元件:任何时刻的输出不仅和当前输入有关,而且还与该时刻以前的输入有关,所以时序电路必然包含存储信号的记忆单元。此外,时序逻辑元件必须在时钟节拍下工作。如通用寄存器、程序计数器、状态/移位/暂存寄存器等
51-55
51.同一时刻可以有多条指令在CPU的不同功能部件中并发执行,指令的执行过程就是指令流水线。包括时间上并行技术:将一个任务分解为多个不同的子阶段,每个子阶段在不同的功能部件上并行执行。空间上的并行技术:在一个处理机内设置多个执行相同任务的功能部件,并让这些功能部件并行工作
52.
53.
54.指令执行的一个阶段,有取址IF、译码/读寄存器ID、执行/计算地址EX、访存MEM、写回WB
55.在指令流水线中,可能会遇到一些情况使后续指令无法正确执行而引起流水线阻塞,这种现象称为流水线冒险。
流水线冒险分为结构冒险(不同指令在同一时刻争用同一功能部件形成的冲突,采用暂停或增加硬件解决)、数据冒险(后面指令用到前面指令的结果RAW,read after write,采用延迟执行、转发技术、load-use)、控制冒险(流水线遇到转移指令和其他改变PC值的指令而造成断流,比如函数调用和中断处理)
56-60
56.
57.
58.
59.
60.单总线结构:CPU、主存、IO设备都挂在一组总线上。单总线不是只有一根信号线
双总线结构:主存总线和IO总线
三总线结构:主存总线、IO总线和DMA总线
61-65
61.总线宽度:也称总线位宽,是总线上能够同时传输的数据位数
总线带宽:单位时间内总线上最多可传输的数据位数
总线工作频率:总线上各种操作的频率,是总线周期的倒数。实际上指1s内传输几次数据
总线带宽 = 总线宽度 * 总线工作频率
62.从请求总线到完成总线使用的操作序列称为总线事务,它是一个总线周期中发生的一系列活动.典型的总线事务包括请求阶段、仲裁阶段、寻址阶段、传输阶段、释放阶段
63.
突发传送和非突发传送
突发传送能够进行连续成组数据的传送,其寻址阶段发送的是连续数据单元的首地址,传输阶段传送连续多个单元的数据
非突发传送在每个传送周期都先传地址,再传数据
64.总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制就是总线定时(实质就是一种协议或者规则)
同步定时方式:用一个同一的时钟信号协调发送和接收双方的传送定时关系。适用于总线长度短且总线所接部件存取时间比较接近的系统
异步定时方式:没有统一的时钟,只依靠传送双方的握手信号来实现定时控制。主设备提出交换信息的请求信号,经接口传送到从设备,从设备接到主设备的请求以后,通过接口向主设备发出回答信号。能够保证工作速度相差很大的部件之间可靠的进行信息交换,但是速度比同步定时方式慢(异步通信方式包括①不互锁:主设备和从设备都自动撤销②半互锁:主设备收到应答后撤销,从设备自动撤销信号③全互锁:主设备和从设备都收到应答后撤销)
半同步定时方式:同步和异步的折中,速度不是很快
65.数字实际存储到机器里的形式,正负号需要被数字化
66-70
66.不能,原码反码补码都是有符号数的表示方式,定点整数的小数点隐含在最后一位,定点小数的小数点隐含在符号位后
67.移码是补码整数的符号位取反,不能表示浮点数
68.逻辑右移空出来的最高位永远补零,逻辑右移不会保留符号位,所以只对无符号整数进行逻辑右移,所以原码补码反码没有逻辑移位;原码算数右移符号位不变,高位补0,反码的最高位补1,
69.补码一位乘法和原码一位乘法
70.short占16位,int占32位
71-75
71.float:1(符号)+8(阶码)+23(尾数)、double:1+11+52、long double:1+15+64.尾数用原码表示,阶数用移码表示
注意尾数f就是机器数本身,而不需要转化成二进制
72.AT&T是UNIX、Linux的汇编指令格式,Intel格式是Windows的汇编指令格式
73.通过jmp指令(je、jne、jg、jge、jl、jle)实现,jmp<地址>,作用是PC的内容变成jmp指出的地址,这个地址可以是常数(如128)、寄存器(eax)、主存地址([af996h])、标号(NEXT,NEXT标记所要跳转的位置)
74.
框架:①循环前变量初始化
②是否直接跳过循环
③循环主体
④是否继续循环
75.
有符号数用补码表示,short 2B,int 4B,符号用1位表示
无符号数不存在符号,计算机中也不叫XX码,就叫无符号数
76-80
76.定点数原码乘法
符号位和数值位分开求,符号位用异或
数值位是乘数的绝对值之积,也就是无符号数的乘积,右移时采用的是逻辑右移
77.23位尾数位数+1位隐藏的1
78.短->长
①拓展短数的位数,分为符号拓展(有符号数,补的数和符号相同)和零拓展(无符号数)
②解释
长度相同:机器数不变,改变解释
长->短 先截断再解释(丢弃长数的高位)
79.无符号数和带符号数如何判断溢出
①无符号数通过CF标志,带符号数通过OF标志
②手算看是否超范围
n位乘n位乘法运算,机器先用2n位保存临时结果,如果需要的类型是n位,那么判断溢出是看临时结果的前n位是否都是0(正数)或者是否都是全1(负数)
溢出后实际结果的计算:
首先算溢出了多少,如short存储32777,short的范围是-32768~32767,32777-32767=10溢出了10,short的32767下一个数是-32768,所以32767+1+9=-32768+9=-32759
80.大端方式:先存储高位字节,后存储低位字节。计算机中正常就是大端方式存储,如0x112233的11是高位字节,存储在计算机低地址
小端方式:先存储低位字节,后存储高位字节。注意字节内部的8位还是按照大端存储的
81-85
81.
82.
83.
84.浮点数只是牺牲了精度,扩大了范围
85.
86-90
86.IEEE754移码的偏移量是-127(8位),移码-127=原码,原码+127=移码。而补码符号位取反得到的移码偏移量是128(其他码->移码都是加法)
87.CPU检测到中断就要进行处理,如果不想要CPU中断,就要停止CPU检测中断这一行为,而不是检测到了不处理
88.SRAM地址引脚=行数+列数,DRAM地址引脚=MAX(行数+列数)
89.
90.
91-95
91.见到求字长先想到是否是8的整数倍(字节编址)
92.MIMD和SIMD
SIMD单条指令被同时应用于多个数据元素上
MIMD多个处理器同时执行不同的指令集,操作不同的数据集。
93.IEEE754定点小数一定可以看作是定点整数左移或右移多少位得到,所以将小数不断乘2,只要能得到整数,说明可以表示为浮点数
94.cache容量=行数*(行内数据+cache标记tag+有效位+算法位+脏位)
注意cache地址的内容是tag|组号|块内偏移,从cache行中取数据的时候,不是每次把一个行内(一个cache块)数据全部取出,而是根据物理地址中指出的块内偏移来找到要具体取出的数据首地址。
95.
这些以外均不可见
96-100
96.磁盘的格式化容量和非格式化容量
非格式化容量通常会比格式化容量大,因为格式化过程中需要预留一部分空间用于文件系统的管理。
格式化容量是用户实际可以使用的空间。
97.磁盘的读写单元是扇区,内存的读写单元才是字节(默认情况)
98.CPU主频是指CPU在单位时间内发出的脉冲数(时钟周期数)
99.微内核
缺点:运行效率低(由于许多服务运行在用户空间,微内核操作系统在执行某些操作时需要频繁地在用户态和内核态之间切换)
优点:支持分布式技术、支持面向对象:可靠、可移植性强
100.系统调用执行前必须是用户态,执行时是内核态,执行后是用户态
101-105
101.机器字长是机器进行一次整数运算时能够处理的比特数
102.二地址指令:操作码
103.单周期CPU、多周期CPU、基本流水线CPU、超标量流水线CPU
单周期cpu:即单指令周期的CPU,各个指令的执行时间相同,每条指令的执行只需要一个时钟周期,指令的长度以最慢的一条指令长度为准
多周期CPU:即多指令周期的CPU,指令的执行过程被分为多个机器周期(如取址、间指、执行、中断,一个机器周期可能包含多个时钟周期),不同指令包含的机器周期数不同
基本流水线CPU:
- 在第一个时钟周期,第一条指令进入IF阶段。
- 在第二个时钟周期,第一条指令进入ID阶段,同时第二条指令进入IF阶段。
- 在第三个时钟周期,第一条指令进入EX阶段,第二条指令进入ID阶段,第三条指令进入IF阶段。
- 以此类推,直到流水线完全充满,此时每个时钟周期都有一条指令完成并退出流水线,同时新的指令进入流水线。
理想情况下,平均每条指令的CPI=1
(关于指令流水线:有的题目IF、IF、EX、WR两个阶段之间都有一个流水线寄存器延迟,如IF+流水线寄存器延迟=一个时钟周期)
超标量流水线CPU:每个时钟周期可以并发指令多条独立指令,每条指令的平均CPI<1
超流水技术
104.QPI总线是core i7中使用的总线,基于包的、全双工的串行高速点对点连接总线,用于连接CPU的各个核心、CPU核心和主存储器
105.关中断只影响可屏蔽中断,不可屏蔽中断不受关中断的影响。内中断无法被屏蔽,可屏蔽中断和不可屏蔽中断都是外中断
106-110
106.溢出判断:大部分都是通过手算结果判断是否在能表示的范围内,而无需纠结硬件细节。
小部分可以通过机器码判断,如补码加法x+y=z,判断溢出的方法是x和y的所有位包括符号位对应相加,如果符号位进位和最高位进位都为1或者都不为1,则没有溢出,反之溢出。
x= 1 1101000
y= 1 1011000
z=11 1000000(可以理解为符号位进位的部分直接舍弃)
OF=最高位异或符号位
CF=最高位异或最低位
107.
OF用于指示有符号整数运算中的溢出情况。溢出发生在结果超出了数据类型所能表示的范围时。
- 确定方法:
- 对于加法运算,如果两个正数相加得到一个负数,或者两个负数相加得到一个正数,那么OF将被设置。
- 对于减法运算,如果两个负数相减得到一个正数,或者两个正数相减得到一个负数,那么OF将被设置。
CF用于指示无符号整数运算中的进位或借位情况。
- 确定方法:
- 对于加法运算,如果结果的最高位产生了进位(即加法的结果大于数据类型所能表示的最大值),那么CF将被设置。
- 对于减法运算,如果需要从更高位借位(即减法的结果小于数据类型所能表示的最小值),那么CF将被设置。减法更简单的判断借位方法是,如果大数-小数则CF=0,小数-大数则CF=1
108.
0:阶码全0,尾数全0,符号位不同表示+0和-0
NAN:阶码全1,尾数不全0
∞:阶码全1,尾数全0
0、NAN、∞是非规格化的数,其余的是规格化的数,所以规格化正数最小是阶码取1,尾数全0
109.
中断隐指令只进行前三条,这三步属于响应阶段,这是由硬件实现的,④-⑨由中断服务程序完成,属于处理阶段,由软件实现
110.进程从磁盘读取数据由于磁盘读取速度较慢,进程需先释放CPU资源,会进入阻塞态
111-115
111.ALU不能存储数据,必须借助暂存器存储输入和输出
112.多路选择器和地址译码器的选择:一根线连一个寄存器是多路选择器,n根线连2^n^个寄存器用地址译码器
113.扇区的平均访问时间=寻道时间+旋转半圈时间+旋转一个扇区的时间
114.用机器视角模拟进行算数运算时,不是看是否丢弃了1来判断溢出,而是按照溢出判断规则进行,有时候丢弃了1照样没有溢出,如:
带符号整数计算 1011 0000 0101 0010 – 0000 0000 0000 1000 = 1011 0000 0101 0010 + 1111 1111 1111 1000 = 1011 0000 0100 1010,最高位丢弃了一个1,也就是CF=1,但是减法运算的溢出判断规则是负-正=正和正+正=负,显然这里负-正=负并没有溢出。
115.RISC(Reduced Instruction Set Computer)是一种计算机架构设计理念,旨在通过简化指令集来提高计算机的性能和效率。RISC架
构的核心思想是使用较少且简单的指令集,以实现高效的指令执行和更高的处理速度。与CISC(复杂指令集计算机)相比,RSC更加注重硬件的高效性和指令的执行速度,适用于现代高性能计算需求。
RISC架构通常采用深度流水线设计,将指令的执行过程分解为多个阶段(如取指、解码、执行、访存、写回)
RISC通常采用定长指令字结构
116-120
116.函数调用参数一般存储在[ebp+8]、[ebp+12]等位置、局部变量一般存储在[ebp-4]、[ebp-8]、[ebp-12]的位置
117.
118.
119.取址信号是CU自动形成的,不需要分析IR中的指令
120.
121-125
121.一条微指令包含多个微命令,微命令可以并行执行,微命令与微操作一一对应
122.n位乘法器会临时保留2n位结果,判断溢出的方法是前n位是否都是0(正数)或者是否都是1(负数)
123.解释程序不生成可执行文件,不生成目标代码
124.左规是浮点数左移使得规格化,所以左规的结果是阶码减小。右规是浮点数右移使得规格化,结果是阶码增大,尾数可能溢出
- cache中的存储块的大小和主存块的大小是保持一致的,但是cache块的大小在不同的映射方式和读写方式下需要添加相应的标志位(tag)、一致性维护位、替换算法控制位,故实际上cache每一行的容量是大于主存块的。另外,直接映射需要的cache块号是隐含的,不占用cache的实际存储空间
126-130
126.地址引脚:地址引脚是为了选择组成主存的存储芯片的某个存储元,按字节编址的主存中,一个存储元通常是1B,2^n^个存储元对应n位地址,再使用地址线复用(DRAM默认使用地址复用,SRAM默认不使用地址复用),需要n/2个地址引脚。如大小为4Mx8位的DRAM芯片,地址引脚的数目是22/2=11个
数据引脚:数据线要求一次传输一个地址的数据,4Mx8位的DRAM芯片的数据引脚是8个
127.ISA指令体系结构规定的都是程序员可见的内容
128.微程序、微指令、机器指令的关系
一个微程序对应一个机器指令,一个微程序又可以包含多个微指令
129.
IO
外设->主机的三种方式
1.程序查询方式:
键盘等外部设备通过USB与主机连接,USB接口插在IO芯片上,这个IO芯片就是IO接口的硬件部分。这个IO芯片上有个缓冲区,大小有限,接收键盘的输入。当输入过快时,缓冲区可能溢出,导致数据丢失。所以CPU需要及时从缓冲区取走数据。
程序查询方式就是有一小段查询程序定期执行,检查CPU里有没有数据,如果有数据就取走。定期是多久查一次呢,计算方法是IO数据速率/缓冲区大小,结果是HZ
2.中断方式(通过软件实现,适用于速度较慢的IO设备)
IO芯片上缓冲区满了以后,向CPU发送一个中断信号,CPU会从缓冲区取走数据。CPU取走数据的过程是执行隐指令(cpu内部直接执行,不需要从存储器取出的指令)、执行中断服务程序。若CPU取走一次数据所花费的时间,大于缓冲区充满一次的时间,则会丢失数据
3.DMA方式(通过硬件实现,适用于速度较快的IO设备如磁盘)
DMA分为几个阶段:①预处理阶段,CPU告诉IO接口,把缓冲区的数据存放在哪里,并指定一个大小 ②IO接口每当缓冲区满了,就将数据放在应该存放的地方,然后继续接收数据。直到占满了CPU指定的区域,向CPU发出DMA中断信号 ③CPU进行DMA后处理,处理传输后的任务,比如中断响应、传输错误处理、释放传输资源等
DMA使用总线的优先级大于CPU,有周期窃取、停止CPU访存、CPU和DMA交替访存
tips:有的IO设备在缓冲区满后会听从CPU的安排,暂停传输数据,避免数据丢失,在CPU处理完或者执行完一部分指令后再开始继续传送数据,这要看题目描述(默认不会暂停传输数据)
IO设备分为机械部分和电子部分,机械部分就是IO设备本身,电子部分(IO接口)是连接总线和机械部分的,也称为IO适配器或设备控制器
进程P通过系统调用读取键盘输入的过程:
进程P发起read系统调用
①将进程P加入阻塞序列
②用户在键盘上输入
③启动键盘中断处理程序
④硬件读取数据到键盘控制器,然后从键盘控制器读入到系统缓冲区
⑤进程P插入就绪队列(因为P已经拿到数据,可以继续执行了)
⑥进程P从系统调用中返回
存储系统
指令执行过程:取指令(PC找到下一条指令的虚拟地址,通过MMU后放到IR,这和下面的过程是一样的)->指令(操作码|寻址方式|地址码)->操作数/操作数虚拟地址/操作数地址的虚拟地址等->MMU(内存管理单元,可以将虚拟地址 页号|页内偏移量 转换成物理地址(一串二进制数),PCB找慢表起始地址(物理地址)(也可以直接查TLB直接得到主存块号)->页表基址寄存器->页表和页号可以得到主存块号->主存块号+页内偏移->物理地址)->MAR地址寄存器->访问cache->访问主存->MDR->IR->PC+1
tips:
1.TLB和Cache都属于相联存储器,相联存储器都是通过SRAM实现的。TLB和Cache都集成在CPU中了。
2.操作系统位数(系统位数)就是虚拟地址的位数
3.物理地址:物理页号(页框号、物理块号)+页内偏移 虚拟地址:虚拟页号+页内偏移
4.页表/TLB:虚拟页号->物理块号 cache:命中则不用去主存找
5.若是二级页表,虚拟地址为:一级虚拟块号|二级虚拟块号|页内偏移量,PCB中存放的是一级页表的始址,一级虚拟块号+一级页表->二级页表始址(物理地址),二级页表+二级虚拟块号->物理块号,物理块号+页内偏移->物理地址
注意一级页表查到的是二级页表的实际物理页框号,该物理页框号再补上页大小的位数就是二级页表的实际物理地址
6.二级页表+TLB:TLB中是一级虚拟块号+二级虚拟块号->物理块号(而不是只用一级虚拟页号或者二级虚拟页号得到物理块号)
7.多级页表默认一个页表只占一个页框(但是也要看题目)
8.m路组相联是一组m个块,需要m个比较器(而不是比较器等于组数),比较器的位数是tag标记的位数。(比较器的作用是比较两个二进制串是否相同)
9.寄存器中存储的地址都是无符号数,不是补码等
10.分析代码缺页率时,需要区分代码是读还是写,如:a[1]=a[1]+32这是一次读一次写,如果只分析了读,那么缺页率会偏高
11.注意页表的内容,每个页表项只包括有效位、页框号、其他信息(外存地址、脏位等),不包括页目录号。因为页目录号是隐含的。而在TLB中(TLB标记|物理页号|有效位、脏位访问位等),虚拟页号是以TLB标记的形式显式存储在TLB中的,占用实际的存储空间。
页和页框
我之前一直以为页框就是块。
然后以为页框就是内存中的页,页,页框,块的大小都相等。最近才发现这似乎很不对。经过查阅,总结如下。
数据的存储
在计算机的底部,数据是以01序列储存在一个一个小的触发器中的,然而,这样对于程序员或者系统的管理很不方便,因此,借用封装的思想,进行了抽象。
第一层抽象:块
块是最小的数据存储单元,用来读或者写入文件。其中保存了一系列的01序列,块是由扇区组成的,块只可能由1个或者偶数个(2,4,6…)个扇区组成,块也叫做物理记录。
第二层抽象:页
页同样也是数据存储单元,是从主存运输到CPU的基本单位。一个页由一个块或者一组块来构成,大小通常是2KB或者4KB。
在做题的时候,时常发现,有的时候块是指内存中的页,有的时候,块是指的磁盘块(和Cache进行交换的基本单位),很难进行统一考量,因此,一定要具体问题具体分析。
总结
因此,当下的思考是,块是和Cache交互的基本单位,也是最小的数据保存项,而页则是将很多块联系在一起,是抽象的结构, 在RAM中,内存划分成了很多页,样逻辑地址也分成了很多页。物理上的页就叫做页框,而逻辑上的页就叫做页。
总之,页和页框一定是第二层抽象。
但是对于块还是一定要注意题目中说的块,到底是磁盘块,还是内存中的页。
数据表示
加法器并不知道自己计算的是有符号数还是无符号数,在它的视角里都是机器数,OF为1说明如果这个机器数是有符号数,则溢出;CF为1说明如果把这个机器数看作无符号数,则溢出
int、unsigned int都是以补码存放的
CF的生成:最高位进位异或sub(减法为1,加法为0)
int的范围-2^31^~2^31^-1(一位符号位,31位补码)
阶数不同的浮点数加减需要先将小阶浮点数右移向大阶浮点数对齐
指令
栈在内存中是高地址在栈底,低地址在栈顶,调用函数的时候,ebp保存函数栈帧的栈底地址,esp保存函数栈帧的栈顶地址。
ebp存放的地址是函数栈帧的栈底地址,栈底存放的是上一层函数的栈底地址,当函数调用结束以后,ebp会读入被调用函数栈底的内容,也就是调用者函数的栈帧栈底地址,从而回到上一层调用。
在执行call指令调用函数的时候,先要把参数压入调用者的栈顶,然后改变ebp存放的地址,进入被调用函数,调用参数保存在调用者的函数栈帧部分,所以访问调用参数需要ebp+某个数
使程序无条件跳转的指令:jmp、call、ret
判断大端存储还是小端存储:从机器指令中找到常数,看这个常数是大端还是小端存储
(x86都是小端存储)
见到c语言转汇编,先检查循环、条件转移、分支、函数调用
循环:进入循环之前先通过cmp和jxxx指令判断是否直接跳过循环,循环体结尾处为cmp+jxxx(跳转)
函数调用:ebp+8、ebp+12(参数访问)、ebp-4、ebp-8(局部变量)
条件转移:cmp jxxx
指令由操作码和操作数组成,操作数由多对寻址特征和形式地址共同指出。形式地址可以是地址,也可以是寄存器编号
硬件
控制信号的类型:
1.寄存器输入控制信号:in结尾,控制响应寄存器接收数据
2.一条通路的通断:可使用三态门、以in或out结尾的控制信号
3.多条通路的选择:可使用多路选择器MUX
控制信号的形式:
in、out结尾的控制信号一般为单个二进制位;多功能部件(如ALU)的控制信号为二进制串,用于表示该部件的不同功能,二进制串的位数由功能的数量决定
多路选择器的控制信号为有效输入端对应的二进制编号
PC自增可以由硬件自动实现,也可由ALU实现(在多路选择器的一端放置PC自增所需的固定值)