「offer来了」计算机操作系统篇,10个知识点带你巩固进程线程关系

简介: 操作系统对于前端来说考察的内容并不多,所以在今天的文章中将依据比较常考的知识点进行归纳总结。下面开始本文的讲解~

7.png🎹序言


操作系统对于前端来说考察的内容并不多,所以在今天的文章中将依据比较常考的知识点进行归纳总结。

下面开始本文的讲解~


🎸一、思维导图


我们先用一张思维导图来梳理操作系统相关的面试题。具体如下👇

1.png

下面开始归纳操作系统常见的面试题。


🎺二、常见面试题


1、进程和线程以及它们的区别

  • 进程是对程序运行时的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;
  • 线程是进程的子任务,是CPU调度和分配的基本单位,用于保证程序的实时性,实现进程内部的并发;
  • 一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。


2、进程间通信的几种方式


(1)管道(pipe)及命名管道(named pipe)

  • 管道可用于具有亲缘关系的父子进程间的通信。
  • 命名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。


(2)信号(signal)

  • 信号是一种比较复杂的通信方式,用于通知和接收某个已经发生的进程事件。


(3)消息队列

  • 消息队列是消息的链接表,它克服了以上两种通信方式中信号量有限的缺点。
  • 具有写权限的进程可以按照一定的规则向消息队列中添加新信息。
  • 对消息队列有读权限的进程则可以从消息队列中读取信息。


(4)共享内存

  • 可以说这是最有用的进程间通信方式。
  • 它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。
  • 这种方式需要依靠某种同步操作,如互斥锁和信号量等。


(5)信号量

  • 主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段;


(6)套接字

  • 这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。


3、线程同步的方式


(1)互斥量 Synchronized/Lock

  • 采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。
  • 因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。


(2)信号量 Semphare

  • 它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量


(3)事件(信号)Wait/Notify

  • 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。


4、什么是死锁?死锁产生的条件?


(1)死锁的概念

  • 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。
  • 通俗的讲,就是两个或多个进程无限期的阻塞相互等待的一种状态。


(2)死锁产生的四个必要条件

  • 互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止。
  • 占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。
  • 非抢占:进程不能被抢占,即资源只能被进程在完成任务后自愿释放。
  • 循环等待:若干进程之间形成一种头尾相接的环形等待资源关系。


(3)处理死锁的基本策略和常用方法

  • 解决死锁的基本方法主要有预防死锁避免死锁检测死锁解除死锁鸵鸟策略等。


5、进程有哪几种状态?

**(1)就绪状态:**进程已获得除处理机以外的所需资源,等待分配处理机资源。

**(2)运行状态:**占用处理机资源运行,处于此状态的进程数小于等于CPU数。

(3)阻塞状态: 进程等待某种条件,在条件未满足之前无法执行。


6、线程有几种状态?

在 Java虚拟机 中,线程从最初的创建到最终的消亡,要经历若干个状态

  • 创建 (new) 、就绪 (runnable/start) 、运行 (running) 、阻塞 (blocked) 、等待 (waiting) 、时间等待 (time waiting) 和 消亡 (dead/terminated)
  • 在给定的时间点上,一个线程只能处于一种状态。


7、段式存储管理


(1)段式存储管理是什么?

段式存储管理是一种符合用户视角的内存分配管理方案

在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段、数据段、堆栈段;

这样每个进程有一个二维地址空间,相互独立,互不干扰。


(2)段式管理的优缺点

  • 优点没有内碎片(因为段大小可变,可通过改变段大小来消除内碎片)。
  • 缺点:但段换入换出时,会产生外碎片(比如 4k 的段换 5k 的段,会产生 1k 的外碎片)。


(3)页式存储管理方案

页式存储管理方案是一种用户视角下内存与物理内存相分离的内存分配管理方案

在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page) ,而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离


(4)页式存储管理的优缺点

  • 优点:没有外碎片(因为页的大小固定)。
  • 缺点:但会产生内碎片(一个页可能填充不满)。


8、进程调度策略


(1)FCFS(先来先服务,队列实现,非抢占的)

先请求 CPU 的进程先分配到 CPU


(2)SJF(最短作业优先调度算法)

平均等待时间最短,但难以知道下一个 CPU 区间长度。


(3)优先级调度算法(可以是抢占的,也可以是非抢占的)

优先级越高越先分配到 CPU ,相同优先级先到先服务。

存在的主要问题是:低优先级进程无穷等待 CPU ,会导致无穷阻塞或饥饿。

解决方案:老化(即对超过一定时间还未使用的进程进行删除)。


(4)时间片轮转调度算法(可抢占的)

队列中没有进程被分配超过一个时间片的 CPU 时间,除非它是唯一可运行的进程。

如果进程的 CPU 区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。


(5)多级队列调度算法

就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。

其中,一个进程根据自身属性被永久地分配到一个队列中。


(6)多级反馈队列调度算法

与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多 CPU 时间,那么它会被转移到更低的优先级队列

在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。


9、页面调度算法

FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到)。

LRU(Least recently use)最近最少使用算法:根据开始使用时间到现在为止的时间长短来判断。

LFU(Least frequently use)最少使用次数算法:根据使用次数来判断。

OPT(Optimal replacement)最优置换算法:理论的最优,所谓理论,就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的页。


10、局部性原理

(1) 时间上的局部性最近被访问的页在不久的将来还会被访问。

(2)空间上的局部性内存中被访问的页周围的页也很可能被访问。


🎻三、结束语


大家可以看到,对于操作系统的面试来说,基本上都在围绕着进程和线程这两个概念交谈。所以在学习的过程中,可以以这两个点来作为主线来对知识点进行扩充和归纳。

关于操作系统的面经归纳到这里就结束啦!希望对大家有帮助~



相关文章
|
1月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
137 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
2月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
113 1
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
2月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
2月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
2月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
2月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
6天前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
51 10
|
1月前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
75 7

热门文章

最新文章

推荐镜像

更多