2023-04-11-操作系统面经面试总结--精华二十问--分类整理突击面试--概述进程内存文件IO其他--春招秋招
操作系统面经面试总结 | 精华二十问 | 分类整理突击面试 | 概述、进程、内存、文件IO、其他 | 春招秋招
操作系统面试题整理,多面经总结出出现 频率最高 的精华二十道题,类别分类整理(概述、进程、内存、文件IO、其他)方便复习,突击面试必备
目录
概述
1.什么是操作系统?操作系统的主要功能是什么? 操作系统位于计算机硬件和应用软件之间,负责协调和管理硬件资源的分配、控制和调度,提供对硬件的抽象和访问接口,以便应用程序能够运行并与硬件交互。 进程管理、内存管理、文件系统、输入输出 2.请大致描述操作系统的启动过程。 操作系统的启动过程包括硬件自检、引导加载程序加载、内核初始化、用户空间初始化、用户应用程序加载和运行等阶段。
- 上电自检(Power-On Self-Test, POST):当计算机电源被打开时,计算机硬件会进行自我检测,包括检测内存、CPU、硬盘、显示器等硬件设备,以确保它们正常工作。
- BIOS/UEFI初始化:计算机硬件自检完成后,BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)会被加载并初始化,它们是计算机的固件,负责初始化硬件设备、设置启动选项等。
- 引导加载程序(Boot Loader):BIOS/UEFI会从预定义的引导设备(通常是硬盘、光盘或网络)中加载引导加载程序,例如GRUB、LILO等,它负责加载操作系统的核心模块到内存中。
- 操作系统内核加载:引导加载程序会加载操作系统的内核模块到内存中,并将控制权交给操作系统的内核。
- 内核初始化:操作系统内核被加载后,会进行初始化,包括初始化设备驱动程序、建立进程管理、内存管理、文件系统等子系统。
- 用户空间初始化:操作系统内核初始化完成后,会创建一个或多个用户空间的进程,这些进程负责提供用户界面和用户应用程序的运行环境。
- 用户应用程序加载:用户空间的进程会加载用户应用程序到内存中,并开始执行用户应用程序。
- 用户应用程序运行:用户应用程序开始在操作系统的运行环境下执行,通过系统调用和内核交互来请求操作系统提供的服务和资源。 3.什么是系统调用?系统调用的作用是什么? 系统调用(System Call)是操作系统提供给用户态程序访问内核态功能和资源的 接口 。它允许用户态程序通过调用特定的系统调用函数来请求操作系统的服务和资源,例如文件操作、网络通信、进程管理、内存管理等。 当需要执行系统调用时,用户通过中断或异常从用户态切换到内核态,从而执行系统调用 4.多道程序设计、分时操作系统、实时操作系统是什么
- 多道程序:通过进程之间的相互切换,同时运行多个进程
- 分时操作系统:通过时间片轮转实现 多用户多程序 并发执行,用户之间的隔离和资源的共享。
- 实时操作系统:用于处理实时任务,硬实时(航空、医疗工业)、软实时 5.什么是中断?如何工作? 中断(Interrupt)是计算机系统中的一种事件,暂停当前指令,转向执行特定的中断程序 过程:
- 中断请求(外部IO、定时器、出现错误)
- 暂停当前保留进程现场
- 根据中断向量表定位中断处理程序入口,移交控制权
- 执行中断处理程序,清除中断标志位
- 恢复现场,继续执行原来程序 作用:中断的存在使得程序支持多任务处理、提高响应,控制硬件设备 6.什么是守护进程(Daemon Process),它在操作系统中的作用是什么? 守护进程是一种一直在后台运行的特殊类型的进程,用于提供服务和执行系统管理任务。维护系统的正常运行
进程
7.什么是进程控制块(PCB)?其主要作用是什么? CB保存了进程的基本信息,如进程ID(PID)、进程状态(如就绪、运行、阻塞等)、进程优先级、内存指针、CPU寄存器内容、进程的内存分配信息等,用于对进程进行管理和控制。 8.操作系统中进程和线程的区别 进程是指在操作系统中正在运行的一个程序的实例,它包括了程序的代码、数据和运行时的资源。每个进程都有独立的内存空间和系统资源,例如文件句柄、网络连接等。进程之间相互隔离,彼此独立运行,互不干扰。进程之间通过进程间通信(IPC)机制来进行数据交换和通信。 而线程是进程内的一个独立执行流,也是程序执行的最小单元。同一进程中的多个线程共享进程的内存空间和系统资源,包括文件句柄、网络连接等。线程之间可以通过共享内存来进行通信,因此线程间的通信更加高效。线程的切换开销较小,因此线程可以更快地响应用户请求。 总结:进程是独立的程序执行实体,拥有独立的内存空间和系统资源;而线程是进程内的执行流,共享进程的内存空间和系统资源,可以更快地进行通信和切换。 进程:独立、稳定;线程:资源共享(需要手动实现互斥)、响应快 9.什么是进程通信?进程通信的方式有哪些?
通信方式 | 优点 | 缺点 | 应用场景 |
---|---|---|---|
管道 | 简单易用,无需考虑同步问题。半双工,如果空了或者满了就会阻塞 | 只能用于具有亲缘关系的进程间通信 | 父子进程间通信 |
信号 | 传递简单信息,可靠性高,响应速度快。一个进程可以发送一个信号给另一个进程 | 只能传递整数值,不能传递复杂数据结构 | 进程间异步通信 |
信号量 | 一个计数器,可以用于同步和互斥,可靠性高 | 只能用于具有亲缘关系的进程间通信 | 进程间同步和互斥 |
消息队列 | 可以传递复杂数据结构,可靠性高,支持多对多通信 | 性能较差,需要内核支持 | 进程间异步通信 |
共享内存 | 传输速度快,可以直接访问共享内存区域,支持多对多通信 | 需要考虑同步和互斥问题,可能会出现死锁等问题 | 进程间大量数据交换 |
套接字 | 网络通信,支持不同主机之间的进程通信,支持多种协议和数据格式 | 实现较为复杂,性能较差 | 不同主机之间的进程通信 |
10.细说信号量: | |||
信号量可以解决资源间的共享和同步问题 | |||
资源共享: | |||
S表示资源数目,当多个资源时,AND机制 | |||
wait: s– if s < 0,线程加入等待队列 | |||
signal:s++ if s<=0, 唤醒等待队列 | |||
生产者消费者: |
// 定义两个信号量,用于控制缓冲区的空闲空间和数据项数量
Semaphore semEmpty = n; // 初始值为缓冲区的大小,表示空闲空间的数量
Semaphore semFull = 0; // 初始值为 0,表示数据项的数量
// 生产者进程
while (true) {
// 生成一个数据项
// ...
// 等待空闲空间,如果没有空闲空间则阻塞
wait(semEmpty);
// 将数据项放入缓冲区
// ...
// 增加数据项数量
signal(semFull);
}
// 消费者进程
while (true) {
// 等待数据项,如果没有数据项则阻塞
wait(semFull);
// 从缓冲区取出一个数据项
// ...
// 增加空闲空间数量
signal(semEmpty);
}
11.为什么操作系统需要进行进程调度,有哪些常见的进程调度算法? 为了充分利用 CPU 资源
- 先来先服务(First-Come, First-Served, FCFS):按照进程到达的先后顺序进行调度,即先到达的进程先被执行。
- 最短作业优先(Shortest Job Next, SJN):选择下一个执行的进程时,选择估计运行时间最短的进程。
- 优先级调度(Priority Scheduling):为每个进程分配一个优先级,优先级高的进程优先被调度执行。
- 时间片轮转法(Round Robin, RR):每个进程被分配一个固定的时间片(时间量),当时间片用完时,进程被挂起,下一个进程开始执行,被挂起的进程排队等待下一轮调度。
- 高响应比:1 + 等待时间/服务时间
- 多级反馈队列调度(Multilevel Feedback Queue Scheduling):多级队列,优先级高的时间短,进程在规定时间未完成则降到下一级
- 实时:
- 最早截止EDF(抢占、非抢占)
- 最低松弛度优先LLF(不得不开始时抢占CPU) 12.什么是死锁?如何避免和检测死锁? 各个进程或线程因争夺系统资源(如共享资源)而导致相互等待 互斥条件 请求与保持条件 不可剥夺条件 循环等待条件 处理方法 :
- 预防死锁 (一次性分配资源、允许抢占)
- 避免死锁 (银行家:在一次分配完后检查是否有安全序列能实现全部运行)
- 监测死锁 (资源分配图,分配完有没有环)
- 解除死锁 (资源剥夺、回滚进程、终止进程)
内存
13.内存管理的几个阶段?
- 单一连续分配 (单程序)
- 固定分区分配 (区域固定但大小不等,一个程序一个区) 分区表维护状态 存在 内部碎片 不能共享
- 动态分区分配 (根据进程大小分配,空闲表,空闲区由一个双向指针连接起来),存在 外部碎片 (太小没人用) 回收直接合并前后空闲区
- 分页管理 (离散) 1页1~8KB
- 分段管理
逻辑上
14.二级分页管理中,如何实现逻辑地址到物理地址的映射
15.什么是虚拟内存,概念及其实现原理,虚拟内存与物理内存的映射是怎么实现的? 概念:
- 虚拟内存:每个进程拥有自己的虚拟地址空间,包括代码段、数据段和堆栈段等,进程访问的地址都是虚拟地址,由进程的逻辑地址空间组成。
- 物理内存:实际的物理内存模块,用于存储正在执行的进程的数据和指令。 实现原理:
- 分页机制:将进程的虚拟地址空间划分为固定大小的页,同时将物理内存划分为对应大小的页框。每个页框可以存放一个页的数据或指令。
- 页表映射:每个进程都有自己的页表,用于记录其虚拟地址空间中每个页与物理内存中页框的映射关系。通过页表,操作系统可以实现虚拟地址到物理地址的映射。
- 页面置换:当物理内存不足以容纳所有进程所需的页时,操作系统会使用页面置换算法,将一些不活跃的页面置换到磁盘上,从而释放物理内存空间,用于加载其他进程的页面。
- 页面调度:当发生缺页时,抛出缺页中断,操作系统根据进程的访问模式和页的访问频率等信息,通过页面置换算法来决定将哪些页面调入物理内存,从而提高系统的性能。 16.操作系统中的页面置换算法有哪些
- 最佳置换算法 (理论算法、无法实现)
- 先进先出
- 最久未使用LRU 链表头尾
- 最少使用LFU(页面访问表 +1)
- Clock算法 (第一次置为零不换出,第二次=0则 换出)
文件IO
17.文件系统是什么?请讲解文件系统的常见类型及其特点 文件系统是操作系统中负责管理和组织文件的一部分,它提供了一种逻辑结构,用于在存储介质(如硬盘、闪存等)上存储和组织文件,以便用户可以方便地创建、读取、写入、删除、移动、复制和管理文件。 18.什么是磁盘调度算法?常见的磁盘调度算法有哪些?
- 先来先服务FCFS
- 最短寻道时间SSTF
- 电梯算法:电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
- CSCAN:单方向电梯
其他
19.请解释什么是死机和蓝屏,并解释它们在操作系统中的原因和处理方法。
- 死机:死机是指计算机在运行时突然停止响应,无法继续执行任何操作,屏幕上的图像和界面也无法更新。死机可能是由于 软件或硬件 故障引起的,例如程序错误、设备驱动问题、内存错误等。死机时,屏幕上的内容通常会被冻结在当前状态,无法进行任何操作。
- 蓝屏:蓝屏是指在Windows操作系统中出现严重错误时,屏幕会显示蓝色的错误信息界面,通常包含错误代码和错误信息。蓝屏通常由于 操作系统的关键组件 出现故障或冲突引起,例如驱动程序问题、硬件故障、系统文件损坏等。蓝屏时,计算机会自动崩溃并重启,屏幕上会显示蓝屏错误信息。 死机无提示信息,而蓝屏有;死机会冻结在当且页面,蓝屏会自动崩溃并重启; 20.介绍下常见的操作系统 常见的操作系统类型包括Windows、Linux和macOS。
- Windows:Windows是由微软公司开发的操作系统,广泛应用于个人计算机和企业环境。Windows操作系统以图形用户界面(GUI)为特点,提供了丰富的应用程序生态系统和广泛的硬件兼容性。Windows操作系统版本众多,包括Windows 10、Windows 8、Windows 7等,每个版本都有不同的特点和功能。
- Linux:Linux是一种自由和开放源代码的操作系统,基于UNIX的设计原则和哲学。Linux操作系统以稳定、安全和高度可定制性为特点,被广泛用于服务器、嵌入式系统、移动设备和超级计算机等领域。Linux有众多的发行版,如Ubuntu、CentOS、Debian等,每个发行版有其独特的特点和用途。
- macOS:macOS是由苹果公司开发的操作系统,专门设计用于苹果的Mac计算机。macOS以稳定、安全和用户友好的界面为特点,与苹果的硬件和软件紧密集成,提供了独特的用户体验和生产力工具。macOS有多个版本,如macOS Monterey、Big Sur、Catalina等,每个版本都有新的功能和改进。 这些操作系统之间的主要区别包括:
- 用户界面:Windows以图形用户界面(GUI)为主,macOS也是如此,而Linux则可以有多种用户界面选择,例如GNOME、KDE、XFCE等。
- 开放性:Linux是自由和开放源代码的操作系统,可以自由定制和修改,而Windows和macOS都是商业操作系统,不开放源代码。
- 应用程序生态系统:Windows和macOS拥有丰富的商业软件和应用程序生态系统,而Linux则以开源软件为主,应用程序生态系统相对较小。
- 硬件兼容性:Windows通常具有广泛的硬件兼容性,因为它是市场份额最大的操作系统之一,而macOS只能在苹果硬件上运行,Linux的硬件兼容性则因发行版和驱动支持而异。
- 安全性:Linux和macOS在安全性方面通常被认为较高,因为它们基于UNIX的安全设计原则,而Windows在过去一直面临着安全威胁和攻击的挑战。
- 社区支持:Linux拥有庞大的开源社区和支持系统,而Windows和macOS则主要依赖于厂商的官方支持。 68747470733a2f2f626c:6f672e6373646e2e6e65742f476f676f696e67676f696e672f:61727469636c652f64657461696c732f313330303930333136