前端备战21秋招之操作系统,线程/进程/死锁(代码片段)

roseat roseat     2022-12-05     471

关键词:

前端备战秋招之操作系统

内容根据春招面经整理,文末有面试遇到的相关问题

笔者文笔有限,如有不足之处还请斧正

文字内容较多,请细细品读,有些点可能有赘述之处,品完此文,面试与此相关的问题,就能得心应手的对付了,还能总结出一套自己的结论

进程

进程是一种抽象的概念,从来没有统一的标准定义

各式各样的定义

  • 进程是可并发执行的程序在一个数据集合上的运行过程
  • 进程是指进程实体的运行过程
  • 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程
  • 操作系统进行资源分配和调度的一个独立单位
  • 行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程
  • 具有一定功能的程序在某个数据集合上的一次活动
  • 进程是一个程序与其数据一道通过处理机的执行所发生的活动

两个基本属性

  • 进程是一个资源分配的基本单位
  • 进程是一个可独立调度和分派的基本单位

特点

  1. 结构性:由程序(段),数据(段),进程控制块(PCB)三部分组成
    • 程序:描述进程要完成的功能
    • 数据:程序执行时所需数据和工作区
    • 进程控制块:进程唯一标识,包含描述信息与控制信息
      • OS感知进程存在的唯一标志
  2. 动态性:进程是程序的执行过程
    • 临时产生的,动态产生/消亡
  3. 并发性:多个进程可同时存在于内存中,能在一段时间内同时运行
  4. 独立性:独立运行的基本单位,独立获得资源与调度的基本单位
    • 进程是系统进行资源分配和调度的一个独立单位
  5. 异步性:各自的进程独立的按不可预知的速度推进

状态

技术图片

  • 运行(Running):占用CPU且正在CPU上运行
  • 就绪(Ready):已具备运行条件(获取了除CPU以外的其它所需资源),但CPU没有空闲
  • 等待/阻塞/睡眠(Waiting/Blocked):因等待某一事件而不能运行

低级调度

低级调度又称为进程调度、微观调度或短程调度

  • 非抢占式调度:不允许某进程抢占已经分配出去的处理机。
  • 抢占式调度:允许调度程序根据某种原则,暂停正在执行的进程,将处理*机重新分配给另一进程。
    • 抢占原则
      • 优先权原则
      • 短作业(进程)优先原则
      • 时间片原则

进程调度时机

  • 一个进程运行完毕,或因某种错误而终止运行
  • 当一个进程在运行时变为等待状态(等待I/O)
  • 分时系统中时间片到
  • 当有一个优先级更高的进程就绪(抢占式)
  • 在进程通信中,执行中的进程执行了某种原语操作(P操作,阻塞原语)

CPU调度过程

即进程切换步骤

为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换

  • 保存现场:顺序保存,最后一步保存PSW
  • 选择要运行的程序
  • 恢复现场:最后一步恢复选中进程的PSW

通信

  • 管道:匿名/具名管道
  • 信号量
  • 共享内存
  • 消息队列
  • 套接字

线程

  • 将进程的两个基本属性分开,线程作为调度的基本单位,不同时作为独立分配资源的单位
  • 线程会被频繁调度和切换
  • 进程作为拥有资源的单位,不进行频繁切换

定义

  • 是进程中的一个实体,是被系统独立调度的基本单位

好处

  • 建一个新线程花费时间少
  • 线程的终止时间比进程短
  • 同进程内的线程切换时间比进程短
  • 因为同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核

属性

  • 轻型实体:基本不拥有资源
  • 独立调度的基本单位
  • 可以并发执行
  • 共享进程资源

线程的特征

  • 结构性
    • TCB:标识、现场信息(寄存器、PC、栈指针)、调度信息(状态、优先级)
    • 数据块:过程参数、数据、系统与用户堆栈
  • 并发性
    • 同一进程中的各线程在同一主存空间,可以共享进程中的所有资源(数据、设备、文件),线程间通信方便
  • 共享性
    • 同一进程的各线程
  • 动态性
    • 有生命周期,有状态变化,可创建子线程
  • 在引入线程的OS中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位
  • 线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器PC、一组寄存器、栈
  • 线程可与同属一个进程的其它线程共享进程所拥有的全部资源
  • 一个线程可以创建和撤消另一个线程;同一进程中的多个线程之间可以并发执行
  • 系统调度的基本单位是线程而不是进程,每当创建一个进程时,至少要同时为该进程创建一个线程,否则该进程无法被调度执行

线程间通信方式

  • 线程间的通信可以通过共享进程级全局变量

通信

  • 共享进程级全局变量
  • 自定义消息

同步方式

  • 事件
  • 信号量
  • 互斥量
  • 临界区

进程与线程的区别

  • 引入进程的目的是为了使多个程序更好的并发执行,改善资源利用率、提高系统效率
  • 引入线程则是为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好

关系

  • 一个线程属于一个进程
  • 一个进程至少有一个线程
  • 资源分配给进程,线程共享其中的资源
  • 处理机分配给线程

定义

  • 进程:可并发执行的程序在一个数据集合上的运行过程
  • 线程:是进程中的一个实体,是被系统独立调度的基本单位

调度

  • 传统OS中,拥有资源、独立调度的基本单位是进程
  • 引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位
  • 在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,将会引起进程切换

并发性

在引入线程的系统中,进程之间可并发,同一进程内的各线程之间也能并发执行。因而系统具有更好的并发性

资源

无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。即一个进程的所有资源可供进程内的所有线程共享

系统开销

  • 进程创建和撤消的开销远大于线程创建和撤消的开销
    • 进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置
    • 线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作
  • 同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也比较容易

目的

  • 进程:为了使多个程序更好的并发执行,改善资源利用率、提高系统效率
  • 线程:为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好

差异

进程

  • 拥有独立的地址空间:一个进程崩溃后,在保护模式下不会对其它进程产生影响

线程

  • 只是进程中的不同执行路径
  • 有独立的堆栈与局部变量
  • 没有单独的地址空间
  • 一个线程死掉等于整个进程死掉

小总结

  • 多进程程序比多线程程序健壮
  • 进程切换时耗费资源更大,效率较差
  • 线程执行开销小,但不利于资源的管理和保护
  • 要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程
  • 多个线程共享内存,从而极大地提高了程序的运行效率
  • 进程在执行过程中拥有独立的内存单元

死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源而造成阻塞的现象,若无外力作用,它们都将无法继续执行

产生原因

  • 竞争资源引起进程死锁
  • 可剥夺和非剥夺资源
  • 竞争非剥夺资源
  • 竞争临时性资源
  • 进程推进顺序不当

产生条件

  1. 互斥条件:涉及的资源是非共享的
    • 涉及的资源是非共享的,一段时间内某资源只由一个进程占用,如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放
  2. 不剥夺条件:不能强行剥夺进程拥有的资源
    • 进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
  3. 请求和保持条件:进程在等待一新资源时继续占有已分配的资源
    • 指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放
      环路等待条件:存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求
      在发生死锁时,必然存在一个进程——资源的环形链

解决办法

只要打破四个必要条件之一就能有效预防死锁的发生

面试相关问题

能力有限,这里就没有留下个人的回答了,避免带入误区,影响到读者的总结,我相信读者可以根据上文中知识点的描述,能总结出自己的结论

1.线程与进程的概念?

2.线程与进程的区别?

3.线程如何工作的?

4.进程如何工作的?

5.进程与线程是如何通信的?

6.进程/线程之间如何进行切换的?

7.线程和进程的关系?

8.什么是死锁?为什么会出现?如何避免?



备战秋招冲击大厂java面试题系列—并发编程(代码片段)

1.进程和线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位,一个程序至少一个进程,一个进程至少一个线程。进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概... 查看详情

备战秋招冲击大厂java面试题系列—java集合(代码片段)

1.Collection和CollectionsCollection是集合类的上级接口,继承他的接口主要有Set和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。2.常用的集合 Collection接口... 查看详情

7死锁,递归锁,信号量,event事件,线程queue(代码片段)

...程也是有死锁的所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待... 查看详情

备战秋招-手撕代码篇(代码片段)

欢迎关注个人公众号摸鱼范式目录序列模三(整除3)检测器序列模三(整除3)检测器授权转发作者:love小酒窝链接:https://www.cnblogs.com/lyc-seu/p/12768321.html描述:输入口是1bit,每次进来一位数据,检查当前序列是否能整除3,能... 查看详情

python并发编程多线程死锁现象与递归锁(代码片段)

... 一死锁现象所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待... 查看详情

进程互斥同步及通信死锁问题操作系统(代码片段)

(一)进程间的互斥关系(1)电影院多线程问题引入由于我们今天的问题是基于多个线程并发的,所以我简单的通过一个Java多线程的例子来引入今天的内容(今天主要讲的是进程,这里的多线程问题,体会一下出现的问题就好了)在... 查看详情

直接拿下操作系统!!(代码片段)

目录操作系统1.进程和线程1.1进程和线程的区别1.2进程的状态转换1.3进程间的通信1.4进程的调度和处理机调度2.内存管理1.1内存管理的功能1.2内存分配方式1.2.1连续分配管理方式1.2.2分配策略算法1.2.3非连续分配管理方式1.2.4页面置... 查看详情

多线程死锁问题及解决办法(代码片段)

...个进程内自带一个线程,线程才是cpu上的执行单位如果把操作系统比喻为一座工厂在工厂内每造出一个车间===》启动一个进程每个车间内至少有一条流水线===》每个进程内至少有一个线程线程=》单指代码的执行过程进程-》资源... 查看详情

进程与线程

进程:操作系统资源分配的基本单位,一个进程可以有多个线程线程:任务调度和执行的基本单位,线程是进程的一部分内存分配:进程:系统运行的时候为每个进程分配不同的内存空间,线程:线程所使用的资源是它所属的进... 查看详情

十多线程基础-死锁(代码片段)

1、死锁含义   死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。例如,在某一个计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时... 查看详情

服务端开发之java备战秋招面试篇5(代码片段)

努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧!目录1.Arr... 查看详情

linux系统编程多线程(代码片段)

多线程初识线程线程的概念线程的优缺点优点缺点了解pid(轻量级线程号)与tgid(线程组id)进程与线程概念解释同一所属组下多线程之间共享与独立的空间进程与线程的对比多进程与多线程对比线程控制线程的创建线程终止线程等... 查看详情

linux系统编程多线程(代码片段)

多线程初识线程线程的概念线程的优缺点优点缺点了解pid(轻量级线程号)与tgid(线程组id)进程与线程概念解释同一所属组下多线程之间共享与独立的空间进程与线程的对比多进程与多线程对比线程控制线程的创建线程终止线程等... 查看详情

死锁与递归锁(代码片段)

...这里一切说了额所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待... 查看详情

(java实习生)每日10道面试题打卡——java多线程篇(代码片段)

...的?进程:本质上是一个独立执行的程序,进程是操作系统资源分配的基本单位。线程:线程是任务调度和执行的基本单位。。它被包含在进程之中&# 查看详情

[study]操作系统(代码片段)

文章目录一、概述1.1操作系统概述1.2运行机制1.3中断与异常1.4系统调用二、进程管理2.1进程定义及特征2.2进程状态与转换2.3进程控制2.4进程通信的三种方式2.5线程概念2.6三种多线程模型2.7处理机调度的三个层次2.8进程调度概述2.9... 查看详情

死锁现象与递归锁(代码片段)

一死锁现象所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进... 查看详情

备战秋招30道springioc经典面试题(附答案)(代码片段)

目录1.什么是SpringFramework?2.SpringFramework的优势和不足?3.你对IoC的理解?4.为什么需要IoC?5.IoC和DI的区别?6.IoC容器的职责?7.什么是SpringIoC容器?8.构造器注入和Setter注入9.BeanFactory和ApplicationC 查看详情