计算机架构100问

ca中的100个问题

  1. 计算机是如何创建的?
    1.1 能不能在框图中,构建计算机的结构(画出计算机的datapath?)
    1.2 从逻辑门的角度,画出计算机架构
    1.3 指令的执行过程是怎么样的,手画出来。
  2. 计算机是如何被控制的?(ISA)
  3. 计算机如何提高性能? (pipelining -> data harzards -> forward, branch prediction, caches, and parallelism)
  4. ISA有哪些分类(data operations, data transfers, sequencing)
  5. processor execution model是指什么?(atomic, sequence,visible?)
  6. program storage model指什么?
  7. 计算机函数调用的过程是怎样的?(栈空间如何维护,caller saved register, callee saved register)
  8. 常见指令有哪些类型?(X86/ARM/JVM/PTX/PPC/SPARC)
  9. 从哪几个角度看指令?(Machine types, ISA classes, Addressing modes, Instruction width, CISC vs RISC)
    10.怎么从数据结构角度理解Address modes?

https://baike.baidu.com/pic/%E9%97%B4%E6%8E%A5%E5%AF%BB%E5%9D%80/10335629/1/8718367adab44aed4f0621f7b71c8701a18bfb5d?fr=lemma#aid=1&pic=8718367adab44aed4f0621f7b71c8701a18bfb5d

  1. basic machine types有哪些?(Memory-to-memory machines, register machines, 综合体等等)
  2. BASIC ISA classes有哪些?(Accumulator/GPR+loadstore/GPR+reg-mem/Stack/Comparison)
  3. 问题11中的,各个ISA的执行过程是怎样的,机器代表有哪些?
  4. 指令宽度有什么讲究?定长指令与变长指令分别有什么优缺点?ARM/X86的指令长度是怎样的?
  5. General purpose register machines dominate机器有哪些优点?
  6. CISC 与 RISC ,从编译器设计和硬件架构设计两个维度点评?
  7. 请在图纸是哪个画一个single-cycle的处理器框图结构,并描述不同类型指令的处理过程。
  8. 请分析single-cycle处理器的最大速度瓶颈在哪里?
  9. 清画出single-cycle处理器的门级电路结构,并说明跳转指令执行电路的关键设计。
  10. mid-exam 问题,需要逐一完成。
  11. single-cycle处理器是如何资源的?(大锅饭,大家都消耗同样的时间)
  12. multi-cycle 处理器如何改进?
  13. pipeline处理器,核心秘诀是什么? (非pipeline是怎么浪费的?pipeline是怎么提高的)
    将资源做细粒度的划分,从而避免了浪费。
  14. 为什么要pipeline?(频率提高,不同事物同时运行)生活中有哪些示例?
  15. 从单个活动来说,从single-cyle到pipeline,如果保证latency不变,时钟频率如何变化?
  16. pipeline处理器,对单个事物的latency是如何影响的?
  17. pipeline处理器,对事物的吞吐率是如何影响的?在满载和非满载的情况下,吞吐率差异?
  18. pipeline处理器,可以跑多快,计算公式是?
  19. pipeline的开销? (需要register存储pipeline每个阶段的开销)
  20. 现实中的pipeline会存在哪些问题?(stage长短不一,pipeline经常没有满载,register开销大)
  21. pipeline中存在那些冲突?(资源竞争,数据依赖,控制)
  22. pipeline的RAW冲突中,什么样的情况forwar能解决? 什么样的情况forward解决不了?
    (饭必须要做熟,饭如果还没有做熟,即数据没有生产出来,forward也无法解决)
  23. WAR冲突为什么在pipeline中不存在?(WAR,前辈读完,后辈才能写)
  24. pipeline为什么会存在冲突?(打破ISA承诺:sequential & atomic, ==> parallel & multi-cycle)
  25. pipeline中hazards怎么检测?
    (流水线每个环节有一张表:那个指令?用了那些资源?输入那些信息?需要那些资源。理论上有这张表,就可以完成hazard检测。或者换个维度,为每个指令建立一张表,跑到了那个流水线环节,用了那些资源,需要那些资源,中间结果是什么等等)
  26. 编译器插入nop指令,解决hazards的方法有什么缺点?(可移植性? 换了处理器后功能?性能?)
  27. branch hazards&data hazards有什么共同点?(一个是取指依赖前面计算结果,一个是计算依赖前面计算结果,都是依赖,但发生的阶段不一样而已)
  28. branch delay slot怎么克服?(思路1: 将slot用起来,执行和分制无关的指令; 思路2: 减少slot,加快决定走那条分制的决策; 思路3: 分支预测)
  29. branch delay slot— 思路1有什么问题? (在流水线长(十几条流水线)的情况下,很难找到很多指令将slot塞满)
  30. 1-bit branch predictor与2-bit branch predictor的本质区别? (2-bit branch predictor更中庸,不急着跳变,存在一个状态观察)
  31. branch predictor的实现结构时什么样的?(pc – valid — predict bits — branch target)
  32. exception(non-normal)与interrupts(external)的主要区别是?常见的exception 与interrupts有哪些?
    (exception: divide by zero/misaligned mem access/page fault/mem protect violation, interrupts: keyboard/disk drive ready/ arrival of network packet)
  33. exception 与 interrupts的类型有哪些(synchronous/asynchronous, user request/coerced, maskable/non-maskable, within/between instructions, resume/terminate)
  34. 手画一个加法器(列举一个加法进位的过程,并画出对应的抽象电路)
  35. 加法的进位路径长,如何优化? 有哪些算法?
  36. 为什么要有补码,从十进制的角度如何理解补码?
  37. 手画一个乘法器(列举乘法的等式过程,并画出对应的抽象电路)
  38. 浮点数和定点数的优缺点?(精度,范围,误差???)
  39. 如何从可视化的角度理解浮点数? 给一个定点数,如何手算转换成浮点数?
  40. 对于精度计算中,各种舍入方式有什么特点?(rounding to zero/even… 四舍五入等等) (从误差积累的角度考虑…)
  41. 定点数的小数加减乘,列式子计算? (与十进制类似,先忽略小数点,做完后一起算账)
  42. 浮点数的加减乘分别怎么做,列式子计算? (加减,要对阶。乘除,位数的乘法,指数的加法)
  43. leading zero算法?在什么场景下需要? 其作用是什么?(浮点数加减和浮点数乘除,分别在哪个环节下需要leading zero算法)
  44. 十进制转二进制怎么做,手动列式子计算?
  45. 计算机除法怎么做? 手动列式子计算?
  46. 定点数转化成浮点数,怎么做?简述过程(用十进制比喻怎么做)
  47. 浮点数转换成定点数,怎么做?简述过程(用十进制比喻怎么做)
  48. 计算机中为什么要有alignment?能不能举例子说明?(总线宽度/cacheLine/页表)
  49. 传输中为什么引出burst概念,其是如何提高效率的?(批量传输,减少请求次数,即请求一次传输多个数据)什么时候会用到burst?(cache,DMA,访问某一个压缩数据)
  50. 传输中为什么存在OOO概念?(能做的先做,将slot利用起来)发送方在什么场景下产生OOO请求(RAW)?收到OOO的相应后要做什么操作?(bucket sort)
  51. 试着画出存储树的结构?(processID->page->cache->bus->…)
  52. 指令在乱序执行后,为什么一定要顺序提交?那些情况下可以不用顺序提交?那些情况下一定要顺序提交?(branch/exception/interrupt)
  53. 访存(mem acc instruction/ load/store),从算法的角度看其实什么?(search)
  54. cache能加速的依据是什么?(locality)cache对程序员的启发是什么?(程序访问数据时,要注意locality和alignment,locality和alignment好的程序性能高)
  55. 把cache抽象成搜索算法后(每个line是一个村子),搜索目标是什么?(X省.X村.yy人,搜索对象是X省.X村,因为该村的所有人都在一个cacheLine中)搜索对象是什么?(cache中存在的所有村子),该搜索树长的是什么样子?请画出来。
  56. cache抽象成搜索算法后,有那些搜索TAG算法?(linear, hash, linear+hash)
  57. 从搜索算法角度,如何理解cache的淘汰算法?(搜索最老的,搜索用的最少的等等)
  58. [那些外设]从容量/latency/throughput角度,罗列常见外设与接口?
  59. [怎么连接]处理器与外设之间如何连接?(Buses, serial)
    68.1 并行传输bus与串行传输的对比?
    (并行:线间的skew/synchronization,线间的干扰,外界对线上的干扰[电容/电阻/电感])
    (串行:无需同步,外界对线上的干扰,差分,校准,时钟恢复,均衡等)
  60. 串行传输常见问题及解决方法?(校准,时钟恢复,均衡)
  61. 处理器和外设如何交互?(I/O instruction, memory mapped, DMA)
  62. 处理器和外设在什么时候交互?(polling, interrupts)。两者有什么特点?(polling比较快,但比较费; interrupts相比慢[需要OS参与,更慢],但便宜)
  63. polling和interrupts在系统层面的对立和统一?(polling, 在CPU底层也是interrupts)
  64. interrupts从数据结构角度看,本质是什么?(是一个查表的过程,从中断号,到中断服务程序)
  65. buses 和 serial的接收方的时钟分别怎么获取?(分别有什么优缺点,有什么开销?)
  66. buses 与 serial的应用场景,发展趋势?(serial: off-chip, buses: on-chip. on-chip上address/data/req等解耦)
  67. I/O 交互中,I/O instruction有什么优缺点?(费指令,指令译码代价大; 慢: 一次只访问一个register,cache/burst等无法发挥作用)
  68. I/O 交互中,I/O memory address有什么优缺点?(cons: 占用memory空间; pros: 访问I/O与访问memory的指令归一化,电路简单)
  69. I/O交互中,为什么引出DMA?(释放CPU数量)DMA应用场景中I/O交互类型是什么?DMA是如何工作的?(从哪里来,去哪里,多少东西?怎么干)
  70. 通信中,出现冲突怎么办?(collision detect)重现错误怎么办?(差错控制)怎么发起通信?(master/slave)要不要主持人?(… …)
  71. cache,mem中的address/port/bank的冲突分别是啥样的,画图表示?
  72. cache set-associative架构中,set_id产生的哈希函数有那些?为什么常用异或运算?
  73. mem address在计算cache tag(line in all space)/word in line/ byte in word中,是如何分工的?
  74. 手写direct-mapped/set-associative/fully-associative软件模拟代码,硬件电路结构。评价这几种方式的优缺点。
  75. 手写LRU/PLRU软件伪代码,硬件电路结构。评价几种方式的优缺点。
    84.1 cache的容量怎么计算?
    84.2 cache的性能怎么度量?
    84.3 cache的miss率,容量和速度之间的大致曲线是怎样的?
  76. write-through/ write-back的行为,优缺点?(WT:简单&慢,WB:复杂&快, WB需要维护valid/dirty等状态)今天主流的做法?(WB)write-back有什么要特别注意的?(flush?)
  77. 请解释allocate-on-write? (根据locality原则,近期写过的,近期也会读。cacheLine是一层楼,目前写的只有一个房间,因此在allocate-on-write时,先要把这一层楼读回来,然后更新该房间,到此才算是一个新的楼层)
  78. 为什么要把I-CACHE与D-CACHE分开?I-CACHE有什么特点?(RO, read on every cycle)
  79. 为什么要引出virtual mem? (1 物理的不够;2 物理的浪费(holes); 3 物理的相互干扰)
    89.1 32-bit的机器,供4GB,所有程序共4GB的空间,够用么?总空间不够了怎么办?程序间互相覆盖了怎么办?(每个程序都有4GB的虚拟空间)
    89.2 ·
  80. virtual mem的核心思想是什么?(Indirection)
    89.1. virtual memory是怎么解决内存不够用的问题?这个方法的代价是什么?(映射到硬盘。该方法速度慢。)
    89.2 virtual memory是怎么解决空洞问题? (资源细分,然后见缝插针。这点思路像流水线提高CPU利用率。资源细化调度思路)
    89.3 virtual memory是怎么解决程序安全的问题?(应用程序只管控虚拟地址,每个应用程序的MAP由操作系统管理,具体使用那些物理地址交给操作系统管理)
  81. virtual memory是怎么工作的,基本流程如何?
    90.1 如果PA在DDR中,其流程是怎样的?(VA, VA->PA, 用PA从DDR中抓取数据)
    90.2 如果PA不在DDR中,其流程是怎样的?(从DISK拿数据到DDR中,然后再从DDR中抓数据返回,同时刷新VA-PA的映射)
  82. 最朴素的page table是怎样的?fine 与 coarse page table的优缺点?coarse page table在一个table内部是怎么寻址的?
  83. 32-bit机器中,256M和8GB的两个情形下的ram,其映射过程是咋样的?这两种映射过程分别有什么特点(8GB中,ram有33位地址,空间比va大,一个程序用不完Pa,也是机器位宽拓展到64 bit原因)
  84. page的walk through从搜索算法角度怎么看?(先搜在那个page,再搜在page内那个offset,层次化搜索)
  85. page fault在什么情况下会产生?(page table指向diskl时,即该page不在DDR中,类似cache中的miss)
    94.1 产生后的处理流程是怎样的?(向OS报告–>OS除旧–>OS迎新–>OS更新表–>OS返回。 除旧[如果page dirty,需要writeback],迎新[新的读回来后要刷新映射表table])
    94.2 各个阶段分别花多长时间?(向OS报告100–>OS除旧4000w–>OS迎新4000w–>OS更新表1000–>OS返回10000)
  86. page替换有哪些常见的算法?如何评价各个算法?
    95.1 page的替换算法与cache的替换算法在本质上有什么异同?
  87. virtual address中,memory protection如何实现?(粗粒度看,映射到不同的page。映射到不同的PA ? )
    96.0 page protetion flag是如何实现的,有哪些权限?权限越界时会发生什么?(细粒度看,映射到同一page,但权限有限制,r/rwx/COW(copy on write)/rx)
    96.1 memory sharing如何实现?(两个程序的VA,映射到同一个PA)
    96.2 linux 的program address space是如何实现的?(virtual space与physical space都是按照这个流程实现的么?Kernal/stack/libraries/heap/data/text)
    96.3 什么是false sharing? (共享同一个房间,但不是同一个床位)
  88. 为什么需要TLB?()
    97.1 引入TLB后,整体的工作流程是什么样的?(这两个维度是完全相互独立的:TLB是否hit? Page是否在RAM?)
  89. Page Table 能不能放在disk中?(不能) 如果不能放在disk中,当程序过多时RAM不够用怎么办?如何能减少page table size?(fine -> coarse)
  90. Page table Size能不能压缩?
    99.1 引入indirection为何能压缩省RAM?(level-1的一定放在RAM,level-2/3可以放在DISK中)
    99.2 Multi-level page table核心思想是什么?
    99.3 Multi-level page table为什么具有可行性?(sparse memory)
    99.4 从算法角度如何看Multi-level page? (树的剪枝)
    100 PIPT, VIVT, VIPT各种架构的原理? 优缺点?
    (VIVT: 快,多进程之间无法共享虚拟cache; PIPT:慢,先必须查看TLB; VIPT:Virtually indexed, Physically tagged)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值