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

操作系统--进程

 2.1.1 进程的概念、组成、特征

进程的概念

add0da3196f545fdafcb698ba56c6f76.png

进程的组成

71fc166a6ae349e285dd99ef268b7d5e.png

ad5089f6fa8f4395a813840101ef8228.png

8ef4b693cda64098887504236e23aeff.png

33aba313dd544b3ca3e717665704c54b.png

进程的特征

25f8b49ee2b543ba8951de1ad5bc2e22.png

总结

7d955a6fa8fc4c11985739ce02524d14.png

 2.1.2 进程的状态与转换,进程的组织

236913e1a5074a7ebc9ef365ba043c04.png

创建态、就绪态

ff7fd7c82fa74b4fb53921ee04876366.png

运行态

3e27e60e104b41a9ad945bce0da7c7c7.png

阻塞态

7c9d67e1038443558757048edba15978.png

e4b1afe95f7745bd9c47c9a920792aca.png

终止态

e7f35e6a59194de3a68e9bcc5bf9cc35.png

进程状态的转换

29b57357532f42bc85b788a9de52da3b.png

6aa389bff4004311b4ef1e5f4d1ee979.png

进程的组织

链式方式

536ea88e5ce24a16b23223c21a4a6e21.png

a401398dabb94e03bd98b285613bca61.png

索引方式

14dd1aab267648baa2600ad0a0bcbcd0.png

 2.1.3 进程控制

36e3ef3999b74ffe8ec1e51867192673.png

6cb12ae43bab44dd95ad4c499c0e53f5.png

如何实现进程控制?

af9fe71c555046328a81d6ea92031d56.png

   在下面的例子,将PCB2的是state设为1和和把它放到就绪队列里面这两件事情必须要是一气呵成的,否则,如果先把state设为1,然后这件事情被终止了,但是此时state为的进程就被放到了阻塞队列里面。

fc6b4a07e9944bd8b21d275d7fb061a7.png

如何实现原语的原子性?

014dc57762334c97bf022942d27173f0.png

077f0094cd9f45f2b6e06ea2e6e2c39f.png

进程控制的相关原语

创建原语

作业:在外存中,还未进入内存投入运行的程序

作业调度:从外存中挑选一个程序投入运行

602016f6fc8e41c0bbe680eee6a7bc2b.png

撤销原语

da5a58168ee44217a8b8e386a6c84a05.png

阻塞原语和唤醒原语

f8520d2220744ab792a9722ca4b28686.png

切换原语

4076d3f3e38043d883be06d1cfb76303.png

程序是如何运行的?---加深理解

66489c728b0f48b9b084c4f2572a9453.png

a3a0c33b42c44d56a0f237135d749bd6.png

总结

1a9f7b06bec642cc9ebbdc59d9f20b81.png

 2.1.4 进程通信

什么是进程通信?

b3fc319a6e244006996257c84272e732.png

为什么进程通信需要操作系统支持?

ae59abc93b784f5c8d83403bf474f875.png

共享存储

涉及到如在同一块区域写东西造成数据覆盖,所以各个进程对共享空间的访问应该是互斥的

c8d177ffaf5e4ccda00688ea5e7ae26a.png

b443415c91ad47b79660e82f65aec16b.png

消息传递

6822bffbb3d149199931c0a7a6c98466.png

f8d1770da91e4236822935b32e824964.png

530ae14548e14d0587bd9ce19036415e.png

管道通信

管道通信与共享存储的区别:

共享存储可以在任何一块地方写,也可以从任何一个地方读

管道通信本质上是一个循环队列,只能从前面写,从后面读

62e29e0369504f9ba05dd9b16e435075.png

127465456be14beb9716f58d61f2cc99.png

总结

90fe3cf48a7a4b80bdcc0d86b93d305b.png

8d96bc98eaeb425c8afb3f0f2b24286e.png

 2.1.5 线程的概念

什么是线程,为什么要引入线程?

f39d6506fe4e41bb8cf2ab02cff92d2f.png

同一个进程中的两个线程可以执行同一份代码,也可以执行不同的代码

459f9f53313e4754adaf6d5e00fa2038.png

9287b2f009734538aa5c52f545490c09.png

引入线程机制后,有什么变化?

04f0fd954b214165a2fdf9226820d15c.png

线程的属性

8203e428b363475e9c6076654687caed.png

 2.1.6 线程的实现方式和多线程模型

f0650b2eb5dd462c828445e05a54c61a.png

线程的实现方式

用户级线程(操作系统感知不到它的存在)

f4b0a3cf64b248118ab0fb3a7ca64147.png

75ddc62cbd6644d78cb825ef6bde35ce.png

33b10f42c1f246c38d46f3e56c462407.png

01f2d6dfeb754591ac557aae23f95b6b.png

内核级线程(操作系统可以感知到它的存在)

35941ea3b1834738a8bdd8cc71ac9a81.png

 3f9f0e87bd0142e5b88e3b0836ec9223.png

多线程模型

一对一模型

eb8a7fc44c894dcc80b2e4eff0c051f3.png

 多对一模型

eaeb7a6588b040cfbe660aceef4490cf.png

多对多模型

79347ab61f76428f9a22258656d033e2.png

总结

5601f7d1b6404fd884c7d98eaeeb6b4d.png

 2.1.7 线程的状态与转换

线程的状态与转换

353b339e90cd436dae4fed517478f86b.png

线程的组织与控制

SP:堆栈寄存器

e006f813aad14608a4feb834f558b7f7.png

 2.2.1 调度的概念、层次

bd234472109743579b4204a69390cac5.png

调度的基本概念

4f7454b205f5414195be913c15ff213f.png

调度的三个层次

高级调度

05b8a904e7d445e98a81eaec5ea11d07.png

低级调度

3ba6e32c765c4687beeb58c2fc58c6c5.png

中级调度

2ca4045c18504d29bd7b51fe8caf1c57.png

三层调度的联系、对比

85325470036e40b09b0ddc0ce732ac37.png

补充------进程的挂起态与七状态模型

就绪挂起状态已经请求到了要使用的资源,虽然到了外存里面,但是不需要再回到创建态,可以直接回到就绪态,阻塞态也同理。

89bcfd91a5c74762a902e77639016dc0.png

总结

d2cc4173b3fe4fd8ac99a62002e7187f.png

 2.2.2 进程调度的时机、切换与过程、方式

4b51f95b91064cd78960841a9f869459.png

进程调度的时机

07554d0b9f5e4243b88cfec6812cf439.png

b2dc0e5570ae4adc87411b03ba8a0450.png

进程在访问临界区资源的时候会进行上锁,阻止其他进程访问

33e362479d7745748fdf2c3859c3d8b9.png47f7b9769eaa4cb6aed9fad597bd52dc.png

普通临界区访问的临界资源不会直接影响到操作系统内核的管理工作,因此在访问普通临界区时可以进行调度与切换

b6a2360fe4c14f53aca0673672de2341.pngdef73d008eab476f9b9267638289cb87.png

3e93f271ee60473f972128faeb6fa776.png

进程调度的方式

091c708fbb9f4564b058d30d968230a9.png

进程的切换与过程

1bdc44fe0389410595f5946e7e153432.png

总结

db0fd57940744f01a641334fb2248377.png

 2.2.3 调度器和闲逛进程

调度器/调度程序

0899659aea6a4ac38b7e34d6a377577f.png

bd31bc17c203437a949649e6cdcdd890.png

闲逛进程

o地址指令:永远不需要访问寄存器等,减少能耗

932b78da151540b28e98ef7ca3651820.png

2.2.4 调度算法的评价指标

47bd09e189bd42d2bed0321537b8be0d.png

CPU利用率

1da6776fed4f4fa6abf8052a7fcea165.png

系统吞吐量

15d87c2a26b145a2920e378ea255b01c.png

周转时间

19e2d9bb1b3343a598ed2217aea20fac.png

带权周转时间

18209199a2284577a9d6ec5ac906ad0d.png

等待时间

6be68f32cfcb427d873cc042b1a8a899.png

响应时间

c0d237833e6245849ca6676f3fe999cf.png

总结

a97077b33b1140f3abb927d0f4c016bb.png

 2.2.3 调度算法

d583bc865fb74963b48545887ed12ba7.png

1<>先来先服务(FCFS)

b3651418f9ee45bcbebb54a7384e96ba.png

① FCFS适合长进程,不利于短进程,短进程等待时间和周转时间过长。

② FCFS有利于CPU繁忙型(如科学计算)进程调度,而不利于I/O繁忙型(如事务处理)进程调度。

db18e68aad714e4eb36bcef5951ba492.png

2<>短作业优先(SJF)

511aa41d56d24e5aa833b5c9e2c6bcda.png

➢算法优点

与FCFS算法相比 ,短进程算法能有效降低进程的平均等待时间、平均周转时间和 带权平均周转时间、 提高系统的吞吐量。

➢算法缺陷

① 对长进程不利,长进程可能长时间得不到调度

② 不能保证紧迫进程的及时处理,因为该算法不考虑进程的紧迫程度

③ 进程执行长短根据用户的估计而定,故不一定能真正做到短进程优先

a6f44ddc51314f71ad10b00a96b00448.png

最短剩余时间优先算法(短作业优先的抢占式版本)

1d38d98f69874ff19f1041eb303c20c1.png

dc4da17dd5ea464ca19263a287bf8a7a.png

ab65310298f04aec8c37ebb58cd49d56.png

3<>优先权调度算法

类型

(1)非抢占式

➢进程一旦获得处理机后,一直运行,除非正在执行的进程因发生某事件而不能再继续执行 

➢在执行期间,即使有高优先权的进程到来时,系统也不剥夺正在执行进程CPU的使用权。高优先权进程只能先进入就绪队列。

5b97924bb10448dca4f4050e5f844cd2.png

(2)抢占式

高优先权的进程可以抢占处理机,使正在执行的低优先权进程中断执行。

在 UNIX中广 泛采用抢占式。抢占时机包括:

① 基于时钟中断的抢占式优先权调度算法;

② 立即抢占的优先权调度算法

 时钟中断

cc62579a6f79470cb044463d838c2ebb.png

立即抢占

d41a971cfc724cf3a3964790800e1a6d.png

优先权类型 

(1)静态优先权

优先权在创建时确定,在进程的整个运行期间保持不变。

决定静态优先权的依据: 进程类型、进程对资源的需求、用户要求 。

静态优先权调度算法可能导致无穷阻塞或饥饿问题(优先权小的一直得不到调度)

(2)动态优先权

进程创建时获得的优先权,随进程的推进而改变。

1->设定动态优先权的方法

① 优先级随着进程运行的剩余时间的减少而增加,使将要执行完的进程尽快完成;

② 优先级随着进程运行的剩余时间的减少而减少,避免该进程长期占用处理机;

③ 随着进程排队等待时间的增长而增加,避免长期饥饿。  

2->实现方法 

 在时钟中断到来时,通过进程切换,根据优先权计算方法,重新计算就绪队列中各 进程的优先级。

缺点

饥饿问题:

无穷阻塞问题:指就绪态进程因得不到CPU而等待的状态。 优先权调度算法会使某个低优先权进程无穷等待CPU,高优先权进程流可以阻止低优先权进程获得CPU。

解决方案:老化(aging)技术。老化技术以逐渐增加在系统中等待时间很长的进程的优先权,使低优先权进程在等待时间很长的情况下优先权变高而获得CPU执行

高响应比优先算法---HRRN(动态优先权调度算法的一种)

ad177b811b1441c09a7b161d56958720.png

7f55f0797d6c4ddd81f8f17bfd1379ce.png

响应比:

Rp=(等待时间+要求服务时间)/ 要求服务时间 = 1 + 等待时间 / 要求服务时间

总结 

d37f1a5b5a464338a7b282314ee57640.png

➢等待时间相同,短进程优先(短进程要求服务的时间短)。

➢要求服务时间相同,先来的进程等待时间长,优先进行调度,算法变为先来先服务。

➢当长进程等待足够长时间后,优先级提高也可获得执行。

➢缺点:很难估计进程预期执行时间;每次计算优先权增加了系统开销。

总结

263d37d15f5544cf8badc29a2649180e.png

e4a17a1e1f474c72b13ddcb4403968ac.png

4<>时间片轮转

1->例子

(1)时间片大小为2

2287750ac9a84e278a5e2fb316076ae0.png

23e99b457e6c4b15a629a696a56add49.png

(2)时间片大小为5

dc3efb59800e475d9f2d5acccf169a77.png

2->时间片太大或者太小的缺点

响应时间T=Nq

N:系统中的进程数;q: 时间片的大小。

① (进程数一定)当系统要求的响应时间越短,时间片就越短;

② (响应时间一定)系统允许的最大进程数越多,时间片也越短;

③ 基本命令应该在一个时间片内执行完。

bb143860d6f649db83587099269fd7f9.png

一般来说,设计时间片时要让切换进程的开销占比不超过1%

295710de40c5421a930cbdd24622c763.png

性能评价

时间片轮转调度算法的性能在很大程度上依赖于时间片的大小。

① 如果时间片很大,进程的响应时间无法保证;

② 如果时间片很小,则进程需要经过多次上下 文切换和进程调度,增加了CPU在进程切换 和进程调度上的开销,影响系统的吞吐量和CPU利用率等方面的性能。 

3->总结 

2d1493b2498945c5b65bd481f2b259af.png

5<>优先级调度(优先权调度)

(1)非抢占式

019951c38fad4bc3927a0bff664663d0.png

(2)抢占式

715cdde888bb43279ea220d24e1ced47.png

dcf9646a3da34b82af593f2ba763d74f.png

59df86c092a34e57a1ea16fb231b10c8.png

6<>多级队列调度算法

1->背景

短进程优先、优先权高者优先都需要估计进程的预期执行时间,如果估计不准确, 将会影响进程调度结果和系统性能。

算法:

将就绪队列分成多个独立队列,根据进程的某些属性(如内存大小、进程优先权或进程类型),进程会被永久地分配到一个队列。每个队列都有自己的调度算法。不同的队列优先权不同,调度算法也可能不同。 

07512c5786d441ed817d8118eaefc37c.png

2->Minix操作系统的进程调度 

Minix把进程按类型不同分为三类,分别对应三个优先权不同的就绪队列:

>优先权最高的任务进程队列

>优先权次之的服务进程队列

>优先权最低的用户进程队列。

<对任务进程和服务进程采用基于优先权的非抢占式调度, 优先权高的进程一旦获得处理机将一直运行下去,直到阻塞。

<对优先权最低的用户进程采用时间片轮转的抢占式调度。 采用多级队列调度,一旦进程进入系统,就被固定地分配到一个就绪队列中,进程在被撤销前不会在不同队列之间移动。

<>优点是降低了进程调度的开销,但是不够灵活,对低优先权进程会存在无穷阻塞(饥饿)问题。 多级反馈队列调度算法(Multilevel Feedback Queue Scheduling)可以弥补这些不足

d21b01ab3b064bfca7793ea9244b71dc.png

 7<>多级反馈队列算法

1->背景

解决多级调度算法对低优先权进程会存在无穷阻塞(饥饿)问题。

2->设计 

① 系统中建立多个优先权不同的就绪队列。为每个队列赋予大小不同的时间片。

② 反馈策略可以规定:队列优先权越高,时间片越短,时间片通常成倍增长。

③ 新进程被创建后,先插入优先权最高的队列。仅当高优先权队列空时,才调度优先权次之的队列。同一队列中,采用时间片轮转调度算法。

④ 使用CPU时间过多的进程会被移到优先权较低的队列中

⑤ 在较低优先权队列中等待时间过长的进程会被转移到较高的优先权队列中。这样就通过使用老化技术阻止了饥饿的发生。 

➢优先级: R1>R2>…>Ri>…>Rn ➢时间片长度: S1<S2<...<Si<...<Sn

第i队列的时间片长度是第i+1队列时间片长度的1/2

59670b9f38f44921a70538cb60c52bf1.png

➢新进程进入内存后,首先放入到第一个就绪队列末尾,按照FCFS顺序进行安排调度。如果该进程在一个时间片内能够完成,则撤离系统;否则转到第二个就绪队列。以后按照这种方式进行调度。

 ➢如果直到最后一个队列,通过老化技术,在后面队列中等待时间过长的进程,会逐渐提高其优先级,从而转移到优先权较高的队列中,不会引起饥饿现象。

➢只有当第i-1个就绪队列为空时,系统才会调用第i个就绪队列。

608c2c0e62b649639aadbb36f39e1bcc.png

02560e455a3541dfa01b49bf5ebd83fd.png

3->考虑的问题 

① 就绪队列的数量

② 根据进程优先权确定进程应该进入哪个就绪队列的算法

③ 用于确定进程何时转移到较高优先权队列的算法

④ 用于确定进程何时转移到较低优先权队列的算法

⑤ 用以确定进程在需要服务时应该进入哪个队列的算法。

4->性能分析 

① 适合终端型用户需求:终端用户提交的属于交互性进程和短进程,通常能够在第1个队列对应 的一个时间片内完成。响应时间短。

② 短进程:可在第1-3个就绪队列时间内完成。

③ 长进程:在兼顾短进程情况下,能保证长批处理进程得到及时处理。

65107198544045f6bd8d0006cf99d868.png

总结

2768f363b7cd4404885686b2f7704cf0.png

 2.3.1 进程同步、进程互斥

什么是进程同步?(狭义的)

41e75e51ee9843f2a755561352a43b3e.png

f6f7468a82a34ec19346a50f6a3a1e85.png

什么是进程互斥?

16dcb25d2195460ba7cb4909e8962051.png

c49528ccb6a34d9a9767fd16c0c5992e.png

1816195a7b5b4760b7eb221e6b0f088b.png

进程同步与进程互斥的关系

临界资源(Critical Resource)是指在多进程或多线程环境中,必须互斥访问的共享资源。

临界资源是指在并发环境中,需要被多个进程或线程共享使用的资源,这些资源在同一时刻只能被一个进程或线程访问。临界资源的共享访问如果不进行互斥控制,会导致数据竞争、数据不一致或系统错误。

广义的进程同步包含了进程互斥。进程同步是一个更广泛的概念,而进程互斥是进程同步中的一种特殊情况。为了更好地理解两者的关系,我们可以分别定义它们,并分析互斥在同步中的位置。

1. 进程同步 (Process Synchronization)

进程同步的目标是协调多个进程之间的操作,使它们能够按照特定的顺序或规则进行,以确保程序的正确性和资源的合理利用。进程同步可以包括以下两种情况:
- 协作式同步:用于保证进程之间按特定的逻辑顺序执行,确保数据的一致性。例如,生产者-消费者模型中,生产者需要在缓冲区中有空位时生产,消费者需要在缓冲区有产品时消费。
- 互斥式同步:用于保证在某一时刻,只有一个进程能进入临界区,防止共享资源的并发访问导致数据不一致或破坏。

2. 进程互斥 (Process Mutual Exclusion)
进程互斥是进程同步的一种特殊形式。它专注于保护临界区,确保在某一时刻只有一个进程能够访问共享资源。进程互斥的目的是防止多个进程同时操作同一资源,避免数据不一致和竞态条件。

互斥是进程同步的一个子集,用于解决资源并发访问的冲突问题。

 3. 进程同步包含进程互斥的原因
进程同步的概念涵盖了**进程之间的一切协调机制**,不仅包括互斥,还包括其他形式的同步操作,如确保进程按特定顺序执行、解决进程之间的依赖关系等。互斥是进程同步的一种特殊情况,专门解决的是对共享资源的**并发访问问题**。因此,广义的进程同步包含进程互斥。

4. 进程同步与进程互斥的关系
- 进程同步的范围更广,目标是协调进程间的合作、顺序和依赖。
- 进程互斥是进程同步中的一个特例,专门用于管理对共享资源的排他性访问。
  
例如,信号量可以同时用于进程同步(协调进程间的执行顺序)和进程互斥(确保同一时刻只有一个进程进入临界区)。同样的机制可以起到不同的作用,这也体现了互斥是同步的一部分。

总结
广义的进程同步包含进程互斥。进程同步的目的是协调进程间的操作,确保正确的执行顺序和资源使用,而进程互斥是同步中的一种机制,专门用于解决并发访问共享资源的问题。

总结

83d58c47671442408712f9ca8b13599e.png

2.3.2 进程互斥的软件实现方法

73bf547db14a496b9c29ad5e26d8cfcd.png

9cf169418fa64fda937916e4187331ea.png

单标志法(违反"空闲让进"的原则)

1cba3a3fb91b4696909766ab601fc8f1.png

db8e4c1c5211419a96309e7e6372740d.png

双标志先检查法(违反"忙则等待"原则)

8d08acfaba5b4f43a685f6e5f0b8ac56.png

30cd6fbc99c9434db4717003a753b593.png

双标志后检查法

1daf675b1334433397b0bc5362da009f.png

a9b87b00bef5463b9c89868612743e15.png

Peterson算法

P0把turn设为1,P1把turn设为0,表示自己优先想让对方使用临界资源

133776afce45485288dfabd1332aa5a1.png5adb10d60dc64c708894835facca6e10.png3d29d53b3aca400ea9abea46d02764b9.png

fc04bd79faca47a983701444c327ce6b.png

总结

fb04e1b5332343938ab86f60bfa887be.png

2.3.3 进程互斥的硬件实现方法

cc59ed3200c14fffb2f83d6e556f1bec.png

中断屏蔽方法

0a784fe1aa0f4b21971b21f8d0515f83.png

TestAndSet指令

eb131c911b064e78836083bd75a3ff3e.png

Swap指令

22b246822c5f477999c7ed89c5d2abab.png

总结

c1f67bb2d1714542baa034e053af3568.png

 2.3.4 互斥锁

3c5f5afbec82486b818e513bfbc0a608.png

2121c8b551f44a759257ee01ca0520ed.png

2.3.5 信号量机制

88d7654141ca4527a9d1801a6e8a0f9a.png

314b0e70246a4a2ca8ece893c066eb5d.png

2b1029102acf416383d774a143c16f19.png

整型信号量

ccfc5395f419428baba850d1728c8bb7.png

记录型信号量

a5da75573d2e4c4da6a3c11832c364fb.png

例子

  被阻塞的P2和P3已经执行过wait,下次被唤醒的时候,并且获得了CPU,直接从开始使用打印机执行,信号量的value值不会再被减一。

bf523195394d45b3813fa08067a8c91e.png

b62c8339df364b52a89e52dd8b985f0e.png

a1587a46fd4b49f1afbf693b1bdea9c6.png

总结

28c3b796ce45494fb59b8f6b1198e108.png

2.3.6 用信号量实现进程的互斥,同步,前驱关系

ec637ffb961f4c04863b6f1e7936c41b.png

实现进程互斥

mutex:互斥;互斥锁;互斥体;互斥对象;互斥量

mutex:代表进入临界区的名额,名额还有剩余的话就可以顺利进入临界区。

P,V操作:简单理解为加一减一

992e156f5c2342d09594e5fea446706c.png

实现进程同步

解决进程之间的异步性

8b6751949db64b85a889b496d3cf3005.png

注意第二中情况,P2被阻塞后,和前面记录型信号量一样,被P1唤醒以后会从P(S)后面接着执行,而不是再次去执行P(S)操作。

验证一下可以知道,唤醒回来以后又去执行P(S)就又让阻塞了,没办法继续执行下去。

5f9bfe49ca1643f1975e45d09b272062.png

信号量实现前驱关系

7bb56df416da496896351dea7189d1f8.png

总结

1f6dd9429bf84195a45b83f70e207230.png

2.3.7 生产者-消费者问题

问题描述

be9d87be63154274ad9dc40b212161ee.png

d6b08a0f7e824cc6be283f81d6c58c3d.png

如何实现

实现互斥在同一个进程中进行一对PV操作

实现同步是在其中一个进程中执行P,另一个进程中执行V

5e7f3b4e3a314ab88dc2c4f316b8570e.png

能否改变相邻P,V操作的顺序

P操作的顺序不能改变,实现同步的P操作要放在实现互斥的P操作的前面

V操作的顺序可以随意调换

逻辑上,生产者可以进到临界区以后再生产产品,然后把产品放入临界区

消费者也可以进入到临界区拿到产品,把产品消费完再出来

但是这样,单个进程对临界区上锁的时间会增加,不利于进程之间互斥的访问临界区

6468277b1a594aaab42a967f17ba89ef.png

总结

b3d039bc55024223b8ccb14c87050877.png

2.3.8 多生产者多消费者问题

问题描述

a2c303f9d5d34c39aaa5c8c94f38de3a.png

问题分析

c8148d5980e64da48aff04354d47796c.png

如何实现

dc7a434cce4b409eabe2125451bf6304.png

可不可以不用互斥信号量

缓冲区容量为1

2596d7e5f0d54f2798cdde76bb007c06.png

08880d864c2e42129ef5a6b437782ce0.png

缓冲区容量为2 

d7d39f85e9df42a7a79c7b21928423de.png

总结

1e483d0624a94ef08165fdbf2fb49405.png

38ec0fb6c04d4e40b08cb32a19b18e95.png

2.3.9 吸烟者问题

问题描述

9f502fecf7754737b84b062ec60190d8.png

问题分析

409da2d2a55f4d0ea1620601ec1cb06c.png

600e9610704541df9a6a9335b12c7b8e.png

如何实现

83af6890f91645ac98be881185afd2e2.png

总结

8682ba61887b4579bc18b6157ea55c5d.png

2.3.10 读写者问题

问题描述

写着和读者同时进入,读者目标读的文件被覆盖,读出的数据和目标不一致

477581210e51495f8b319b3067fcccbc.png

如何实现

第一个读者上锁,最后一个解锁

a52fa3df323244f9ab04305d2ab9a0eb.png

为了防止进程切换的影响,考虑使用PV操作

ps:虽然是使用了PV操作,但是并不是说不会有进程切换,而是进程切换的时候,由于信号量改变了,不能往下执行,第二个读进程不能往下执行,也不会产生阻塞

1f888a8006814181b825ad8f22a8d9f4.png

存在写进程饿死的问题,源源不断的读者到来,写者一直阻塞

6c90d6b9420e403f834a4fdbacb1859c.png

在一个读者读文件的时候,如果有一个写者先到来,读者读完以后,让写者先上处理机运行

c6c1889dcc3d44e8aa692e2bc66ee08f.png

谁先来,谁先运行

baeac93ea4074ffabe73669b4c849ffc.png

总结

749f3df437df41f2a30c75b35e9d186b.png

2.3.11 哲学家问题

问题描述

2a24a4ce00224a36bd9f7f436bbed616.png

问题分析

70d36f54508f483e84ac9900ac5e7e5e.png

如何实现

第一中可以设置一个初始值为4的信号量

156a51dc95a541209c059691b5df4207.png

5ba4fbea03744b318e4c2ca84089a3e3.png

1号左边的拿不到被阻塞,但是P(mutex)被占用,2号也拿不了左边

7f3756757c5e4dadb76680b96ece468f.png

这种方法不能保证只有两边的筷子都可用时,才允许哲学家拿起筷子,而是有一个哲学家就餐后,

会有三种情况, 

一种是它左边的哲学家,可以拿到左边(第一支)筷子,然后在拿右边(第二支)时让阻塞了,信号量上锁,其他的哲学家也再拿不了了

一种是他右边的哲学家,左边的筷子拿不了,直接阻塞了,其他的哲学家再也拿不了了

还有一种是另外两个科学家,可以同时拿到两只就餐,然后接下来就是第一种,或者第二种情况

4176b7e454154aa19d59cc3d81ee067a.png

总结

f15a9b07b30444f38fe905ef99ce8ba0.png

2.3.12 管程

8807b344bb904ab29fc7d6aa84bc2fde.png

为什么要引入管程

f409c797dbff4696a40039c4ce4be89b.png

管程的定义和基本特征

90deefadf3d1475e9d163b177480cafa.png

拓展1--管程解决生产者消费者问题

b2c0c5eacd7c4090b876d4f0e965d06c.png

ca03ceb31b0c4cd4a0fa5ae11e0504b0.png

74b09fba080f41f790642b27e0bbedcd.png

拓展2--Java中类似于管程的机制

bfa492ddb0854924adbd7aae13c6127c.png

总结

82b573f1f5e84290a32274c57bf7d805.png

2.4.1 死锁的概念

9e0722f7676d44b4b5aa3cccacc99821.png

什么是死锁

e74c85a1f9574df68cf832057f5d4cfc.png

6fa583a00eba4cdfb79097fbd99230bd.png

死锁、饥饿、死循环的区别

56e0037fccac4bc2b4bd200032a194c0.png

死锁产生的必要条件

bfa24a3fdc8648a9b895b6abfcf31e2d.png

什么时候会发生死锁

f277e3440433427eb416f65bdbd386c5.png

死锁的处理策略

0b9f5e7f2d7b44d8a6fd9c89af6269df.png

总结

99dd6752820c408e83c43bfe7ae9ba1b.png

2.4.2 死锁的处理策略---预防死锁

38aa94f7d2094639b9cdab0adc3eeaad.png

破坏互斥条件(很多时候无法破坏互斥条件)

13cb387b375140d28940d97815529fac.png

破坏不剥夺条件

63b9623771204b7180968b2398f0402a.png

破坏请求和保持条件

905e5cf1f6fa45338f6c32ff77ec3920.png

破坏循环等待条件

缺点2:假设用户需要先使用打印机再使用扫描仪,但是扫描仪的编号要小,用户就要先申请到扫描仪才能申请使用打印机,这样扫描仪就要空闲等待很久

d502d66f3b1b444c9ace37d625b9a73b.png

总结

065a143a290e488d9513930953779b0e.png

2.4.3 死锁的处理策略---避免死锁

47f7d935c0964d81a8fc7d4116ae3598.png

什么是安全序列

fa55641d4a3e4d20be022b5807f8217c.png

安全序列、不安全状态、死锁的联系

57d3ad09fffd4b96b963ed9173384138.png

银行家算法

fd0154afeff748c0ab83e3127941a30a.png

可以找到安全序列

a1b9179608fb46aea0fe898434bb2b23.png

27047a50a9274add8d5ed69439f286cf.png

找不到安全序列

84947dba88174c168c33d1d7b8178bf9.png

3f657e035fec4e84b6fbab58f040139f.png

总结

30c4fa93f42d4f688e23496e0cf08dad.png

2.4.4 死锁的处理策略---检测和解除

d31bf970c4d44263ac74c0b9a005d5fd.png

死锁的检测

ccf39b52405a4e5eb8ba5bc508761ac7.png

bb0a29b13d5349e2bec17548d0bd6020.png

不能消除所有边

0b18d9dfee594bf192429e0997fe29cc.png

可以消除所有边

2316d36a7986491e976d09afbf6aaf96.png

1933c79550624d28a8343e61cac8242c.png

死锁的解除

31117254f77247f582192f33eb261c79.png

总结

e32dac629f8b4b028093bcebff4d5520.png

相关文章:

操作系统--进程

2.1.1 进程的概念、组成、特征 进程的概念 进程的组成 进程的特征 总结 2.1.2 进程的状态与转换,进程的组织 创建态、就绪态 运行态 阻塞态 终止态 进程状态的转换 进程的组织 链式方式 索引方式 2.1.3 进程控制 如何实现进程控制? 在下面的例子,将PCB2的是state设为1和和把…...

abap 可配置通用报表字段级日志监控

文章目录 1.功能需求描述1.1 功能1.2 效果展示2.数据库表解释2.1 表介绍3.数据库表及字段3.1.应用日志数据库抬头表:ZLOG_TAB_H3.2.应用日志数据库明细表:ZLOG_TAB_P3.3.应用日志维护字段配置表:ZLOG_TAB_F4.日志封装类5.代码6.调用方式代码7.调用案例程序demo1.功能需求描述 …...

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换&#xff08;warp&#xff09;。 该函数根据 ECC 标准 ([78]) 估计最优变换&#xff08;warpMatri…...

PGMP-串串0203 项目集管理绩效域战略一致性

1.项目集管理绩效域 2.战略一致性 战略一致性包含内容商业论证BC项目集章程项目集路线图环境评估项目集风险管理策略 前期formulation sub-phaseplanning sub-phase组织的战略计划项目集风险管理策略项目集管理计划商业论证BC项目集章程项目集路线图环境评估...

HiveMetastore 的架构简析

HiveMetastore 的架构简析 Hive Metastore 是 Hive 元数据管理的服务。可以把元数据存储在数据库中。对外通过 api 访问。 hive_metastore.thrift 对外提供的 Thrift 接口定义在文件 standalone-metastore/src/main/thrift/hive_metastore.thrift 中。 内容包括用到的结构体…...

【WRF模拟】全过程总结:WPS预处理及WRF运行

【WRF模拟】全过程总结:WPS预处理及WRF运行 1 数据准备1.1 嵌套域设置(Customize domain)-基于QGis中gis4wrf插件1.2 静态地理数据1.2.1 叶面积指数LAI和植被覆盖度Fpar(月尺度)1.2.2 地面反照率(月尺度)1.2.3 土地利用类型+不透水面积1.2.4 数据处理:geotiff→tiff(W…...

linux基础理解和使用 iptables 防火墙

本文档旨在编写一份详尽的 iptables基础 使用指南&#xff0c;涵盖其核心概念、使用方法以及高级技巧。将结合图表和示例&#xff0c;更好地理解和应用 iptables。 1. 什么是 iptables&#xff1f; iptables 是 Linux 系统自带的包过滤防火墙&#xff0c;它与内核空间的 netf…...

【系统架构设计师】2024年下半年真题论文: 论软件维护及其应用(包括参考素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2024年下半年 试题2)论文素材参考软件维护的类型软件维护的方法软件维护应用案例分析软件维护面临的挑战与应对策略真题题目(2024年下半年 试题2) 请围绕 “论软件维护及其应用” 论题,依次从以下三…...

【数学二】线性代数-矩阵-初等变换、初等矩阵

考试要求 1、理解矩阵的概念,了解单位矩阵、数量矩阵、对角矩阵、三角矩阵、对称矩阵、反对称矩阵和正交矩阵以及它们的性质. 2、掌握矩阵的线性运算、乘法、转置以及它们的运算规律,了解方阵的幂与方阵乘积的行列式的性质. 3、理解逆矩阵的概念,掌握逆矩阵的性质以及矩阵可…...

MinerU容器构建教程

一、介绍 MinerU作为一款智能数据提取工具&#xff0c;其核心功能之一是处理PDF文档和网页内容&#xff0c;将其中的文本、图像、表格、公式等信息提取出来&#xff0c;并转换为易于阅读和编辑的格式&#xff08;如Markdown&#xff09;。在这个过程中&#xff0c;MinerU需要利…...

BFS 解决拓扑排序

BFS 解决拓扑排序 1.课程表1.1. 题⽬链接&#xff1a;1.2 题⽬描述&#xff1a;1.3. 解法&#xff1a;1.4 代码 2. 课程表2.1题⽬链接&#xff1a;2.2 题⽬描述&#xff1a;2.3解法&#xff1a;2.4代码 3. ⽕星词典&#xff08;hard&#xff09;3.1题⽬链接&#xff1a;3.2 题⽬…...

MySQL 程序设计课程复习大纲

作为一门基础的 MySQL 程序设计课程&#xff0c;期末复习的重点应放在常见的数据库操作、基本查询、数据建模、关系型数据库的规范化设计等方面。以下是针对基础课程的 MySQL 期末复习知识点。 1. MySQL 基础概念与数据库操作 数据库基础 数据库与表的概念数据库管理系统&…...

C++ : STL容器(适配器)之stack、queue剖析

STL容器适配器之stack、queue剖析 一、stack、queue的接口&#xff08;一&#xff09;stack 接口说明&#xff08;二&#xff09;queue 接口说明 二、stack、queue的模拟实现&#xff08;一&#xff09;stack、queue是容器适配器stack、queue底层默认容器--deque1、deque概念及…...

nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决

按照pinia官网步骤安装运送服务会报一个500[vite-node] [ERR_LOAD_URL]问题,查阅各个网站资料没有找到有用信息. 最后解决:在package.json中把pinia的版本给降回0.5.5版本之后就正常了 "dependencies": {"element-plus/icons-vue": "^2.3.1",&q…...

青少年编程能力等级测评CPA试卷(2)Python编程(一级)

青少年编程能力等级测评CPA试卷&#xff08;2&#xff09; Python编程(一级) &#xff08;考试时间90分钟&#xff0c;满分100分&#xff09; 一、单项选择题&#xff08;共20题&#xff0c;每题3.5分&#xff0c;共70分&#xff09; 下列语句的输出结果是&#xff08; &am…...

wordpress判断page页与非page页

在WordPress中&#xff0c;你可以使用is_page()函数来判断当前页面是否为page类型。以下是如何使用这个函数的示例&#xff1a; <?php if (is_page()) {// 当前页面是page类型echo 这是一个Page页面; } else {// 当前页面不是page类型echo 这不是一个Page页面; } ?> …...

JavaScript 库-qs的使用

meta.query qs.parse(query)语句解析&#xff1a;qs.parse(query) qs 是一个常用的 JavaScript 库&#xff08;全称为 query-string 或 qs&#xff09;&#xff0c;它用于处理 URL 查询字符串。qs.parse(query) 会将查询字符串解析成一个对象。举个例子&#xff1a; 假设有一…...

Leetcode 两数之和 Ⅱ - 输入有序数组

这段代码实现了在一个非递减排序的数组中找到两个数&#xff0c;使它们的和等于目标值的算法。算法使用了双指针技术&#xff0c;具体思想如下&#xff1a; 算法思想&#xff1a; 初始化指针&#xff1a;定义两个指针 left 和 right&#xff0c;分别指向数组的起始位置和末尾位…...

多处理器一致协议(MSI)协议详细介绍

多处理器一致协议 MSI 协议详细介绍 #mermaid-svg-2lc6AxM2mRiND4C0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2lc6AxM2mRiND4C0 .error-icon{fill:#552222;}#mermaid-svg-2lc6AxM2mRiND4C0 .error-text{fill:…...

SSH实验5密钥登录Linuxroot用户(免密登录)

当用户尝试通过SSH连接到远程服务器时&#xff0c;客户端会生成一对密钥&#xff1a;公钥和私钥。公钥被发送到远程服务器&#xff0c;并存储在服务器的~/.ssh/authorized_keys文件中。而私钥则由客户端保管&#xff0c;不会传输给服务器。 在连接过程中&#xff0c;客户端使用…...

2024 网鼎杯 - 青龙组 Web WP

2024 网鼎杯 - 青龙组 WEB - 02 打开容器一个登录界面&#xff0c;随便输入账号密码可以进到漏洞界面 这里有一个发送给boss的功能&#xff0c;一眼xss 有三个接口&#xff1a;/flag 、/update 、/submit /flag &#xff1a;要求boss才能访问&#xff0c;/update &#xf…...

ORACLE 闪回技术简介

闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回 经典面试题面试题&#xff1a;简述Oracle数据库闪回技术&#xff1f; 1.闪回Oracle数据库 2.闪回表 3.闪回事务 数据库闪回 要想实现数据库闪回 1.必须配置数据库的恢复区 SQL> show parameter …...

【笔记】LLC电路工作频点选择 2-2 开关管与滤波压力

LLC谐振变换器稳态工作波形分析 - 知乎&#xff0c;上面这篇文的结论相较MPS那篇文章的结论更严格。我们分析一下它的频点选择为什么会更窄&#xff1a; 1. LLC电路模型 电流滞后的特性就是电路呈感性注意这里也是开关管ZVS开通。 2.工作循环的波形 iLm的波形&#xff0c;最终…...

【CUDA】认识CUDA

目录 一、CUDA编程 二、第一个CUDA程序 三、CUDA关键字 四、device管理 4.1 初始化 4.2 Runtime API查询GPU信息 4.3 决定最佳GPU CUDA C 编程指南CUDA C在线文档&#xff1a;CUDA C 编程指南 CUDA是并行计算的平台和类C编程模型&#xff0c;能很容易的实现并行算法。只…...

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…...

AI绘画赚钱秘籍!掌握ai绘画赚钱技巧,开启副业新篇章,ai绘画赚钱实战指南!

AI绘画赚钱&#xff1a;方法与策略 一、引言 ​ 随着人工智能技术的日益发展&#xff0c;AI绘画作为新兴领域&#xff0c;正逐渐成为赚钱的新途径。本文将从多个角度探讨AI绘画赚钱的完整策略&#xff0c;帮助读者深入了解并把握这一领域的商机。 二、AI绘画赚钱的主要方式…...

HCIP-HarmonyOS Application Developer V1.0 笔记(四)

平板/折叠屏设计 自适应动态布局&#xff1a;相对拉伸、相对缩放、延伸布局 响应式动态布局&#xff1a;挪移布局、重复布局、瀑布布局 Sketch 插件 设计系统&#xff1a;提供了 HarmonyOS 设计语言中定义的视觉参数和设计资源文件。 控件库&#xff1a;按类别组织控件&…...

【前端】Svelte:组件封装与使用

在 Svelte 中&#xff0c;组件化是开发的核心理念。将页面的不同部分封装成独立组件&#xff0c;不仅可以提升代码的复用性&#xff0c;还能让项目的结构更加清晰。在本文中&#xff0c;我们将介绍如何创建、封装、引入和使用 Svelte 组件&#xff0c;帮助你快速上手 Svelte 的…...

STM32标准库-待机模式

1.1 STM32待机模式简介 STM32单片机具有低功耗模式&#xff0c;包括睡眠、停止和待机三种。 运行状态下&#xff0c;HCLK为CPU提供时钟。HCLK由AHB预分频器分频后直接输出得到。 低功耗模式选择需考虑电源消耗、启动时间和唤醒源。 睡眠模式停CPU不停外设时钟&#xff1b; 停止…...

【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: The Power of Scale for P…...

vps如何放置网站/seo云优化外包

2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1111 Solved: 556[Submit][Status][Discuss]Description 二进制病毒审查委员会最近发现了如下的规律&#xff1a;某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码&#xff0c;那么…...

缤纷网站免费做服装/网络推广方案的基本思路

2020年手机QQ和微信的更新非常快&#xff0c;不仅成为了我们的聊天工具&#xff0c;也成为了很多人的文件收发工具&#xff0c;我们通过QQ或者微信&#xff0c;基本可以实现文字视频等聊天&#xff0c;重要文件相互收发传递等工作。但近期手机QQ的更新&#xff0c;改变了传统的…...

网页设计如何制作背景/网站优化策略

DockerFile学习DockerFile是什么what is DockerFile构建三步骤DockerFile构建过程解析DockerFile内容基础知识Docker执行Dockerfile的大致流程小总结DockerFile的体系结构保留字指令小总结案例自定义镜像mycentos编写注意: docker build命令最后有一个 . , .代表当前目录&#…...

广州推广优化/seo快照推广

file>settings>editor>color scheme>general>code>identifier under caret>background 转载于:https://www.cnblogs.com/yibeimingyue/p/11264734.html...

做期货网站/google网站搜索

2020年&#xff0c;全球差速器总成市场规模达到了 百万美元&#xff0c;预计2027年可以达到 百万美元&#xff0c;年复合增长率(CAGR)为 % (2021-2027)。中国市场规模增长快速&#xff0c;预计将由2020年的 百万美元增长到2027年的 百万美元&#xff0c;年复合增长率为 % (2021…...

如何做织梦论坛类的网站/国际购物网站平台有哪些

天池大赛-第一届PolarDB数据库性能大赛&#xff0c;比赛以NVME Optane SSD为背景&#xff0c;在此之上开发单机存储引擎比拼性能&#xff0c;支持C和Java语言。内部赛小试牛刀后&#xff0c;汲取了一些经验&#xff0c;作为这么多年的资深JAVAer&#xff0c;还是想继续挑战一把…...