当前位置: 首页 > news >正文

操作系统高频知识

目录

一、线程与进程的区别

区别:

二、多进程和多线程区别

三、进程与程序的区别

三、死锁

1、是什么

2、产生的原因

3、产生的必要条件(4个)

4、如何预防

5、如何避免

6、如何检测

7、如何解除


一、线程与进程的区别

1、线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。

2、进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据

区别

1、根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

2、资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。总结:进程资源开销>线程资源开销

3、内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。

4、影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮

5、执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

二、多进程和多线程区别

多进程:操作系统中同时运行的多个程序

多线程:在同一个进程中同时运行的多个任务

三、进程与程序的区别

进程与程序最大的区别就在于进程是动态的,同一个静态的程序可以对应多个不同的动态进程。例如:同一个QQ程序可以形成多个动态的QQ进程

三、死锁

1、是什么

多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进,程序没有办法进行正常终止

2、产生的原因

(1)竞争不可剥夺资源

(2)竞争临时资源,通常消息通信顺序进行不当,则会产生死锁

(3)进程推进顺序不合法:进程P1 P2此时各自获得资源A B,但是,P1需要得到B后再释放资源,P2需要得到A后再释放资源,此时系统不安全。如果再进行推进,就会死锁

【拓】资源的分类:①可剥夺资源:当一个进程获得资源后,该资源可被其他进程或者系统剥夺   ②不可剥夺资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,③临时资源:包括硬件中断、信号、消息、缓冲区内的消息等

3、产生的必要条件(4个)

(1)互斥使用:二者只能有一个使用资源

(2)不可抢占资源:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放

(3)占有且等待:当进程因请求资源而阻塞时,对已获得的资源保持不放

(4)循环等待:进程一等待进程二占有的资源,进程一等待进程二占有的资源,这样形成一个环路

死锁只有这4个条件都满足时才发生

4、如何预防

关键:破坏任意一个必要条件即可

破坏互斥使用:一次性分配所有资源,这样就不会再有请求了。(一般不会对互斥使用进行破坏,因为某些资源只能一个进程使用,其他进程不能使用,例如打印机。所以会对其他3个条件进行破坏。)

破坏占有且等待:每个进程一次性申请所有需要的资源,如果无法获取所有资源,就等待;如果可以获取所有资源就继续执行任务

破坏不可抢占资源:当某个进程拿到一部分资源,想要申请其他资源时,如果申请不到则主动释放原占有的所有资源

破坏循环等待:给每个资源都标记一个序号,按序申请,先申请资源序号小的在申请资源序号大的,这样线性化申请资源就不会出现循环等待的问题

5、如何避免

银行家算法

6、如何检测

为每个进程和每个资源指定一个唯一的序号,然后建立资源分配表和进程等待表

7、如何解除

(1)剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态

(2)撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态消除为止。所谓代价是指优先级、运行代价、进程的重要性和价值等

http://www.lryc.cn/news/21699.html

相关文章:

  • 加载预训练模型,模型微调,在自己的数据集上快速出效果
  • VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】
  • 电子技术——B类输出阶
  • 【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频
  • Day901.内部临时表 -MySQL实战
  • jstatd的启动方式与关闭方式
  • _improve-3
  • C++——异常
  • MVVM 架构进阶:MVI 架构详解
  • 有没有必要考PMP证书?
  • 1 机器学习基础
  • java基础系列(六) sleep()和wait() 区别
  • Urho3D序列化
  • 企业级信息系统开发学习1.3——利用注解配置取代Spring配置文件
  • VUE DIFF算法之快速DIFF
  • 一文掌握如何轻松稿定项目风险管理【静说】
  • 操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权
  • ecology9-谷歌浏览器下-pdf.js在渲染时部分发票丢失文字 问题定位及解决
  • JavaScript Window Navigator
  • Linux基础命令-du查看文件的大小
  • 文献计量分析方法:Citespace安装教程
  • MVI 架构更佳实践:支持 LiveData 属性监听
  • LeetCode438 找到字符串中所有字母异位词 带输入和输出
  • ACSC 2023 比赛复现
  • 【Linux驱动开发100问】什么是模块?如何编写和使用模块?
  • Android 9.0 Recent列表不显示某个app
  • 深度学习之卷积神经网络学习笔记一
  • 黑盒测试的常用方法
  • 操作系统笔记-第一章
  • daillist