【面试题】操作系统面试实战

news2024/11/19 16:32:55

version:1.0

文章目录

  • 操作系统
    • 进程管理
      • 🙎‍♂️面试官:进程和线程的区别?
      • 🙎‍♂️面试官:进程有哪几种状态?
      • 🙎‍♂️面试官:进程间的通信方式?
      • 🙎‍♂️面试官:线程间的同步的方式?
      • 🙎‍♂️面试官:什么是PCB?
      • 🙎‍♂️面试官:进程的调度算法?
      • 🙎‍♂️面试官:什么是死锁?死锁的四个必要条件,解决死锁的方法
    • 内存管理
      • 🙎‍♂️面试官:常见的内存管理机制?
      • 🙎‍♂️面试官:这两种机制的内存碎片问题了解吗?
      • 🙎‍♂️面试官:分段机制和分页机制的共同点和区别?
      • 🙎‍♂️面试官:分段机制和分页机制下的地址翻译过程分别是怎样的?
      • 🙎‍♂️面试官:单级页表有什么问题?为什么需要多级页表?
      • 🙎‍♂️面试官:TLB 有什么用?使用 TLB 之后的地址翻译流程是怎样的?
    • 调度算法
      • 🙎‍♂️面试官:页缺失,常见的页面置换算法有哪些?
      • 🙎‍♂️面试官:硬链接和软链接有什么区别?
      • 🙎‍♂️面试官:常见的磁盘调度算法有哪些?

在这里插入图片描述

操作系统

进程管理

🙎‍♂️面试官:进程和线程的区别?

🙋‍♂答:

进程就是运行中的程序;线程就是进程中一条执行流程。
两者区别如下:

  1. 进程是资源(比如内存)分配的基本单位;线程是CPU调度的基本单位。
  2. 线程的时间效率和空间效率都要比进程高。当一个进程内有多个线程时,线程会共享虚拟内存和全局变量,线程独享寄存器,栈等必不可少的资源。

🙎‍♂️面试官:进程有哪几种状态?

🙋‍♂答:

  • 创建状态(new):进程正在被创建时的状态;
  • 运行状态(Running):该时刻进程占用 CPU;
  • 就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;
  • 阻塞状态(Blocked):该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,它也无法运行;
  • 结束状态(Exit):进程正在从系统中消失时的状态;

Java中还存在等待和超时等待状态。
调用sleep,或者带时间的wait,会进入超时等待(TIME_WAITING)的状态。
调用wait,或者join,会进入等待(WAITING)状态。在这个状态,线程需要被显式的唤醒。

🙎‍♂️面试官:进程间的通信方式?

🙋‍♂答:

  1. 管道传输。提供一种进程间单向通信的方式,一个进程作为写入端,另一个进程作为读取端。所谓的管道,就是内核里面的一串缓存。从管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。
  2. 消息队列。是保存在内核中的消息链表,相比于管道可以自定义消息类型。
  3. 共享内存。分配一个共享空间,每个进程都可以互相通信。可以减少消息队列中从用户态到内核态切换带来的开销。
  4. 信号量。信号量可以保证只有一个进程访问共享资源,本质是一个计数器,表示资源个数。信号量可以通过P操作和V操作来控制。
  5. 信号。对于异常情况下的工作模式,就需要用「信号」的方式来通知进程。 例如, SIGTERM 信号,就是终止进程的意思。
  6. Socket。用于不同主机进程之间的通信。

🙎‍♂️面试官:线程间的同步的方式?

🙋‍♂答:

所谓同步,就是并发进程/线程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程/线程同步。

  • 信号量。信号量是一种计数器,表示资源的个数。如果资源个数小于0,则当前线程需要等其他线程释放资源后才能继续执行。
  • 自旋锁。如果拿不到资源就一直自旋。通过CPU提供的CAS函数来实现。
  • 互斥锁。互斥锁加锁失败就释放CPU给其他线程,当锁被释放,内核在把CPU切换给该线程。

🙎‍♂️面试官:什么是PCB?

🙋‍♂答:

PCB是进程控制块,用来描述进程。一个进程存在,必然会有一个PCB,如果进程消失,那么PCB也会消失。

PCB具体包含的信息有如下几个:

  • 进程描述信息: 进程标识符、用户标识符;
  • 进程控制和管理信息: 进程当前状态;进程优先级:进程抢占 CPU 时的优先级;
  • CPU 相关信息: CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便进程重新执行时,能从断点处继续执行。

PCB通过链表进行组织,把具有相同状态的进程链在一起,组成各种队列。比如:

  • 将所有处于就绪状态的进程链在一起,称为就绪队列
  • 把所有因等待某事件而处于等待状态的进程链在一起就组成各种阻塞队列

🙎‍♂️面试官:进程的调度算法?

🙋‍♂答:

  • 先来先服务,顾名思义,就是按照顺序从就绪队列中取出进程,但是对于短作业不利;
  • 最短作业优先,选择运行时间最短的进程;
  • 高相应比优先,在进程调度时计算相应比,相应比最高的进程先执行。
  • 时间片轮转:每个进程分配一个时间片,时间片用完,就释放CPU。
  • 最高优先级:选择优先级最高的先运行,优先级随着时间的推移会上升。
  • 多级反馈队列:有多个队列,队列的优先级从高到底,优先级越高分配的时间片越短;短作业会在第一梯队率先完成,长作业即使没有完成,可以移入下次队列执行,即使等待时间上升,但是执行的时间也变长了。比较好的兼顾了长作业和短作业。

🙎‍♂️面试官:什么是死锁?死锁的四个必要条件,解决死锁的方法

🙋‍♂答:

多进程系统中,进程之间为了争夺资源而陷入无限的等待状态,导致它们都无法继续执行,就表示发生了死锁。

死锁只有同时满足以下四个条件才会发生:

  • 互斥条件;
  • 持有并等待条件;
  • 不可剥夺条件;
  • 环路等待条件。

解决死锁问题,破坏其中一个条件即可:

  • 破坏请求于保持条件:要求进程一次性获取所有需要的资源,如果不能获取到所有资源,就释放已经获得的资源,等待重新获取全部资源。
  • 破坏循环等待条件:多个线程获取资源的顺序一致。线程A先去获取资源A,之后去获取资源B。线程B以同样的顺序访问资源。

内存管理

🙎‍♂️面试官:常见的内存管理机制?

🙋‍♂答:

  • 分段机制:程序可以分为代码段、堆段、栈段、数据段若干个逻辑分段。所以分段机制就把虚拟内存用分段的形式将这些段分离出来。
  • 分页机制:将虚拟内存空间分成一页页连续的固定尺寸的大小。

🙎‍♂️面试官:这两种机制的内存碎片问题了解吗?

🙋‍♂答:

  • 分段机制存在外部内存碎片的问题。因为每个段的大小不固定,所划分出的内存空间不一定是连续的。这样就可能会出现新的程序没办法加载的问题。
    • 解决外部内存碎片就需要内存交换,将程序swap到硬盘中,接着装载到被占用的内存后面。如果swap的内存很大,就会出现性能问题。
  • 分页机制存在内部内存碎片的问题。因为每个页的大小都是固定好的,但是程序可能不足一个页,这样就会造成内存浪费。
    • 内存空间不足,触发swap机制,一次性写入磁盘的也就是少数的几个页,性能要比分段机制更好。

🙎‍♂️面试官:分段机制和分页机制的共同点和区别?

🙋‍♂答:

共同点:

  • 都是非连续的内存管理机制。
  • 都采用了地址映射的方法,将虚拟地址映射到物理地址,实现对内存的保护。

区别:

  • 虚拟地址和物理地址的转化方式不同。
    • 分段机制使用段表【段基地址 + 段界限】、分页机制使用页表【虚拟页号 + 物理页号对应】。
  • 内存不足时,触发swap机制的交换效率不同。
  • 页是物理单位,根据物理地址的内存划分实际大小。段是逻辑单位,每个程序不同。

🙎‍♂️面试官:分段机制和分页机制下的地址翻译过程分别是怎样的?

🙋‍♂答:

  • 分段机制下的虚拟地址由段选择因子 + 段内偏移量 两部分组成。段选择因子中的段号作为段表的索引。
    • 段表中保存段基地址,段基地址 + 段内偏移量就是物理内存地址。
  • 分页机制下的虚拟地址由 虚拟页号 + 页内偏移量 两部分组成。虚拟页号作为页表的索引。
    • 页表中保存虚拟页号与物理页号的映射关系。物理页号 + 页内偏移量就是物理内存地址。

🙎‍♂️面试官:单级页表有什么问题?为什么需要多级页表?

🙋‍♂答:

单页表的缺陷:

  • 内存占用。假设进程拥有的虚拟内存地址的空间4GB(232),系统页的大小为4KB(212),那么分配的页有100万个(220)。因为页表必须要覆盖到所有的虚拟地址空间。所以同时也需要100万个页表项,每个页表项占用4字节,那么页表大小就是4MB。一个进程就会消耗4MB的内存。

多级页表的好处:

  • 多级页表中,一级页表就可以映射到所有的虚拟地址空间。如果某个一级页表的页表项没有用到,就不需要创建页表项对应的二级页表。这样就会节省很多空间。

🙎‍♂️面试官:TLB 有什么用?使用 TLB 之后的地址翻译流程是怎样的?

🙋‍♂答:

TLB(Translation Lookaside Buffer)是页表缓存。TLB存在的理由如下:

  • 因为程序是遵循局部性原理的,经常访问的内存是有空间局部性的。利用这个特性,我们可以把经常访问的页表存储到CPU的Cache中,这个Cache就是TLB。

使用TLB后地址翻译流程:

  • CPU中的MMU(内存管理单元)负责进行虚拟地址到物理地址的转换和TLB的访问。有了TLB后,在CPU进行寻址时,会先查TLB,如果没找到,才会继续查常规的页表。TLB 的命中率其实是很高的,因为程序最常访问的页就那么几个。

调度算法

🙎‍♂️面试官:页缺失,常见的页面置换算法有哪些?

🙋‍♂答:

页面置换算法的功能是:当CPU发现虚拟地址在页表中查不到时,会发生缺页异常,需要将页换入到内存中,如果内存满,需要将内存中的页面置换出来,此时就需要页面置换算法。

法的目标是,尽可能减少页面的换入换出的次数,常见的页面置换算法有如下几种:

  • 最佳页面置换算法(OPT):是一种理想情况,每次换出未来最长时间不访问的页面

  • 先进先出置换算法(FIFO):每次换出在内存中驻留时间最长的页面。

  • 最近最久未使用的置换算法(LRU):每次换出最久没有访问的页面。与最佳页面置换算法思想类似,前者考虑未来的情况,LRU考虑历史的情况。

  • 时钟页面置换算法(Lock):表针会检查页表的访问位,访问位为0就把该页淘汰出内存,插入新的页面。访问位为1,就把访问位置为0,继续往下,寻找访问位为0的页表。

  • 最不常用置换算法(LFU):每次换出访问次数最少的页面。但是这个算法没有考虑时间的问题,可能一个页表过去的访问次数高,但是最近不访问了,但是也不会换出。

🙎‍♂️面试官:硬链接和软链接有什么区别?

🙋‍♂答:

在 Linux 中可以通过硬链接(Hard Link软链接(Symbolic Link 的方式来实现访问文件,可以让文件有多个不同的有效路径名。

  • 硬链接是多个目录项中的节点指向同一个文件,也就是指向同一个inode【index node:包含文件的元信息】。
    不同的文件系统inode不同,所以硬链接不能跨越文件系统。
    由于多个目录项都是指向一个 inode,那么只有删除文件的所有硬链接以及源文件时,系统才会彻底删除该文件。

    ln file1 inode
    # file1 硬链接到inode
    
  • 软链接相当于重新创建一个文件,但是这个文件的内容是另外一个文件的路径,类似于快捷方式。
    软连接创建不同的inode,可以跨文件系统。
    即使源文件删除,软连接也还会存在,只不过是指向的文件找不到了而已。

🙎‍♂️面试官:常见的磁盘调度算法有哪些?

🙋‍♂答:

磁盘的调度算法通过优化磁盘的访问请求顺序,来优化磁盘的性能。常见的磁盘调度算法有以下几种:

  • 先来先服务算法:顾名思义,但是如果大量进程竞争使用磁盘,请求访问的磁道可能会很分散,那先来先服务算法在性能上就会显得很差,因为寻道时间过长。
  • 最短寻道时间优先算法:优先访问最短寻道距离的请求。对于某些请求可能产生饥饿,磁头可能只在一定范围内来回移动。
  • 扫描算法:一开始就向一边移动,到头之后向另一边移动。每个磁道的响应频率有差异,中间磁道的响应频率会相对较高。
  • 循环扫描算法:一开始就向一边移动,到头之后迅速复位磁头,返回途中不处理任何请求,因为磁道只扫描一边的请求,这样可以使得每个磁道的扫描频率一致。
  • LOOK 与 C-LOOK 算法:对两个扫描算法的优化,不需要移动到磁盘的最始段和最末端,只需要移动到最远的请求位置即可。

完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

体验使用 InsCode AI 创作助手 来帮我完成一篇博客

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 InsCode AI 创作助手 它来啦回答不满意可以要求重新生成在输入 prompt 时&#…

Selenium2023最全攻略(元素操作,浏览器操作等)附完整代码!

一、元素操作方法 方法: 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法 注意:在输入方法之前一定要清空操作!! # 导包 from time import sleep from selenium import webdriver # 实例化浏览器 driver webdriver.Chrome(…

XDP入门--之eBPF sample内核示例代码的编译

Linux内核代码提供了很多eBPF的示例代码(以linux6.1版本内核代码为例),我们可以在/Linux/samples/bpf目录下找到示例代码。 1、查看Linux内核版本 本文不讨论交叉编译的情况,因为eBPF还在快速发展中,不同版本的Linux内核的支持情况不太一至…

网络安全就业有什么要求?一般人还真不行

前言 网络安全工程师又叫信息安全工程师。随着互联网发展和 IT 技术的普及,网络和 IT 已经日渐深入到日常生活和工作当中,社会信息化和信息网络化,突破了应用信息在时间和空间上的障碍,使信息的价值不断提高。但是与此同时&#…

接口自动化框架(Pytest+request+Allure)

前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种&#xff0c…

程序员职业病之中医颈椎痛缓解办法

✨求关注~ 😀博客:www.protaos.com 治疗颈椎病的穴位按摩是一种传统中医疗法,可以缓解颈椎病引起的疼痛和不适。下面是关于五个常用穴位的介绍、取穴定位、按摩方法和功效主治的总结: 人体穴位图 穴位图 1. 揉捏风池穴&#xf…

Linux 备份要点

文章目录 Linux 备份要点确定备份的目录和文件备份的种类、频率与工具的选择完整备份增量备份差异备份镜像备份 定期备份远程备份的脚本使用rsync上传备份数据 Linux 备份要点 在Linux系统中,备份数据是非常重要的,特别是在生产环境中。以下是Linux备份…

【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法

💯 博客内容:【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信&…

Hadoop HA(高可用)搭建

ZooKeeper配置 解压安装 添加ZK环境变量 分发文件 启动 安装配置 Hadoop 解压安装 修改hadoop-env.sh文件 修改Hadoop配置文件core-site.xml HDFS 配置文件hdfs-site.xml MapReduce 配置文件 mapred-site.xml YARN 配置文件yarn-site.xml 配置worekers 分发配…

Nginx配置文件

四.Nginx配置 1.位置 /usr/local/nginx/conf/nginx.conf2.内容 Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可…

基于3.0.0-cdh6.3.2版本编译Flink1.14.4

一、背景 异常描述 CDH-6.3.2环境下使用Flink-1.14.4的FlinkSQL的hive方言时出现如下异常 java.lang.Runtimelxception: java,lang.IllegalArgumentException: Unrecoonized Hadoop major version number: 3.0.0-cdh6.2.1 问题说明 开源社区hive 2.x的版本这种情况下是不支…

Java时间类(十一) -- Date类工具类 -- Java获取当天、本周、本月、本年 开始及结束时间

目录 1. 今天的日期如下: 2. DateUtils工具类的源代码: 3. 测试类 1. 今天的日期如下:

React Hooks useRef 源码解读+最佳实践

参考:https://juejin.cn/post/7027949526170206239 入口 下篇文章有入口源码详解,想看的可以跳转过去,这里就不放源码了,简单梳理一下流程吧 React Hooks useState 使用详解实现原理源码分析 流程 beginWork 判断组件类型&#x…

SpringCloud(26):系统自适应保护实现

Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可…

ACP(MaxCompute篇)-MaxCompute自定义函数开发

概述 数据映射关系 自定义函数 相关资料 【MaxCompute】实现自定义UDF、UDTF详解_maxcompute 自定义函数_beautiful_huang的博客-CSDN博客 UDF UDTF UDAF 函数发布 test11_123>add jar C:\Users\zhang\Desktop\相关电子书\test\target\test-1.jar -f; OK: Resource tes…

Linux 分布式版本控制系统git

目录 什么是git? 安装git 创建版本库 工作区和版本库、 向版本库中添加文件 版本回退 远程操作 什么是git?  Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 linux是一个开源软件,第一版本&am…

【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)

Maven介绍 由于Java的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以jar包的形式出现的,例如Spring,SpringMVC、MyBatis、数据库驱动,等等,都是以jar包的形式出现的&#xff0…

华为OD机试之完美走位(Java源码)

完美走位 题目描述 在第一人称射击游戏中,玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位。 假设玩家每按动一次键盘,游戏任务会向某个方向移动一步,如果玩家在操作一定次数的键…

Eureka 心跳和服务续约源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月25日 🍊 点…

【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析 一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统系列文章汇总见:《【SA8295P…