「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识

简介: 该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。

封面

🎹序言

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

下面开始本文的讲解~

🎸一、思维导图

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

OS面试题复习框架

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

🎺二、常见面试题

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)空间上的局部性内存中被访问的页周围的页也很可能被访问。

🎻三、结束语

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

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

🐣彩蛋 One More Thing

🏷️pdf内容获取

👉 微信关注公众号 星期一研究室 ,回复关键字 操作系统面试pdf 即可获取相关 pdf 内容~

👉 回复 面试大全pdf 可获取全专栏内容📂

🏷️更新地址

👉 offer来了面试专栏

🏷️番外篇

  • 如果您觉得这篇文章有帮助到您的的话不妨点赞支持一下哟~~😉
  • 以上就是本文的全部内容!我们下期见!👋👋👋
相关文章
|
14天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
22天前
|
监控 Java
JavaGuide知识点整理——线程池的最佳实践
总之,合理使用和配置线程池是提高 Java 程序性能和稳定性的重要手段。遵循最佳实践,可以更好地发挥线程池的作用,提升系统的运行效率。同时,要不断地进行监控和优化,以适应不同的业务需求和环境变化。
99 63
|
14天前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
38 6
|
14天前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
39 5
|
12天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
14天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
33 4
|
1月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
1月前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
1月前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
28 1
|
1月前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
40 2

热门文章

最新文章