面试操作系统八股文十问十答第三期

面试操作系统八股文十问十答第三期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)什么是用户态和内核态?

  • 用户态(User Mode):指操作系统中进程执行时的一种权限级别。在用户态下,进程只能访问受限资源和执行受限指令集,不能直接访问操作系统核心或硬件资源。这种限制是为了保护系统的稳定性和安全性。
  • 内核态(Kernel Mode):是操作系统的最高权限级别。在内核态下,进程可以直接访问操作系统核心功能和所有硬件资源。内核态允许操作系统执行特权指令,控制整个系统的运行状态。

切换用户态和内核态需要通过系统调用(System Call),这是从用户态进入内核态的唯一方式。

2)进程之间的通信方式有哪些?

进程间通信(IPC,Inter-Process Communication)是不同进程之间交换数据和信息的机制。常见的进程间通信方式包括:

  • 管道(Pipe):单向通信管道,用于具有父子关系的进程间通信。
  • 命名管道(Named Pipe):允许无关的进程通过文件系统进行通信。
  • 信号(Signal):用于通知接收进程发生了某种事件。
  • 消息队列(Message Queue):允许进程通过消息传递进行通信,消息具有格式和类型。
  • 共享内存(Shared Memory):多个进程共享同一块内存区域,进程可以直接读写共享内存。
  • 信号量(Semaphore):用于多进程对共享资源的访问控制,可以用来实现进程同步。
  • 套接字(Socket):用于不同计算机或同一计算机上的进程之间进行通信,通常用于网络通信。

3)进程有哪几种状态?

进程在操作系统中可以处于多种不同的状态,常见的进程状态包括:

  • 创建态(Created):进程正在被创建,但尚未开始执行。
  • 就绪态(Ready):进程已经准备好执行,等待分配处理器时间。
  • 运行态(Running):进程正在执行指令,占用处理器资源。
  • 阻塞态(Blocked):进程因等待某事件(如I/O操作完成、信号到达)而暂时停止执行。
  • 终止态(Terminated):进程已经执行完成,即将被操作系统释放和清理。

这些状态在操作系统的进程调度和管理过程中不断转换,通过调度算法控制进程的执行顺序和资源分配,以实现系统的有效管理和优化。

4)什么是软中断、什么是硬中断?

在操作系统和计算机体系结构中,中断是一种机制,用于在程序执行期间暂停当前的任务,转而执行处理器预定义的另一个任务。中断可以分为软中断和硬中断:

  • 软中断(Software Interrupt) :由软件(操作系统或程序)生成的中断信号,用于请求操作系统执行特定的服务或程序。软中断可以通过系统调用(例如Unix系统中的int 0x80)或者异常(例如除零异常)的形式触发。软中断通常是非异步的,即在执行中断之前,程序需要显式地指示要进行中断处理。
  • 硬中断(Hardware Interrupt):由硬件设备(如定时器、输入输出设备)发出的中断信号,通知处理器发生了某些事件需要处理。硬中断是异步的,处理器在接收到硬件中断信号后,会立即中断当前任务,保存上下文,然后转去执行中断处理程序。

5)进程的调度算法你知道吗?

进程调度算法是操作系统中用来决定哪些进程在何时执行的一种策略。常见的进程调度算法包括:

  • 先来先服务(First Come, First Served, FCFS):按照进程到达的顺序进行调度,非抢占式。
  • 最短作业优先(Shortest Job Next, SJN):选择执行时间最短的进程优先执行,非抢占式。
  • 最短剩余时间优先(Shortest Remaining Time Next, SRTN):每次选择剩余执行时间最短的进程执行,抢占式。
  • 时间片轮转(Round Robin, RR):每个进程被分配一个时间片,时间片用完后,进程被暂停,被放到就绪队列的尾部,等待下一个时间片,非抢占式。
  • 优先级调度(Priority Scheduling):根据进程的优先级来调度,优先级高的进程优先执行,可能是抢占式或非抢占式。
  • 多级反馈队列调度(Multilevel Feedback Queue, MLFQ):将就绪队列分为多个队列,每个队列有不同的优先级,进程根据其运行情况在不同队列之间移动,结合了时间片轮转和优先级调度的特点。

6)什么是分段、什么是分页?

  • 分段(Segmentation):分段是一种内存管理技术,将逻辑地址空间划分为若干段,每段可以有不同的长度和属性。每个段都有自己的基地址和界限(长度),逻辑地址由段名和段内偏移量组成。分段可以提供更好的程序结构和数据共享机制,但会导致内存碎片问题。
  • 分页(Paging):分页是另一种内存管理技术,将物理内存和逻辑地址空间划分为固定大小的页面(通常为4KB或者更大)。逻辑地址由页号和页内偏移量组成,页号用于查找页表,以获取对应的物理页面框的地址。分页可以有效地管理内存碎片,但增加了页表管理的开销。

总结:

  • 分段适合变长程序段的管理和保护,提高了程序的逻辑结构性和数据共享性。
  • 分页适合管理物理内存的分配和保护,简化了内存碎片问题,但增加了页表管理的复杂度。

7)零拷贝你知道吗?

零拷贝(Zero-copy)是一种优化技术,旨在减少数据在内存和设备之间的复制次数,从而提高数据传输的效率和性能。传统的数据传输方式中,数据通常需要在应用程序的用户空间和操作系统内核空间之间进行多次拷贝(例如从应用程序到内核缓冲区,再到网络设备)。零拷贝技术通过避免这些不必要的数据复制,直接在内核空间或者设备间传输数据,从而减少了数据传输的延迟和CPU资源消耗。常见的零拷贝实现方式包括使用内存映射(mmap)、直接内存访问(DMA)和发送文件描述符等。

8)说下你常用的 Linux 命令?

常用的 Linux 命令包括但不限于:

  • 文件和目录操作: ls(列出目录内容),cd(改变目录),pwd(显示当前工作目录),mkdir(创建目录),cp(复制文件或目录),mv(移动文件或目录),rm(删除文件或目录)等。
  • 文件内容查看和编辑: cat(显示文件内容),less(逐页显示文件内容),headtail(显示文件头部和尾部内容),nanovim(编辑文件)等。
  • 系统信息和状态查看: top(查看系统资源使用情况),ps(显示当前进程状态),df(显示磁盘空间使用情况),du(显示目录空间使用情况),uname(显示系统信息)等。
  • 网络相关: ping(测试网络连接),ifconfigip(显示和配置网络接口信息),netstat(显示网络连接、路由表等),ssh(远程登录)等。
  • 权限和用户管理: chmod(修改文件权限),chown(修改文件拥有者),sudo(以超级用户权限执行命令),useradduserdel(添加和删除用户)等。

9)I/O到底是什么?

I/O(Input/Output,输入/输出)是指计算机与外部设备之间的数据交换过程。在计算机系统中,I/O操作包括从设备(如硬盘、键盘、鼠标、网络接口等)读取数据到计算机内存或者将数据从内存写入到设备。

I/O 可以分为两类:

  • 阻塞式 I/O: 应用程序发起一个 I/O 操作后,如果操作不能立即完成(例如等待数据从硬盘读取或等待网络数据包到达),则应用程序会被阻塞,直到 I/O 操作完成。
  • 非阻塞式 I/O: 应用程序发起一个非阻塞 I/O 操作后,即使操作不能立即完成,应用程序也可以继续执行其他任务,定期检查 I/O 操作是否完成。

10)为什么网络 I/O 会被阻塞?

网络 I/O 可能被阻塞的主要原因包括:

  • 数据传输速度慢: 网络传输受限于带宽、延迟等因素,导致数据不能立即到达或离开网络接口。
  • 接收方缓冲区满: 当接收方缓冲区已满时,网络设备无法接收更多的数据包,发送方的数据传输就会被阻塞。
  • 发送方缓冲区满: 当发送方缓冲区已满时,发送方无法继续发送数据,从而导致发送的网络 I/O 操作被阻塞。
  • 网络拥塞: 网络拥塞时,数据包可能会在网络中排队等待传输,从而增加了数据传输的延迟,导致网络 I/O 操作被阻塞。

解决网络 I/O 阻塞的方法包括使用非阻塞式 I/O、多线程或多进程处理 I/O 操作、使用异步 I/O 模型(如事件驱动的网络编程),以及优化网络传输环境(如增加带宽、减少网络延迟等)。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1500+ Star,2W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

相关推荐
工业3D_大熊3 分钟前
【虚拟仿真】CEETRON SDK在船舶流体与结构仿真中的应用解读
java·python·科技·信息可视化·c#·制造·虚拟现实
lzb_kkk12 分钟前
【JavaEE】JUC的常见类
java·开发语言·java-ee
gavin_gxh14 分钟前
ORACLE 删除archivelog日志
数据库·oracle
一叶飘零_sweeeet17 分钟前
MongoDB 基础与应用
数据库·mongodb
猿小喵33 分钟前
DBA之路,始于足下
数据库·dba
爬山算法35 分钟前
Maven(28)如何使用Maven进行依赖解析?
java·maven
tyler_download42 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
2401_857439691 小时前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节