【820复试】操作系统面试问题

1. 什么是程序局部性,为什么会有程序的空间局部性?

程序局部性是指程序在运行时呈现出局部性规律,在一段时间间隔内,程序的执行是局限在某个部份,所访问的存储空间也只局限在某个区域。
空间局部性是指若一个存储单元被访问,那么它附近的单元也可能被访问,这是由于程序的顺序执行引起的。

2.为了实现重定位需要哪些硬件?

最简单的方式是在系统中增设一个重定位寄存器,用来存放正在执行作业的内存地址,每次访问数据时,由硬件自动将相对地址与重定位寄存器中的起始地址相加,形成实际的物理地址。

分页式和分段式实现重定位时需要地址变换机构、快表等硬件。

3.在交互式系统中,非剥夺是不是一个好的策略?why?

非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。

剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则。

分时系统中不剥夺并不是一个好的策略。因为,在分时系统中,除了交互性以外,及时性是很重要的性能因素。当一个作业被阻塞后,CPU就完全空闲了,别的用户的及时性就无法保证了,而完全可以把这些时间分配给别的作业运行。以提高整体的吞吐量。

4.CPU不执行程序的时候干什么?

当没有被任何程序使用的时候,计算机的处理器被认为是空闲的。当有程序利用CPU空闲时间的时候,就意味着它以较低的优先权运行着,以便不会影响那有正常优先权的程序运行。

5.死锁是什么?

指多个进程由于竞争资源而造成的一种僵局,在无外力的作用下,这些进程将永远无法向前推进的状态。

造成死锁的原因:资源竞争;进程推进顺序不当。

6.系统调用和库函数的定义、区别、联系

系统调用:
操作系统内核提供给用户程序的一组接口,用于访问操作系统核心功能和资源。系统调用允许用户程序通过一种受控的方式执行特权指令,以便在用户空间和内核空间之间进行数据传输和操作。

库函数:
由编程语言或操作系统提供的一组函数集合,用于实现常见的操作和功能。

区别:
实现位置:系统调用是由操作系统内核提供的接口,位于操作系统内核空间;而库函数则是由库文件提供的接口,位于用户空间。
权限:系统调用执行时通常会切换到内核模式,需要特权级别的访问权限;而库函数执行在用户模式下,不需要特权级别的权限。
效率:由于系统调用涉及到用户空间和内核空间的切换,因此相比于库函数,系统调用的开销通常更大,执行速度较慢。
功能:系统调用提供了更底层的操作系统功能,例如进程管理、文件系统访问等;而库函数则提供了更高层次的抽象,封装了常用的功能,使得编程更加方便。

联系:
库函数通常是建立在系统调用之上的,库函数的实现可能会调用系统调用来完成特定功能。
库函数可以提供更友好的接口和更高级别的抽象,使得开发者更容易使用操作系统提供的功能。
而系统调用则提供了底层的系统接口,为库函数的实现提供了基础支持。

7.同步、互斥是什么?并发、共享、虚拟、异步是什么?

同步(Synchronization)
在多任务或多线程环境中,同步是指协调不同任务或线程之间的执行顺序,以确保它们按照某种预期的顺序执行或协同工作。同步操作可以确保数据的一致性。

互斥(Mutual Exclusion)
互斥是一种同步机制,用于确保在任何给定的时刻,只有一个线程或任务能够访问共享资源,避免多个线程同时修改相同的数据而导致数据不一致或不可预测的结果。

并发(Concurrency)
并发是指在同一时间间隔内,多个任务或线程在计算机系统中同时执行。
并不是同时执行,是指任务在时间段上有重叠,会以某种方式来处理多个任务之间的执行。

共享(Sharing)
共享是指多个任务或线程之间共同使用同一份资源,共享资源需要进行适当的同步和互斥操作,以确保对共享资源的安全访问。

虚拟(Virtual)
在计算机科学中,虚拟可以指代多种概念,如虚拟内存、虚拟机。
虚拟化技术使得一个实体可以模拟另一个实体,从而提供更高效、更灵活或更安全的计算环境。

异步(Asynchronous)
异步是一种编程模型,指的是在程序执行过程中,不需要等待某个操作完成就可以继续执行其他操作。
异步操作通常通过回调函数、事件驱动或者异步任务来实现,可以提高系统的响应速度和资源利用率。

8.管程是什么?

管程(Monitor)是由一组局部变量对局部变量进行操作的一组过程对局部变量进行初始化的语句序列、一个名字组成。引入它的目的是因为Wait/Singal操作太过分散,对它的维护很麻烦且容易造成死锁。

关键组件:
共享数据结构:管程内部包含了需要被多个线程共享访问的数据结构,例如队列、缓冲区等。
互斥锁(Mutex):用于保护共享数据结构,确保同一时间只有一个线程可以对其进行访问。互斥锁在管程中充当了临界区的作用,防止多个线程同时修改共享数据。
条件变量(Condition Variable):用于实现线程间的等待和通知机制。
进程的调度和执行控制:管程通常会定义一组操作,用于控制线程的进入和退出,以及线程在管程内的执行顺序。

管程的特点是:
管程的过程只能访问管程的局部变量,管程的局部变量只能由其过程来访问;
任何时刻只能有一个进程进入管程执行;
进程只能通管程提供的过程入口进入管程;

9.在可变分区管理中,需要哪些硬件机制

基址寄存器、限长寄存器。

10.中断和陷入有什么区别

中断(Interrupt)

  • 中断是一种外部事件,通常由外设、时钟或其他硬件设备发起。这些事件可能是硬件故障、IO请求完成、定时器到期等。
  • 当发生中断时,处理器会暂停当前正在执行的程序,跳转到中断服务程序(Interrupt Service Routine,ISR)中,以处理中断事件。
  • 中断处理程序会保存当前执行环境的状态,包括程序计数器、寄存器等,然后执行相应的中断处理逻辑。
  • 处理完中断事件后,处理器会返回到被中断的程序继续执行。

时钟中断、IO中断、硬件故障中断、网络中断。

陷入(Trap)

  • 陷入是一种由程序主动发起的异常事件,通常用于系统调用、错误处理等场景。
  • 程序可以通过特殊的指令(例如系统调用指令)或者特定的条件(例如除零错误)触发陷入。
  • 当发生陷入时,处理器会暂停当前正在执行的程序,并跳转到陷入处理程序(Trap Handler)中。
  • 陷入处理程序会根据陷入的原因执行相应的处理逻辑,可能包括调用操作系统的服务、记录错误信息等。
  • 处理完陷入事件后,处理器会将控制返回到原来的程序中继续执行。

系统调用、除零错误、访问非法内存、页错误。

11.引入多道程序技术的好处

可以进一步提高了CPU利用率(阻塞),
提高内存和I/O设备利用率(小作业把内存浪费了),
增加系统吞吐量。

12.管态和目态是什么?

管态又叫特权态,系统态或核心态。CPU在管态下可以执行指令系统的全集。通常,操作系统在管态下运行。

目态又叫常态或用户态。机器处于目态时,程序只能执行非特权指令。用户程序只能在目态下运行,如果用户程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制,特权指令执行被禁止,这样可以防止用户程序有意或无意的破坏系统。

13.父子进程是否可以并发运行

可以并发运行,因为不管是父进程还是子进程都是系统分配资源的最小单位,都是独立的进程,是可以并发运行的,跟进程和线程的关系不一样。

14.为什么引入缓存技术

为解决CPU速度和I/O速度之间不匹配,减少对CPU的中断频率的问题,以放宽对CPU中断响应时间的限制,以及提高CPU和IO设备之间的并行性。
加上缓冲区,慢速设备将数据送入缓冲区,快速设备不需要等待,可以处理其他任务,直到缓冲区满时才通过中断快速设备处理缓冲区中的数据,从而提高设备工作的独立性,提高快速设备的利用链。

15. 进程调度算法

先来先服务算法、短作业优先、最高响应比优先、时间片轮转、多级反馈队列调度、最短剩余时间优先。

16.进程三个状态的转换

就绪态:当进程已分配到除cpu以外的所以必要资源后只要能再获得处理机便可立即执行。

执行状态:指进程已获得处理机其程序正在执行。若时间片用完转入就绪态

阻塞状态:进程因发生某件事如请求I/O而暂停执行的状态。

17.设备驱动程序是否属于操作系统,他的作用是什么?

设备驱动程序不属于操作系统。

驱动程序本质上是软件代码,主要作用是计算机操作系统与硬件设备之间完成数据传送的功能
只有借助驱动程序,两者才能通信并完成特定的功能。
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。

18.线程、进程、程序和任务

线程(Thread)

  • 线程是进程内的一个执行单元,它与其他线程共享相同的地址空间和其他资源,包括代码段、数据段、文件和设备等。
  • 线程是进程的一个实体,多个线程可以同时执行不同的任务,共享进程的资源,提高了系统的并发性和效率。
  • 线程可以看作是轻量级的进程,它们的创建、切换和销毁的开销都比进程小很多。

进程(Process)

  • 进程是程序在执行过程中的一个实例。它是操作系统进行资源分配和调度的基本单位,拥有独立的内存空间、程序计数器、寄存器集合和栈等资源。
  • 每个进程都拥有自己的地址空间和执行环境,可以独立运行,并与其他进程隔离。
  • 进程可以通过操作系统提供的系统调用创建、终止和管理。

程序(Program)

  • 程序是一组指令的集合,通常由高级编程语言编写而成,用于实现特定的功能或任务。
  • 程序本身是静态的,它只是存储在磁盘或其他存储介质上的文件,不具有实际的执行能力。

任务(Task)

  • 任务通常是指计算机系统中需要执行的工作单元,可以是一个进程或者一个线程,也可以是更高级别的抽象概念。
  • 在某些上下文中,任务可以指代需要执行的任何工作,不局限于进程或线程。

程序是静态的代码集合,进程是程序的执行实例,线程是进程内的执行单元,而任务是需要执行的工作单元,可以是进程或线程。

19.处理中断的过程

请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回

20.根据分页、分段、段页式虚拟系统的特点,为什么要引入?

分页:将作业地址空间和内存空间分为相同固定大小的页面。系统为每个进程建立一张页表,记录页面在内存中对应的物理块号。逻辑地址:页号、页内偏移。

**分页是为了提高内存的利用率,没有外部碎片,只有很少的内部碎片,**且分页通过硬件机制来实现,对用户完全透明。

分段:按照用户进程中的自然段划分逻辑空间。每个进程有一张段表。逻辑地址:段号、段内偏移。

分段是为了方便编程,信息保护和共享、动态增长及动态链接等多方面的需要。

段页式是两者的结合。

提高内存利用率:虚拟内存管理技术允许多个进程共享物理内存,从而提高了内存的利用率。
增加地址空间:通过虚拟内存技术,每个进程可以拥有更大的地址空间,允许处理更大的数据集和程序。
提高系统的灵活性和可移植性:虚拟内存技术使得操作系统可以在不同的物理内存配置下运行,提高了系统的灵活性和可移植性。
简化程序设计:通过虚拟内存技术,程序员可以将程序设计为逻辑上连续的地址空间,而不必考虑物理内存的限制和管理。

21.计算机系统怎样实现存储保护?

地址空间隔离
操作系统将每个进程的地址空间划分为不同的区域,如代码段、数据段、堆栈段等,以及用户空间和内核空间。
访问权限控制
操作系统通过访问权限位或者访问控制列表(ACL)等机制,限制进程对内存中不同区域的访问权限。
权限矩阵。
内存保护机制
内存保护单元通过将虚拟地址映射到物理地址,并检查访问权限来实现存储保护。如果进程试图访问未授权的内存区域,会触发异常并由操作系统进行处理。
栈保护
操作系统可以实施栈保护机制,检测和防止栈溢出攻击。
内存分页
使用分页机制可以实现虚拟内存的管理,将进程的虚拟地址空间映射到物理内存上,从而实现地址隔离和访问控制。

22.调度的基本准则

面向用户:
周转时间、响应时间、结束时间、优先权。

面向系统:
系统吞吐量、设备利用率、资源的平衡利用。

23.多线程是如何提高系统效率的?

并发执行
多线程允许程序同时执行多个任务或操作,不同线程之间可以并发执行,利用了多核处理器和多任务操作系统的特性,从而提高了系统的整体吞吐量和响应速度。

资源共享
多线程可以共享同一进程的资源,包括内存空间、打开的文件、网络连接等。这样可以避免资源的重复创建和管理,提高了资源利用率。

任务分解
通过将复杂任务分解成多个子任务,并由不同的线程并发执行,可以加快任务的处理速度。

充分利用CPU资源
当一个线程在执行耗时操作时,其他线程仍然可以继续执行,充分利用了CPU资源,避免了因等待而导致的CPU空闲现象。

减少阻塞
多线程可以减少由于某个线程的阻塞而导致整个系统的停顿。当一个线程被阻塞时,其他线程仍然可以继续执行,不会影响系统的正常运行。

例子Web 服务器

  • 在一个 Web 服务器中,每个请求都需要与客户端进行通信、处理请求、访问数据库等操作。如果使用单线程处理每个请求,那么在处理一个请求时,服务器将无法响应其他请求,造成性能瓶颈。
  • 使用多线程可以让服务器同时处理多个请求。例如,可以为每个客户端连接创建一个单独的线程来处理请求。这样,即使某个线程在处理一个耗时的请求时被阻塞,其他线程仍然可以继续处理其他请求,从而提高了服务器的吞吐量和响应速度。
24.RAID的工作原理

RAID(Redundant Array of Independent Disks)是一种将多个磁盘组合成单个逻辑存储单元的技术,旨在提高数据存储的性能、容错性和可靠性。

1.数据分布

  • RAID系统将数据分布在多个磁盘上,以提高数据访问速度和并发能力。常见的数据分布方式包括条带化(Striping)和镜像(Mirroring)。

2.条带化(Striping)

  • 在条带化RAID中,数据被分成固定大小的块,并依次写入多个磁盘中。例如,如果有4个磁盘,数据块1会写入磁盘1,数据块2会写入磁盘2,以此类推。
  • 条带化可以提高数据读取和写入的速度,因为数据可以同时从多个磁盘读取或写入,从而增加了数据的并发性。

3.镜像(Mirroring)

  • 在镜像RAID中,数据同时写入多个磁盘中,以提供数据的冗余备份。例如,如果有2个磁盘,数据会同时写入磁盘1和磁盘2。
  • 镜像可以提供数据的冗余备份,当一个磁盘发生故障时,数据仍然可以从其他磁盘中恢复,从而提高了系统的容错性和可靠性。

4.数据保护

  • RAID系统采取不同的数据保护策略来保护数据免受硬件故障的影响。常见的数据保护策略包括奇偶校验、数据重建和热备份等。

5.奇偶校验

  • 在某些RAID级别中,RAID系统会计算数据的奇偶校验位,并将其存储在不同的磁盘上。当一个磁盘发生故障时,RAID系统可以使用奇偶校验位来恢复丢失的数据。

6.数据重建

  • 当一个磁盘发生故障时,RAID系统可以从其他磁盘中重建丢失的数据。具体的重建过程取决于RAID级别和数据保护策略。
25.解决死锁的三个方法

预防死锁:通过设计系统或算法来避免死锁的发生。
其中一种方法是使用资源分配图来检测潜在的死锁情况,并通过合适的资源分配策略来避免死锁的发生。
另一种方法是使用资源申请顺序来避免死锁。

避免死锁:一种在运行时动态地避免死锁的发生的方法
其中一种方法是使用银行家算法(Banker’s Algorithm)。该算法在每次分配资源之前检查系统是否处于安全状态,以确保资源分配不会导致死锁。
另一种方法是使用超时机制。如果一个进程等待资源的时间超过一定阈值,系统可以自动终止该进程,释放已经占用的资源,以避免死锁的发生。

检测和解除死锁
死锁检测是在系统中周期性地检测死锁的存在,一旦检测到死锁,系统就会采取措施来解除死锁。
解除死锁的方法包括撤销进程、回滚操作、资源抢占等。

26.操作系统打开、关闭文件的过程

文件打开时,将文件的属性包括该文件在外存的物理位置从外存复制到内存打开文件表的一个表目中,并将该表目的编号(也称索引)返回给用户,open返回一个指向打开文件表的一个条目的指针。以后就使用该指针(而非文件名)进行所有I/O操作。

文件关闭时,当打开计数器为0时,系统将回收分配给该文件的内存空间等资源。若文件被修改过,则将文件写回外存,并将系统打开文件表中的相应条目删除,最后释放文件的文件控制块。

27.文件连续分配和离散分配的优缺点

**连续分配 ** 需访问1次
优点:实现简单、存取速度快(可随机访问)
缺点:文件长度不宜动态增加、外部碎片、很难确定一个文件需要的空间大小(预分配太大又会造成浪费)

离散分配(链接分配、索引分配)
链接分配 需访问n次
优点:消除了外部碎片、可以动态增加
缺点:存取速度慢查找效率低(只能顺序访问)、隐式链接有下一盘块指针;显示链接有FAT表;占用内存空间
**索引分配 ** 需访问m+1次
优点:消除外部碎片、可以动态增加、可随机访问
缺点:索引方式有索引表,占用内存空间

28.读者/写者问题在实际中有何应用

读者/写者问题是计算机科学中经典的并发问题,描述了多个进程之间对共享资源(如文件、数据库、内存等)的访问方式。读者进程只需读取共享资源,而写者进程需要对共享资源进行写操作。

在文件系统中

  • 文件系统中的文件访问也涉及到读者/写者问题。多个进程可能同时访问同一个文件,有些进程只读取文件内容(读者),而其他进程可能修改文件内容(写者)。
  • 保证文件系统中对文件的并发访问是一个重要的挑战,需要合适的同步机制和访问控制策略来确保数据的完整性和一致性。

在缓存系统中

  • 缓存系统中的读者/写者问题也很常见。多个进程可能同时访问同一个缓存,一些进程只需从缓存中读取数据(读者),而其他进程可能需要更新缓存中的数据(写者)。
  • 缓存系统需要确保对缓存的并发访问不会导致数据的不一致或丢失,同时尽可能地提高缓存的命中率和性能。

在数据库管理系统中

  • 数据库管理系统(DBMS)是典型的读者/写者问题的应用场景。多个用户同时访问数据库,一些用户只读取数据(读者),而另一些用户可能修改或写入数据(写者)。
  • 在数据库系统中,需要确保读操作之间可以并发执行,以提高系统的吞吐量和响应速度,同时保证写操作的原子性和一致性,以避免数据的不一致性和丢失。
29.什么是前台作业,什么是后台作业?有什么区别?

前台作业

  • 前台作业是在用户当前的会话中直接执行的任务,它会占据用户的终端或图形界面,用户需要等待任务执行完成才能继续其他操作。
  • 前台作业通常会在用户的屏幕上显示任务的输出信息,用户可以通过键盘输入与任务进行交互,例如提供输入或中断任务。
  • 典型的前台作业包括交互式应用程序、命令行工具等,用户在执行这些任务时通常会直接与其交互。

后台作业

  • 后台作业是在后台默默执行的任务,它不会占据用户的终端或图形界面,用户可以继续进行其他操作而不受影响。
  • 后台作业的输出通常不会直接显示在用户界面上,而是保存在文件中或者通过其他方式记录。
  • 后台作业常用于需要长时间运行的任务或者不需要用户交互的任务,例如后台进程、批处理作业等。

区别:

执行方式:前台作业直接在用户当前会话中执行,占据用户界面,而后台作业在后台默默执行,不影响用户界面。

用户交互:用户可以直接与前台作业进行交互,例如提供输入或中断任务,而后台作业通常不需要用户交互。

输出显示:前台作业的输出通常直接显示在用户界面上,而后台作业的输出可能会保存在文件中或者通过其他方式记录。

30.CPU工作在内核态与用户态有什么区别?

权限级别:
在内核态下,CPU 可以执行操作系统内核中的所有指令,包括访问系统资源和执行特权指令;
在用户态下,CPU 只能执行受限制的指令集,无法直接访问或修改系统资源,也无法执行特权指令。

访问系统资源:
内核态下的程序可以直接访问系统资源,如硬件设备、内存管理单元等,并且可以执行特权操作,如修改系统状态和进行系统调用。
用户态下的程序只能通过系统调用来请求操作系统代为访问系统资源,而不能直接访问或修改系统资源。

中断处理:
在内核态下,CPU 可以处理所有的中断和异常,包括硬件中断(如时钟中断、设备中断)和软件中断(如系统调用、异常)。
在用户态下,CPU 通常不能直接处理中断和异常,而是通过将控制权交给操作系统内核来处理,以确保系统的稳定性和安全性。

执行特权指令:
内核态下的程序可以执行所有特权指令,例如修改控制寄存器、访问特殊的I/O端口等。
用户态下的程序无法执行特权指令,试图执行这些指令会导致CPU产生异常,并将控制权交给操作系统内核来处理。

31.用户态切换到内核态的三种方式

a. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使 用操作系统提供的服务程序完成工作。比如用户程序使用fork()函数创建一个新进程的系统调用。

b. 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常,除0异常。

c. 外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。
比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值