专业课复习

chatgpt预测

1、数据结构

2、计组

Q: 请简述冯·诺依曼体系结构的五大部件及其功能。

A: 1)输入设备 2)输出设备 3)存储器 4)控制器 5)算术逻辑单元

Q: 请描述Cache的作用,以及直接映射、全相联映射和组相联映射的工作原理。

A: Cache(高速缓存)是计算机系统中的一种快速存储器,它位于 CPU 和主内存之间,用于存储经常访问的数据和指令。Cache 的作用主要是减少 CPU 和主内存之间的访问延迟,提高程序运行效率。

  • 直接映射:在这种映射技术中,主内存中的每个块(Block)被映射到 Cache 中的一个固定位置(Cache Line)。这种映射方法简单且快速,但可能导致 Cache 冲突,从而降低 Cache 命中率。直接映射的关键在于使用主内存地址的一部分来确定在 Cache 中的位置。

  • 全相联映射:在全相联映射中,主内存中的任意块可以被映射到 Cache 中的任意位置。这种映射方法具有较高的灵活性,因为它允许任意块存储在任意位置,从而减少冲突。然而,全相联映射的硬件实现较为复杂,同时查找所需数据的速度较慢,因为需要在整个 Cache 中进行搜索。

  • 组相联映射:组相联映射是直接映射和全相联映射的折衷方案。在这种映射方法中,Cache 被划分为多个组(Set),每个组包含多个位置(Cache Line)。主内存中的每个块可以映射到特定组中的任意位置。组相联映射在减少冲突和提高命中率方面的性能介于直接映射和全相联映射之间。组相联映射需要在组内进行搜索,但查找速度比全相联映射快。

Q: 中断和异常的区别

A:

在计算机组成原理中,中断(Interrupt)和异常(Exception)都是用于处理特定情况下程序的执行。尽管它们有一些相似之处,但它们之间还是存在一些关键区别。

中断(Interrupt):

中断通常是由外部事件触发的,如输入/输出设备的信号或者定时器。中断使得处理器能够对这些外部事件作出及时响应。 中断是异步的,这意味着它们可以在任何时间发生,与当前正在执行的指令无关。 当中断发生时,处理器会保存当前程序的上下文(如程序计数器和相关寄存器的值),然后转向一个中断服务程序(Interrupt Service Routine, ISR),该程序会处理中断请求。处理完中断后,处理器会恢复先前保存的上下文,继续执行被中断的程序。

异常(Exception):

异常是由程序本身的执行过程中出现的错误或特殊条件触发的,如除以零、非法指令、内存访问违规等。 异常是同步的,这意味着它们是在执行特定指令时发生的。处理器会在当前指令完成前进行异常处理。 当异常发生时,处理器会执行一个异常处理程序(Exception Handler)。处理器可能会保存当前程序的上下文,这取决于异常的类型和处理方式。处理完异常后,处理器可能会恢复先前保存的上下文并继续执行程序,也可能会终止程序。

总结一下,中断和异常的主要区别在于它们的触发来源、发生时机和处理方式。中断通常是由外部事件触发的,异步发生,而异常则是由程序执行中的错误或特殊条件触发的,同步发生。处理方式方面,中断通常会保存上下文并在处理完成后恢复,而异常处理则取决于异常类型和处理策略。

Q: 指令寻址和数据寻址的区别

A: 指令寻址和数据寻址是计算机中两种不同的寻址方式。它们在计算机执行过程中起着不同的作用。

指令寻址:指令寻址是指 CPU 在执行程序时,如何从内存中获取指令的过程。当 CPU 需要执行一个程序时,它首先从内存中获取指令,然后对其进行解码并执行。指令寻址决定了指令在内存中的位置。通常,程序计数器(Program Counter,PC)用于存储下一条指令的内存地址。在执行指令的过程中,程序计数器会自动递增,以便于 CPU 顺序地获取指令。

数据寻址:数据寻址是指 CPU 在执行指令时,如何从内存中获取操作数(Operand)的过程。操作数是指令执行过程中需要处理的数据。数据寻址决定了操作数在内存中的位置。数据寻址有多种方式,包括立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、基址寻址、相对寻址等。

指令寻址和数据寻址的主要区别在于它们的目的和对象。指令寻址关注于从内存中获取指令的过程,而数据寻址关注于从内存中获取操作数的过程。这两种寻址方式共同支持 CPU 顺利执行程序。

Q: I/O方式有哪些?

A: 计算机中的 I/O(输入/输出)方式是指 CPU 与外部设备(如键盘、鼠标、硬盘、显示器等)之间进行数据交换的方法。常见的 I/O 方式有以下几种:

程序查询(Programmed I/O,PIO):在程序查询方式下,CPU 主动查询外部设备的状态并进行数据传输。CPU 需要频繁检查设备是否已准备好进行数据交换,然后执行相应的 I/O 操作。这种方式的缺点是 CPU 需要不断轮询设备状态,消耗大量处理器资源,导致效率较低。

中断驱动(Interrupt-driven I/O):在中断驱动方式下,外部设备在准备好进行数据交换时会向 CPU 发送中断信号。收到中断信号后,CPU 暂停当前任务,处理中断请求并执行相应的 I/O 操作。这种方式允许 CPU 在等待 I/O 操作时继续执行其他任务,提高了系统的效率。但是,当 I/O 设备较多时,中断处理的开销可能会变得较大。

DMA(Direct Memory Access,直接内存访问):在 DMA 方式下,专门的硬件控制器(DMA 控制器)负责与外部设备进行数据传输,而无需 CPU 参与。DMA 控制器可以直接将数据从外部设备传输到内存,或从内存传输到外部设备。这种方式可以显著减轻 CPU 负担,提高数据传输效率。当数据传输完成后,DMA 控制器会向 CPU 发送中断信号,通知数据传输的完成。

这些 I/O 方式在不同的场景下有各自的优势和适用性。一般来说,程序查询方式适用于低速设备和简单的 I/O 操作;中断驱动方式适用于需要及时响应的 I/O 操作;而 DMA 方式适用于高速设备和大量数据传输的场景。

3、操作系统

Q: 内部碎片、外部碎片

A:

  • 内部碎片:内部碎片是指已经分配给某个进程但未被使用的内存空间。这通常是因为操作系统在分配内存时,采用了固定大小的内存块。当一个进程需要的内存大小小于分配的内存块时,多余的内存就会形成内部碎片。要减少内部碎片,操作系统可以采用动态分配内存大小的方法,根据进程的实际需求来分配内存。

  • 外部碎片:外部碎片是指没有被分配给任何进程的内存空间,这些空闲内存空间散布在不同的内存区域,但由于太小而无法满足进程的需求。外部碎片的产生主要是因为操作系统在为进程分配和回收内存时,空闲内存空间被分割成较小的区块。要减少外部碎片,操作系统可以采用内存碎片整理技术(如内存紧缩或内存重分配)来合并这些小的空闲区域,形成一个较大的连续空闲区域,从而满足进程的内存需求。

Q:进程和线程

A:

  • 进程:进程是一个独立的执行实体,它拥有自己独立的内存空间、寄存器状态、堆栈、打开的文件等资源。进程是操作系统分配资源和调度的基本单位。每个进程都有一个唯一的进程标识符(PID)。由于进程间的资源相互独立,因此它们之间的隔离性较好,一个进程崩溃不会直接影响其他进程。但是,进程的创建和销毁以及上下文切换的开销相对较大,主要原因是进程需要分配和管理独立的内存空间和系统资源。

  • 线程:线程是进程内部的一个执行单元,它共享所属进程的内存空间和资源,但具有独立的寄存器状态和栈空间。线程是操作系统调度的最小单位。同一个进程内的多个线程可以并发执行,共享进程的资源,实现更高效的任务处理。相较于进程,线程的创建、销毁和上下文切换的开销较小,这是因为线程共享进程的内存空间,不需要重新分配和管理资源。但是,线程之间的隔离性较差,一个线程的异常可能导致整个进程崩溃。

Q:请解释死锁的概念,并列举四个必要条件。同时,请简要介绍如何预防和避免死锁。

A:

死锁的四个必要条件:

互斥(Mutual Exclusion):资源至少有一个是不可共享的,即一次只能被一个进程使用。

占有并等待(Hold and Wait):一个进程在占有了一些资源的同时,还在等待其它进程占有的资源。

非抢占(No Preemption):进程已经占有的资源在未使用完之前,不能被其他进程强行抢占,只能由占有该资源的进程自愿释放。

循环等待(Circular Wait):存在一个进程集合,其中每个进程都在等待下一个进程所占有的资源,形成一个循环等待链。

为了预防和避免死锁,可以采用以下方法:

破坏互斥条件:尽量使用可共享资源,避免使用独占资源。但在某些情况下,例如打印机、磁盘等设备,这种方法并不适用。

破坏占有并等待条件:进程在请求资源时,一次性请求所有所需资源,不再分阶段请求。这样可以避免进程在等待其他资源时仍然占用部分资源的情况。

破坏非抢占条件:允许进程在需要资源时,抢占其他进程已经占有的资源。这种方法需要操作系统对进程资源进行高度控制,可能会导致其他问题,如抢占导致的性能下降等。

破坏循环等待条件:为所有资源指定一个全局唯一的优先级,要求进程按照优先级顺序申请资源。这样可以避免循环等待的产生。

避免死锁的另一种方法是检测和恢复。这意味着在死锁发生后,操作系统会检测到死锁,并采取措施解除死锁,如撤销进程、回滚操作等。然而,这种方法可能会导致进程执行的中断和性能损失。因此,预防死锁是更为理想的方法。

4、计网

Q: 请解释OSI七层模型的各层功能,并给出每层的主要协议。

A:

OSI(Open Systems Interconnection)七层模型是一种网络通信的概念框架,用于描述网络协议的层次结构。它将网络通信过程划分为七个层次,从低到高依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。以下是每一层的功能以及主要协议:

物理层(Physical Layer):物理层负责定义物理连接标准,包括电气、机械、功能和过程特性。它主要关注数据在物理介质(如双绞线、光纤等)上的传输,将数据转换为电信号或光信号。主要协议和设备有:RJ-45、RS-232、光纤接口等。

数据链路层(Data Link Layer):数据链路层负责在直接相连的网络设备之间建立、维护和拆除数据链路。它将原始比特流分组成帧,并执行错误检测和流量控制。主要协议和设备有:Ethernet(以太网)、PPP(点对点协议)、Token Ring、HDLC(高级数据链路控制)、交换机等。

网络层(Network Layer):网络层负责提供端到端的数据传输,实现数据包的路由和转发。它还可以处理拥塞控制、分组和错误检测。主要协议和设备有:IP(互联网协议)、ICMP(互联网控制报文协议)、ARP(地址解析协议)、RARP(反向地址解析协议)、路由器等。

传输层(Transport Layer):传输层负责在两个通信端点之间建立、维护和拆除端到端的连接。它提供了可靠或不可靠的数据传输服务,实现数据分段、流量控制、错误检测和重传等功能。主要协议有:TCP(传输控制协议)、UDP(用户数据报协议)。

会话层(Session Layer):会话层负责建立、管理和终止通信会话。它支持双向数据传输、同步和会话恢复等功能。主要协议有:NFS(网络文件系统)、SQL(结构化查询语言)、RPC(远程过程调用)等。

表示层(Presentation Layer):表示层负责处理数据的表示和编码格式,包括数据压缩、加密和字符编码转换等功能。它确保数据在不同系统之间的兼容性。主要协议有:ASCII、EBCDIC、JPEG、GIF、MPEG、TLS(传输层安全协议)等。

应用层(Application Layer):应用层是OSI模型的最顶层,直接为用户提供服务。它包括了各种网络应用程序和服务,负责实现文件传输、电子邮件、远程登录等功能。主要协议有:HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议3)、IMAP(互联网邮件访问协议)、DNS(域名系统)等。

需要注意的是,OSI七层模型是一种理论模型,现实中的网络协议并不总是完全遵循这个模型。例如,互联网协议族(TCP/IP)是一种更为实际和普遍使用的网络协议架构,它将OSI的表示层和会话层合并到应用层,并将数据链路层和物理层合并为网络接口层。尽管如此,OSI七层模型仍然为理解网络通信原理和设计网络协议提供了有益的参考框架。

Q: 请描述TCP和UDP协议的主要区别,以及它们在不同应用场景下的适用性。

A:

TCP(传输控制协议,Transmission Control Protocol)和 UDP(用户数据报协议,User Datagram Protocol)是两种在互联网协议(IP)之上的传输层协议。它们具有不同的特点,适用于不同的应用场景。

TCP 和 UDP 的主要区别:

可靠性:TCP 提供可靠的数据传输,通过确认(ACK)、超时重传、流量控制、拥塞控制等机制确保数据在传输过程中不会丢失、重复或乱序。而 UDP 不提供可靠性保证,它仅负责将数据报发送到目的地,但不保证数据报能够正确到达。

连接:TCP 是面向连接的协议,通信双方需要在传输数据前建立连接。这使得 TCP 具有状态,传输过程中双方需要维护连接状态。而 UDP 是无连接的协议,它不需要在传输数据前建立连接,因此通信过程中无需维护状态信息。

传输速度:TCP 由于其可靠性、拥塞控制等机制,传输速度相对较慢。而 UDP 由于没有这些额外的机制,传输速度通常较快。

头部开销:TCP 头部开销较大,最小为 20 字节,而 UDP 头部开销较小,为 8 字节。这意味着 UDP 协议在传输数据时产生的额外开销较小。

根据这些区别,TCP 和 UDP 在不同应用场景下的适用性如下:

对可靠性要求较高的应用场景,如文件传输、电子邮件、网页浏览等,更适合使用 TCP 协议。因为 TCP 可以保证数据的完整性和有序性。

对实时性要求较高、允许一定数据丢失的应用场景,如实时语音通信、视频流、在线游戏等,更适合使用 UDP 协议。因为 UDP 提供了较快的传输速度,适用于实时性较强的场景。

综上所述,TCP 和 UDP 的选择取决于应用场景的需求。需要权衡可靠性和实时性等因素,以选择最合适的传输协议。