前端工程师面试题100道(前端面试题计算机基础)
前端工程师面试题100道(前端面试题计算机基础)算术/逻辑类指令用于让控制单元请求在算术/逻辑单元内执行运算。这些运算包括算术、与、或、异或和位移等。数据传输类指令用于将数据从一个地方移动到另一个地方。比如将主存单元的内容加载到寄存器的LOAD指令,反之将寄存器的内容保存到主存的STORE指令。此外,CPU与其它设备(键盘、鼠标、打印机、显示器、磁盘等)进行通信的指令被称为I/O指令。将程序作为数据一样保存在主存中大有好处,控制单元能够从主存读取程序,然后对它们解码并执行。当我们要修改执行程序时可以在计算机的主存中修改,而不必对CPU更改或重新布线。程序包含了大量的机器指令,CPU对这些指令进行解码并执行。CPU分为两类体系:精简指令集计算机(RISC)和复杂指令集计算机(CISC)。RISC提供了最小的机器指令集,计算机效率高速度快且制造成本低。而CISC提供了强大丰富的指令集,能更方便实现复杂的软件。机器指令分为三类:数据传输类、算
1.CPU基础CPU即处理器,是计算机中控制数据操控的电路。它主要由三部分构成:算术/逻辑单元、控制单元和寄存器单元。它们的作用分别为执行运算、协调机器活动以及临时存储。
2.CPU与主存CPU中的寄存器分为通用寄存器和专用寄存器,通用寄存器用于临时存放CPU正在使用的数据,而专用寄存器用于CPU专有用途,比如指令寄存器和程序计数器。CPU与主存的通过总线进行通信,CPU通过控制单元能够操作主存中的数据。
执行两个数值相加的过程大致为:从主存读取第一个值放到寄存器1->从主存读取第二个值放到寄存器2->两个寄存器保存的值作为输入送到加法电路->将加法结果保存到寄存器3->控制单元将结果放到主存中。
3.程序等同数据原始的计算机并不像现代计算机一样将程序保存起来,以前的人们只对数据进行保存,而设备执行的步骤作为计算机的一部分而被内置在控制单元中。这样就很不灵活,最多只能通过重新布线来提升灵活性。将程序与数据视作相同本质是很大的思想突破,因为人们一直认为它们是不同的事物,数据应该存放在主存中而程序应该属于CPU的一部分。
将程序作为数据一样保存在主存中大有好处,控制单元能够从主存读取程序,然后对它们解码并执行。当我们要修改执行程序时可以在计算机的主存中修改,而不必对CPU更改或重新布线。
4.指令系统程序包含了大量的机器指令,CPU对这些指令进行解码并执行。CPU分为两类体系:精简指令集计算机(RISC)和复杂指令集计算机(CISC)。RISC提供了最小的机器指令集,计算机效率高速度快且制造成本低。而CISC提供了强大丰富的指令集,能更方便实现复杂的软件。
机器指令分为三类:数据传输类、算术/逻辑类与控制类。
数据传输类指令用于将数据从一个地方移动到另一个地方。比如将主存单元的内容加载到寄存器的LOAD指令,反之将寄存器的内容保存到主存的STORE指令。此外,CPU与其它设备(键盘、鼠标、打印机、显示器、磁盘等)进行通信的指令被称为I/O指令。
算术/逻辑类指令用于让控制单元请求在算术/逻辑单元内执行运算。这些运算包括算术、与、或、异或和位移等。
控制类指令用于指导程序执行。比如转移(JUMP)指令,它包括无条件转移和条件转移。
5.指令寄存器与程序计数器CPU将主存的指令加载进来解码并执行,其中涉及两个重要寄存器:指令寄存器与程序计数器。指令寄存器用于存储正在执行的指令,而程序计数器则保持下一个待执行的指令地址。
CPU向主存请求加载程序计数器指定的地址的指令,将其存放到指令寄存器中,加载后将程序计数器的值加2(假如指令长度为2个字节)。
6.指令如何执行比如我们要计算11 22,假设过程为:将主存地址为00的内容加载到寄存器1中->将主存地址为01的内容加载到寄存器2中->将寄存器1和寄存器2的数据相加并将结果保存到寄存器3->将寄存器3的结果存储到主存地址为02的位置->停止。
这个过程CPU涉及到四个操作:加载(load)、存储(store)、加法(add)和停止(halt)。可以对这些操作进行编码,比如可以分别用1、2、3、0000表示。
1100
1201
3312
2302
0000
7.控制器
CPU与其他设备的通信一般通过控制器来实现,控制器可能在主板上,也可能以电路板形式插到主板。控制器本身可以看成是小型计算机,也有自己简单的CPU。以前每连接一种外设都需要购买对应的控制器,而现在随着通用串行总线(USB)成为通用的标准,很多外设都可以直接用USB控制器作为通信接口。每个控制器都连接在总线上,通过总线进行通信。
8.直接存储器存取直接存储器存取(DMA)是一种提升外设通信性能的措施,CPU并非总是需要使用总线,在总线空闲的时间里控制器能够充分利用起来。因为控制器都与总线相连接,而控制器又有执行指令的能力,所以可以将CPU的一些工作分给控制器来完成。比如在磁盘中检索数据时,CPU可以将告知控制器,然后由控制器找到数据并放到主存上,期间CPU可以去执行其他任务。这样能节省CPU资源。不过DMA会使总线通信更加复杂,而且会导致总线竞争问题。总线瓶颈源自冯诺依曼体系结构。
专注于人工智能、读书与感想、聊聊数学、计算机科学、分布式、机器学习、深度学习、自然语言处理、算法与数据结构、Java深度、Tomcat内核等。
9.什么是程序局部性?为什么会有程序的空间局部性?程序局部性是指程序在运行时呈现出局部性规律 在一段时间间隔内 程序的执行是局限在某个部份 所访问的存储空间也只局限在某个区域。
程序的空间局部性是指若一个存储单元被访问 那么它附近的单元也可能被访问 这是由于程序的顺序执行引起的。
10.为了实现重定位,需要哪些硬件?最简单的方式是在系统中增设一个重定位寄存器 用来存放正在执行作业的内存地址 每次访问数据时 由硬件自动将相对地址与重定位寄存器中的起始地址相加 形成实际的特理地址。当然在分页式与分段式系统中 具地址变换机构 以及快表等硬件。
11.在交互式系统中,非剥夺是不是一个好的策略?为什么?非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去 直到进程完成或发生某事件而阻塞时 才把处理机分配给另一个进程。
剥夺方式:当一个进程正在运行时 系统可以基于某种原则 剥夺已分配给它的处理机 将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则。
在分时系统中不剥夺并不是一个好的策略。因为 在分时系统中 除了交互性以外 及时性是很重要的性能因素。当一个作业被阻塞后 CPU就完全空闲了 别的用户的及时性就无法保证了 而完全可以把这些时间分配给别的作业运行。以提高整体的吞吐量。
12.谈一谈计算机网络和分布式计算机系统的区别两者在计算机硬件连接、系统拓朴结构和通信控制等方面基本都是一样的 它们都具有通信和资源共享的功能。
区别关键在于:分布式计算机系统是在分布式计算机操作系统支持下 进行分布式数据库处理的 也就是说各互联的计算机可以互相协调工作 共同完成一项任务 多台计算机上并行运行。且具有透明性 用户不知道数据、资源的具体位置 整个网络中所有计算机就像是一台计算机一样;而计算机网络却不具备这种功能 计算机网络系统中的各计算机通常是各自独立进行工作的。
13.为什么要引入多道程序技术?因为引入多道程序技术后 可以进一步提高了CPU利用率(阻塞) 提高内存和I/O设备利用率(小作业把内存浪费了) 增加系统吞吐量(两都提高后的必然)。
14.处理器如何读并解释存储在内存中的指令比如在Unix系统中,通过shell输入./hello “hello world”是如何展示到屏幕上的呢
linux> ./hello
hello world
linux>
要想了解其中原理,需要先知道计算机的硬件组成
15.总线贯穿整个系统的电子通道,传输的是定长的字节块。而字节中的字长是一个系统参数,各系统不相同,现在通常是4字节(32位),8字节(64位)
16.I/O设备I/O(输入/输出)设备是系统与外部世界的联系通道。键盘、鼠标、显示器、磁盘都输入I/O设备,并通过控制器或者适配器与I/O总线相连
17.主存主存是一个临时存储设备,在处理器处理程序过程中,临时存储程序和数据,从物理上讲,是由一组动态随机存取存储器(DRAM)芯片组成的,从逻辑上讲,存储的是一个线性的字节数组,每个字节都有唯一的地址(数组索引)。
18.处理器中央处理单元(CPU),简称处理器,是解释或执行存储在主存中指令的引擎。
19.计算机如何访问信息CPU通过寄存器来存储整数数据和指针,比如X86-64的CPU包含一组16个存储64位的通用目的寄存器,这16个寄存器各司其职,其中最特别的是栈指针%rsp 用来指明运行时栈的结束位置。更重要的是,有一组标准的编程规范控制着如何使用寄存器来管理栈、传递函数参数、函数的返回值、以及存储局部或临时变量。
20.什么是操作数指示符大多数指令中有一个或多个“操作数”,指示出执行一个操作中的源数据以及放置结果的目标位置。操作数有三类立即数,用来表示常数值寄存器,用来表示某个寄存器的内容内存引用,根据计算出来的地址访问某个内容
21.如何传送数据通过指令,可以实现寄存器和内存之间的数据传送
C语言中的“指针”指的是地址,间接引用指针就是将该指针放到一个寄存器中,然后在内
存引用中使用这个寄存器
22.栈数据如何压入和弹出
因为栈和数据都是放到同一内存中的,可以通过内存寻址方法来访问栈内的任意位置,栈向地址方向增长,所以压栈是减少栈指针(寄存器%rsp的值),并将数据存放到内存中,而出栈是从内存中读数据,增加栈指针的值
23.如何进行算数和逻辑操作也是通过指令,大多数操作分成了指令类,指令类有各种带不同大小操作数的变种,比如指令类ADD由四个加法指令组成:addb、addw、addl和addq 分别是字节加法、字加法、双字加法和四字加法。每个指令类都对应四个操作,分别是
加载有效地址
一元操作
二元操作
移位
其中一元操作有一个操作数、二元操作有两个操作数
24.什么是“加载有效地址”加载有效地址指令leaq实际上是movq指令的变形,它的指令形式是从内存读数据到寄存器,但该指令并不是从内存位置读入数据,而是将有效地址写入目的操作数。
25.什么是一元和二元操作1. 一元操作只有一个操作数,即是源又是目的,可以是一个寄存器,也可以是一个内存位置,比如i 和i--
2. 二元操作,第二个数即是源又是目的,比如x-=y 第一个数是源操作数,第二个数是目的操作数