【Java实习生】每日面试题打卡——操作系统篇

article/2025/10/25 17:40:23
  • 临近秋招,备战暑期实习,祝大家每天进步亿点点!Day15
  • 本篇总结的是 操作系统 相关的面试题,后续会每日更新~

在这里插入图片描述


1、请分别简单说一说进程和线程以及它们的区别?

  • 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
  • 包含关系:一个进程最少由一条线程组成。
  • 所处环境区别:在操作系统中能同时运行多个进程(程序);而在同一个进程中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)。
  • 内存分配:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

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

  • 管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  • 命名管道FIFO:未命名的管道只能在两个相关的进程之间通信,通过命名管道FIFO,不相关的进程也能交换数据。
  • 消息队列
    • 消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。
    • 消息队列允许一个或多个进程向它写入与读取消息。
    • 管道和命名管道的通信数据都是先进先出原则,消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取,比FIFO更有优势。
  • 共享内存:共享内存是允许一个或多个进程共享的一块内存区域。
  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。

3、线程同步的方式有哪些?

  • 互斥量 Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
  • 信号量 Semphare:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
  • 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作

4、进程的状态及其转换

进程的状态有:就绪状态、运行状态、阻塞状态。

进程状态间的转换关系为:


5、Java线程的状态

Java 线程有以下几个状态:

  • 新建状态(New)
  • 就绪状态(Runnable)
  • 运行状态(Running)
  • 阻塞状态(Blocked):
    • 等待阻塞
    • 同步阻塞
    • 其他阻塞
  • 死亡状态(Dead)

6、进程的调度算法有哪些?

  • 先来先服务算法
  • 短作业优先算法
  • 优先权调度算法
  • 时间片轮转调度算法

参考文章:几个常用的操作系统进程调度算法


7、死锁产生的原因,死锁产生的必要条件是什么,如何预防死锁,如何避免死锁?

**死锁产生的原因:**资源竞争、进程推进顺序不当。

死锁产生的四个必要条件:

  • 互斥:某个资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问了,直到该进程访问结束。
  • 不可剥夺:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,只能由获得该资源使用权的进程释放资源。
  • 占有且等待:一个进程请求某个资源并将其占有,即使该进程被阻塞了,也不会释放占有的资源。
  • 循环等待:若干进程之间形成一种头尾相接的环形循环等待链。

**预防死锁:**破坏产生死锁的四个必要条件之一即可。

死锁的解除:

  • 强制性地从系统中撤销一个或多个死锁的进程以断开循环等待链。
  • 强制性抢占死锁进程正在争取的资源以解除死锁。

8、进程、线程的上下文切换

进程上下文切换:

一个进程切换到另一个进程运行,称为进程的上下文切换。进程是由内核管理和调度的,所以进程的切换只能发生在内核态。

线程上下文切换:

多线程编程中一般线程的个数都大于CPU核心的个数。

但一个线程时间片用完后,会重新处于就绪状态并让给其他线程使用,这个过程属于一次上下文切换。

概括:当前任务在执行完CPU时间片切换到另一个任务前会保存自己的状态,以便下一次再切换回这个任务时,可以再加载这个任务的状态。


9、操作系统的内存管理机制了解吗?内存管理有哪⼏种⽅式?

  • 块式管理:远古时代的计算机操系统的内存管理⽅式。将内存分为⼏个固定⼤⼩的块,每 个块中只包含⼀个进程。如果程序运⾏需要内存的话,操作系统就分配给它⼀块,如果程序 运⾏只需要很⼩的空间的话,分配的这块内存很⼤⼀部分⼏乎被浪费了。这些在每个块中未 被利⽤的空间,我们称之为碎⽚。
  • ⻚式管理:把主存分为⼤⼩相等且固定的⼀⻚⼀⻚的形式,⻚᫾⼩,相对相⽐于块式管理的 划分⼒度更⼤,提⾼了内存利⽤率,减少了碎⽚。⻚式管理通过⻚表对应逻辑地址和物理地址。
  • 段式管理:⻚式管理虽然提⾼了内存利⽤率,但是⻚式管理其中的⻚实际并⽆任何实际意 义。 段式管理把主存分为⼀段段的,每⼀段的空间⼜要⽐⼀⻚的空间⼩很多 。但是,最重 要的是段是有实际意义的,每个段定义了⼀组逻辑信息,例如,有主程序段 MAIN、⼦程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。

10、 CPU 寻址了解吗?为什么需要虚拟地址空间?

处理器使⽤的是⼀种称为虚拟寻址的寻址⽅式。使⽤虚拟寻址,CPU 需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有⼀个被称为内存管理单元 的硬件。


11、什么是用户态和核心态?

在计算机系统中,分两种程序:系统程序和应用程序,为了保证系统程序不被应用程序有意或无意地破坏,为计算机设置了两种状态——用户态、核心态。

  • 用户态:只能受限的访问内存,运行所有的应用程序。
  • 核心态:运行操作系统程序,CPU 可以访问内存的所有数据,包括外围设备。

12、操作系统内存管理方式,分页分段以及段页式的优缺点?

内存管理方式:块式管理、页式管理、段式管理、段页式管理。

分段管理:

  • 在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

分页管理

  • 在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的页框,程序加载时,可以将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

段页式管理

  • 段⻚式管理机制结合了段式管理和⻚式管理的优点。简单来说段⻚式管理机制就是把主存先分成若⼲ 段,每个段⼜分成若⼲⻚,也就是说 段⻚式管理机制 中段与段之间以及段的内部的都是离散的。

13、讲一讲操作系统的I/O模型?什么是I/O多路复用?

I/O请求有两个阶段:

  • 等待资源阶段:I/O请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
  • 使用资源阶段:真正进行数据接收和发送。

在等待数据阶段,I/O分为 阻塞I/O 模型 和 非阻塞I/O 模型:

  • 阻塞I/O 模型: 资源不可用时,I/O请求一直阻塞,直到反馈结果(有数据或超时)。
  • 非阻塞I/O 模型:资源不可用时,I/O请求不会被阻塞,直接返回数据标识资源不可用。但是进程会不停的去轮询检测资源是否可用。

在使用资源阶段,I/O分为 同步I/O 模型 和 异步I/O 模型。

  • 同步I/O 模型:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败结果。
  • 异步I/O 模型:应用发送或接收数据后立刻返回,数据写入操作系统缓存,由操作系统完成数据发送或接收,并返回成功或失败的信息给应用。

I/O多路复用(I/O复用模型):

  • I/O 多路复用可以同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写。

正因为阻塞I/O只能阻塞一个I/O操作,而I/O复用模型能够阻塞多个I/O操作,所以才叫做多路复用

14、什么是生产者消费者模型?

对于生产者:

  • 在操作系统中,生产者生产一条数据,首先查看缓冲区能否放入数据,有没有空的位置,如果有往下执行,否则说明缓冲区全满了,消费者还没有及时的来消费数据。这时候生产者会进入阻塞等待(会唤醒消费者去消费数据)。
  • 同样的,假设多个生产者都已经申请到执行权时,此时只能有一个生产者可以进入生产状态,所以其他几个生产者又要被阻塞一次。

对于消费者:

  • 消费者消费一条数据时,首先查看缓冲区是否有数据单元,如果有执行消费,否则消费者进入阻塞等待(会唤醒生产者去生产数据)。

总结的面试题也挺费时间的,文章会不定时更新,有时候一天多更新几篇,如果帮助您复习巩固了知识点,还请三连支持一下,后续会亿点点的更新!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/2vBGAwTO.shtml

相关文章

操作系统面试题(一)

请你说一下进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的 参考回答: 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了…

操作系统面试常问——for考研复试面试

关于操作系统的一些面试常问问题 前言: 本人22考研党已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾。由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题,整理了…

操作系统面试题(三)

请你来说一说协程 参考回答: 1、概念: 协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适…

操作系统面试题(十四):什么是虚拟内存?

虚拟内存(virtual Memory) 日常生活中,当我们使用电脑的时候,尤其是windows电脑,经常会打开许多软件,这些软件占用的内存已经远远大于计算机的物理内存。之所以会这样,就是因为虚拟内存的存在 …

操作系统面试题:设备管理

管理什么设备? 除cpu,内存外的所有设备 怎么管理设备? 通过将物理设备映射成逻辑设备 为什么要把物理设备映射成逻辑设备? 物理设备是I/O系统中实际安装的设备,物理名通常是字符串或者ID 而逻辑设备的逻辑名比较好记 如何理解…

操作系统面试问题汇总(超详细)

操作系统的组成 1、驱动程序是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口。 2、内核是操作系统之最内核部分,通常运行在最高特权级,负责提供基础性、结构性…

操作系统面试题(二)

请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别 参考回答: 1、互斥锁和读写锁区别: 互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时…

几率大的杂乱+操作系统面试题(含答案)

其他面试题类型汇总: Java校招极大几率出的面试题(含答案)----汇总 几率大的网络安全面试题(含答案) 几率大的多线程面试题(含答案) 几率大的源码底层原理,杂食面试题(含…

操作系统常见面试题

文章目录 进程和线程进程和线程的区别协程与线程的区别进程与线程的切换流程什么是虚拟地址空间为什么虚拟地址空间切换后感觉程序变慢进程间通信方式线程(进程)间同步方式线程的分类协程(纤程)线程和协程的区别 进程(…

这可能最全的操作系统面试题

文章目录 操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么 Linux 系统下的应用程序不能直接在 Windows 下运行操作系统结构单体系统分层系统微内核客户-服务器模式 为什么称为陷入内…

操作系统面试题(史上最全、持续更新)

尼恩面试宝典专题40:操作系统面试题(史上最全、持续更新) 本文版本说明:V28 《尼恩面试宝典》升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼…

操作系统面试题总结(2022最新版)

关于作者 🐶 程序猿周周 ⌨️ 短视频小厂BUG攻城狮 🤺 如果文章对你有帮助,记得关注、点赞、收藏,一键三连哦,你的支持将成为我最大的动力 本文是《后端面试小册子》系列的第 4️⃣ 篇文章,该系列将整理和梳…

MFC中MENU的使用

一、创建基于对话框的应用程序框架 1.选择菜单项文件->新建->项目,弹出“新建项目”对话框。 2.直接选择“MFC应用程序”或左侧面板中模板的Visual C下选择MFC,中间窗口中选择MFC应用程序,然后在下面编辑框中键入工程名称,并…

MFC 菜单栏一片黑,界面卡顿问题

这是在公司做的一个项目, 实现可视化调节参数内容包括频段、频点、增益和Q值等,可以美化(包括丑化)和修饰声音,使声音(或音乐)风格更加鲜明突出。软件如下图所示: 但这软件开发过程中一直存在一…

C#版封装的近400个Windows API 类

【实例简介】 Windows API 类常用方法锦集 【实例截图】 文件&#xff1a;590m.com/f/25127180-494402201-213b68&#xff08;访问密码&#xff1a;551685&#xff09; 【核心代码】/// <summary> /// 封装Windows API类&#xff0c;可直接调用&#xff0c;和调用平常…

C#实现QQ窗体的步骤和总结

C#实现QQ窗体的步骤和总结 程序结构控件布局代码分析公共变量API调用公用方法事件 知识总结IntPtrMarshal 类PointOffset PaintEventArgs 类效果演示 GraphicsMouseEventArgs 类代码案例 ContextMenu 概述演示效果程序代码 MouseEventHandler句柄user32详细介绍使用方法 DllImp…

VC++:菜单的使用总结

菜单是windows应用程序经常使用的资源之一。从今天开始&#xff0c;把有关菜单的创建及使用等各方面的基本用法总结到一起&#xff0c;算是做个笔记吧&#xff01;准备一天写一点&#xff0c;陆陆续续完成&#xff01; 一、菜单的创建&#xff1a; &#xff08;一&#xff09…

Windows 编程[18] - 更换菜单项: ModifyMenu

为什么80%的码农都做不了架构师&#xff1f;>>> 本例效果图: 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGINMENUITEM "Open" ,101MENUITEM "Old" ,102MENUITEM "Help" ,103 END本例代码文件: program Project1;{$R Tes…

动态更改菜单之ModifyMenu

多语言支持&#xff0c;已经是桌面应用软件的发展趋势。用句流行的词就是“国际化”。除了语言翻译的工作外&#xff0c;比较重要的就是字符的编码问题。不过这些问题的讨论已经铺天盖地了&#xff0c;我就不想再多说细节了。我在此只记录一下我的软件“国际化”中的一个技术小…

Android 为CheckBoxPreference Preference 控件添加样式

Android 为CheckBoxPreference Preference 控件添加样式 分类&#xff1a; android 2012-11-16 17:48 8920人阅读 评论(4) 收藏 举报 [html] view plain copy print ? <CheckBoxPreference android:key"enable_adb" android:layout"…