操作系统面试题总结(2022最新版)_面试后端岗位,操作系统问什么-程序员宅基地

技术标签: 面试  Java面试总结  java  操作系统  后台  

关于作者
程序猿周周
️ 短视频小厂BUG攻城狮
如果文章对你有帮助,记得关注、点赞、收藏,一键三连哦,你的支持将成为我最大的动力

本文是《后端面试小册子》系列的第 4️⃣ 篇文章,该系列将整理和梳理笔者作为 Java 后端程序猿在日常工作以及面试中遇到的实际问题,通过这些问题的系统学习,也帮助笔者顺利拿到阿里、字节、华为、快手等多个大厂 Offer,也祝愿大家能够早日斩获自己心仪的 Offer。

标题 地址
MySQL数据库面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/122910606
Redis面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/122934938
计算机网络面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/122973684
操作系统面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/122994599
Linux面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/122994862
Spring面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123016872
Java基础面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123080189
Java集合面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123171501
Java并发面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123266624
Java虚拟机面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123412605
Java异常面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123462676
设计模式面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123490442
Dubbo面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123538243
Netty面试题总结(2022版) https://blog.csdn.net/adminpd/article/details/123564362

一、内核

1、什么是操作系统的内核?

2、内核态和用户态的区别?

  • 内核态:运行操作系统程序,几乎可以访问计算机的任何(硬件)资源
  • 用户态:运行用户应用程序

从用户态切换到内核态的常见方法:

  • 系统调用
  • 异常
  • 硬件中断

二、进程与线程

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。通俗点讲,进程是一段程序的执行过程,是个动态概念。

1、什么是僵尸进程以及如何避免?

僵尸进程 是子进程先于父进程退出后,子进程的 PCB 需要其父进程释放,但是父进程并没有释放子进程的 PCB,这样的子进程就称为僵尸进程。僵尸进程实际上是一个已经死掉但并未释放 PBC 的进程

清楚了僵尸进程的定义,我们再来了解一下它的产生。

  • 僵尸进程的产生

一个进程在调用 exit 命令结束自己的生命周期时,它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie) 的数据结构(系统调用 exit 的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在 Linux 进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。这个僵尸进程需要它的父进程来为它收尸,如果他的父进程没有处理这个僵尸进程的措施,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。

  • 僵尸进程的危害

如果有大量的僵尸进程驻在系统之中,必然消耗大量的系统资源。但是系统资源是有限的,因此当僵尸进程达到一定数目时,系统因缺乏资源而导致奔溃。所以在实际编程中,避免和防范僵尸进程的产生显得尤为重要。

  • 如何避免僵尸进程

1)父进程通过wait和waitpid等函数等待子进程结束;

2)使用signal函数为SIGCHLD安装handler;

3)父进程不关心子进程的结束,则交给内核处理;

4)fork两次,回收子进程,并将孙进程交给1号进程(initi进程)。

ref

2、什么是孤儿进程?

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程(pid=1)所收养,并由init进程对它们完成状态收集工作。

子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡。当父进程先于子进程死亡时,子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程。

但孤儿进程与僵尸进程不同的是,由于父进程已经死亡,系统会帮助父进程回收处理孤儿进程。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了。不会像僵尸进程那样占用 ID,损害运行系统。

3、进程和线程的区别?

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位

  • 进程有自己的独立地址空间,线程共享地址空间

  • 多进程程序更健壮,一个进程不会对其他进程造成影响

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据

  • 进程上下文切换开销大,线程开销小

有个形象的例子区分进程和线程:车间和工人或者高速路和车道。

4、什么是进程和线程的亲缘性?

进程/线程只在某个cpu核上运行,避免因切换带来的CPU的L1/L2 cache失效。

5、什么是协程?

协程是用户态的轻量级线程,是一种比线程更加轻量级的存在,协程不被操作系统内核管理,完全由程序控制。

协程的优点

1)没有线程切换开销;

2)单线程无需对共享资源加锁机制。

缺点也显而易见,就是无法利用多核资源。协程本质还是单线程,无法直接利用多核处理器,需要配合进程实现

ref

6、产生死锁的条件以及如何避免?

想知道死锁的产生,首先需要了解死锁的定义:多个进行相互等待对方资源,在得到所有资源继续运行之前,都不会释放自己已有的资源,这样造成了循环等待的现象,称为死锁。

四大必要条件
  • 资源互斥,不可共享

每个资源要么已经分配给了一个进程,要么是可用的,只有这两种状态,资源不可以被共享使用,所以所谓的互斥是指:资源不共享,如果被使用,只能被一个进程使用。

  • 占有和等待,请求并保持

已经得到资源的进程还能继续请求新的资源,所以个人觉得叫占有并请求也许更好理解。

  • 资源不可剥夺

当一个资源分配给了一个进程后,其它需要该资源的进程不能强制性获得该资源,除非该资源的当前占有者显示地释放该资源。

  • 循环等待

死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,环路上的每个进程都在等待下一个进程所占有的资源。

死锁处理
  • 如何预防死锁

破坏三个条件(互斥是非共享设备特性,无法更改)。

  • 如何避免死锁

避免指的是在资源动态分配过程中防止系统进入不安全状态,如银行家算法、系统安全状态法。

  • 死锁检测和解除

资源分配图、死锁定理、死锁解除。

ref

7、进程有哪些调度算法?

调度算法是指根据系统的资源分配策略所规定的资源分配算法。

  • 先来先服务(FCFS)

  • 短作业优先(SJF)

  • 时间片轮转(RR)

  • 优先级调度

ref

8、Java 线程的调度方式?

基于优先级的时间片轮转抢占式调度。

9、进程间有哪些通信方式?

1)管道 2)信号量(计数器) 3)信号(事件)

4)消息队列 5)共享内存 6)本地套接字

10、线程间的通信方式?

1)互斥量 2)信号量 3)事件

11、说一下 fork 函数?

创建一个和当前进程映像一样的进程可以通过 fork() 系统调用。

成功调用fork( )会创建一个新的进程,它几乎与调用fork( )的进程一模一样,这两个进程都会继续运行。在子进程中,成功的fork( )调用会返回0。在父进程中fork( )返回子进程的pid。如果出现错误,fork( )返回一个负值。

最常见的fork( )用法是创建一个新的进程,然后使用exec( )载入二进制映像,替换当前进程的映像。这种情况下,派生(fork)了新的进程,而这个子进程会执行一个新的二进制可执行文件的映像。这种“派生加执行”的方式是很常见的。

在早期的Unix系统中,创建进程比较原始。当调用fork时,内核会把所有的内部数据结构复制一份,复制进程的页表项,然后把父进程的地址空间中的内容逐页的复制到子进程的地址空间中。但从内核角度来说,逐页的复制方式是十分耗时的。现代的Unix系统采取了更多的优化,例如Linux,采用了写时复制的方法,而不是对父进程空间进程整体复制。

PS:通过 pthread_create() 函数创建线程。

12、如何理解一次调用两次返回?

fork() 函数是创建一个新进程, 它的返回值分别是子进程中返回 0,父进程返回子进程的进程号 (PID)。我们就可以通过 fork()函数的返回值识别父子进程。

其实,并不是一个函数有两个返回值,而是调用 fork 函数后,在内存中一个进程被复制成两个进程,分别被 cpu 执行. 那么执行出来肯定就会有两个结果。

ref

13、IO 模型?

  • 同步和异步:消息通信机制,同步需要用户线程轮询,异步为内核通知

  • 阻塞和非阻塞:程序在等待调用结果时的状态,操作方式

14、select、poll、epoll的原理与区别?

首先这三个函数都是 IO 多路复用的实现,IO多路复用就是多路 Socket 连接复用一个 IO 线程,即单个线程可以处理多个 IO 请求。其优点是系统不必创建和维护多进程/线程,从而大大减小了系统的开销。

ref
ref

三、内存

1、物理地址和逻辑地址的区别?

虚拟地址是指由程序产生的与段相关的偏移地址;

物理地址是指加载到内存地址寄存器中的地址,内存单元的真正地址。

ref

2、什么是虚拟内存?

虚拟内存是操作系统提供的一种内存管理技术,使得程序认为拥有连续可用的内存空间,而实际被分配到不同的物理内存碎片中。

3、说一下局部性原理?

  • 时间局部性

如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。

  • 空间局部性

一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。

4、内存有哪些管理机制?

内存管理可以简单的分为连续分配管理方式非连续分配管理方式这两种。

连续分配管理方式是指为一个用户程序分配一个连续的内存空间,比如块式管理。非连续分配管理方式允许一个程序内存分散,比如页式管理、段式管理和段页式管理

  • 块式管理: 远古时代的计算机操作系统的内存管理方式,将内存分为几个固定大小的块,每个块只包含一个进程,如果程序运行需要内存,操作系统就给它分配一块,如果程序运行只需要很小的空间,则分配的这块内存很大一部分就浪费了,这些在每个块中未被利用的空间,我们称为碎片。

  • 页式管理: 把主存分为大小相等且固定的一页一页的形式,页比较小,相对于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。

  • 段式管理: 页式管理虽然提高了内存利用率,但是其中的页没有任何实际意义,段式管理把主存分为一段一段 ,每一段的空间又比一页的空间小很多。但是段有实际意义,段式管理通过段表对应逻辑地址和物理地址。

  • 段页式管理: 段页式管理机制结合了段式管理和页式管理的优点,就是把主存分为若干段,每个段又分为若干页,也就是说段页式管理机制中段和段之间以及段的内部都是离散的。

ref

5、有哪些换页算法?

  • OPT(最佳页面置换算法)
  • FIFO(先进先出置换算法)
  • LRU(最近最久未使用页面置换算法)
  • LFU(最少使用页面置换算法)
  • CLOCK 时钟置换算法

PS:此时可能会让动手实现 LRU 算法,两种思路:

1)双链表 + Hash;

2)LinkedHashMap。

ref

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/adminpd/article/details/122994599

智能推荐

稀疏编码的数学基础与理论分析-程序员宅基地

文章浏览阅读290次,点赞8次,收藏10次。1.背景介绍稀疏编码是一种用于处理稀疏数据的编码技术,其主要应用于信息传输、存储和处理等领域。稀疏数据是指数据中大部分元素为零或近似于零的数据,例如文本、图像、音频、视频等。稀疏编码的核心思想是将稀疏数据表示为非零元素和它们对应的位置信息,从而减少存储空间和计算复杂度。稀疏编码的研究起源于1990年代,随着大数据时代的到来,稀疏编码技术的应用范围和影响力不断扩大。目前,稀疏编码已经成为计算...

EasyGBS国标流媒体服务器GB28181国标方案安装使用文档-程序员宅基地

文章浏览阅读217次。EasyGBS - GB28181 国标方案安装使用文档下载安装包下载,正式使用需商业授权, 功能一致在线演示在线API架构图EasySIPCMSSIP 中心信令服务, 单节点, 自带一个 Redis Server, 随 EasySIPCMS 自启动, 不需要手动运行EasySIPSMSSIP 流媒体服务, 根..._easygbs-windows-2.6.0-23042316使用文档

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链_原生jackson 反序列化链子-程序员宅基地

文章浏览阅读1.2k次,点赞27次,收藏7次。2023巅峰极客 BabyURL之前AliyunCTF Bypassit I这题考查了这样一条链子:其实就是Jackson的原生反序列化利用今天复现的这题也是大同小异,一起来整一下。_原生jackson 反序列化链子

一文搞懂SpringCloud,详解干货,做好笔记_spring cloud-程序员宅基地

文章浏览阅读734次,点赞9次,收藏7次。微服务架构简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])这么多小服务,他们之间如何通讯?这么多小服务,客户端怎么访问他们?(网关)这么多小服务,一旦出现问题了,应该如何自处理?(容错)这么多小服务,一旦出现问题了,应该如何排错?(链路追踪)对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们。_spring cloud

Js实现图片点击切换与轮播-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏20次。Js实现图片点击切换与轮播图片点击切换<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/ja..._点击图片进行轮播图切换

tensorflow-gpu版本安装教程(过程详细)_tensorflow gpu版本安装-程序员宅基地

文章浏览阅读10w+次,点赞245次,收藏1.5k次。在开始安装前,如果你的电脑装过tensorflow,请先把他们卸载干净,包括依赖的包(tensorflow-estimator、tensorboard、tensorflow、keras-applications、keras-preprocessing),不然后续安装了tensorflow-gpu可能会出现找不到cuda的问题。cuda、cudnn。..._tensorflow gpu版本安装

随便推点

物联网时代 权限滥用漏洞的攻击及防御-程序员宅基地

文章浏览阅读243次。0x00 简介权限滥用漏洞一般归类于逻辑问题,是指服务端功能开放过多或权限限制不严格,导致攻击者可以通过直接或间接调用的方式达到攻击效果。随着物联网时代的到来,这种漏洞已经屡见不鲜,各种漏洞组合利用也是千奇百怪、五花八门,这里总结漏洞是为了更好地应对和预防,如有不妥之处还请业内人士多多指教。0x01 背景2014年4月,在比特币飞涨的时代某网站曾经..._使用物联网漏洞的使用者

Visual Odometry and Depth Calculation--Epipolar Geometry--Direct Method--PnP_normalized plane coordinates-程序员宅基地

文章浏览阅读786次。A. Epipolar geometry and triangulationThe epipolar geometry mainly adopts the feature point method, such as SIFT, SURF and ORB, etc. to obtain the feature points corresponding to two frames of images. As shown in Figure 1, let the first image be ​ and th_normalized plane coordinates

开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先抽取关系)_语义角色增强的关系抽取-程序员宅基地

文章浏览阅读708次,点赞2次,收藏3次。开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先关系再实体)一.第二代开放信息抽取系统背景​ 第一代开放信息抽取系统(Open Information Extraction, OIE, learning-based, 自学习, 先抽取实体)通常抽取大量冗余信息,为了消除这些冗余信息,诞生了第二代开放信息抽取系统。二.第二代开放信息抽取系统历史第二代开放信息抽取系统着眼于解决第一代系统的三大问题: 大量非信息性提取(即省略关键信息的提取)、_语义角色增强的关系抽取

10个顶尖响应式HTML5网页_html欢迎页面-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏51次。快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间。不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源。鉴于网站模板的灵活性和强大的功能,现在广大设计师和开发者对html5网站的实际需求日益增长。为了造福大众,Mockplus的小伙伴整理了2018年最..._html欢迎页面

计算机二级 考试科目,2018全国计算机等级考试调整,一、二级都增加了考试科目...-程序员宅基地

文章浏览阅读282次。原标题:2018全国计算机等级考试调整,一、二级都增加了考试科目全国计算机等级考试将于9月15-17日举行。在备考的最后冲刺阶段,小编为大家整理了今年新公布的全国计算机等级考试调整方案,希望对备考的小伙伴有所帮助,快随小编往下看吧!从2018年3月开始,全国计算机等级考试实施2018版考试大纲,并按新体系开考各个考试级别。具体调整内容如下:一、考试级别及科目1.一级新增“网络安全素质教育”科目(代..._计算机二级增报科目什么意思

conan简单使用_apt install conan-程序员宅基地

文章浏览阅读240次。conan简单使用。_apt install conan