操作系统基础:进程同步【上】

简介: 操作系统基础:进程同步【上】



1 进程同步(上)

1.1 进程同步与互斥

1.1.1 进程同步

1.1.1.1 必要性

进程具有异步性的特征,异步性是指各并发执行的进程以各自独立的、不可预知的速度向前推进,可能导致我们的程序不按期望的顺序前进,进而产生错误的结果。由此,操作系统引入了进程同步

1.1.1.2 什么是进程同步

可以理解为进程之间必须按照一定的先后顺序执行

1.1.2 进程互斥

1.1.2.1 必要性

1.1.2.2 什么是进程互斥

1.1.2.3 进程互斥的逻辑过程

注意:

1.1.2.4 实现进程互斥的原则

1.1.3 总结

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

1.2.1 总览

1.2.2 单标志法

1.2.2.1 算法思想

背后的逻辑是谦让

1.2.2.2 实例

对于P0、P1进程,假设有这样一对执行代码

则它们的执行过程为

1.2.2.3 缺点

1.2.3 双标志先检查法

1.2.3.1 算法思想

它背后逻辑是表达意愿

1.2.3.2 实例

则进程P1、P2在访问临界资源之前,会首先检查其他进程是否在使用(表达自己想使用的意愿),只有没有人在访问的时候才进行访问。

1.2.3.3 缺点

试想,当P0在执行到②时,P0的时间片被用完,P1执行⑤,发现此时没有进程在访问,于是继续执行。这样,就会造成同时访问临界资源的情况。

1.2.4 双标志后检查法

1.2.4.1 算法思想

1.2.4.2 实例

P0、P1在使用进程时,首先表达自己想使用的意愿(将自己赋为true),即首先进行上锁,接着再检查是否有别的进程希望使用,如果没有那么自己就可以使用了,如果有那么就等待其他进程结束。

1.2.4.3 缺点

试想,假如按照①⑤②⑥的顺序执行,则P0、P1都想访问资源,造成的结果就是全部都在等对方访问结束,于是发生死锁,谁都访问不了。

1.2.5 Peterson算法

1.2.5.1 算法思想

进程在使用资源前,先表达自己想要使用的意思,接着再表示可以优先让其他进程使用

1.2.5.2 实例

重在理解算法的思想。

根据Turn的值就可以判断出到底是哪个进程最后表达了谦让的意思

1.2.5.3 缺点

试想,P0始终没有去访问资源,但是在该算法中,P0始终占用着处理机,使处理机处于”忙等待“的状态。

1.2.6 总结

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

1.3.1 总览

1.3.2 中断屏蔽方法

1.3.2.1 算法思想

1.3.2.2 实例

1.3.2.3 缺点

事实上,中断屏蔽只可以屏蔽一个处理机,而并不能影响其他处理机,所以如果其他处理机上有进程在访问临界资源就会出错。

1.3.3 Test and Set指令(TSL)

1.3.3.1 算法思想

1.3.3.2 解释

假设P0要进行访问操作。当Lock原来为False时,则说明没有进程在访问,此时P0可以访问。而当Lock为True时,说明此时有其他进程在访问,P0一直执行while代码段,且Lock一直被置为True,直到其他进程访问完毕并将Lock置为False,P0才可以跳出while循环进行访问。

1.3.3.3 优缺点

1.3.4 Swap指令(或称为exchange、XCHG)

1.3.4.1 算法逻辑

1.3.4.2 解释

基本上与TSL算法的逻辑是一样的

1.3.4.3 优缺点

与TSL一致。

1.3.5 总结

1.4 互斥锁

1.4.1 解释

1.4.2 注意

例如我们之前学习的使用一个while循环来实现加锁功能的代码就是自旋锁

1.4.3 缺点

1.4.4 特性

🕮 2 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

相关文章
|
16天前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
45 1
|
1月前
|
算法 数据库
操作系统:经典进程同步问题的高级探讨
操作系统:经典进程同步问题的高级探讨
31 1
|
6天前
|
存储 安全 Linux
深入理解操作系统:从进程管理到内存分配
【6月更文挑战第30天】在数字时代的心脏,操作系统是现代计算不可或缺的组成部分。本文将深入探讨操作系统的核心功能,包括进程管理、内存分配以及文件系统管理。我们将通过实际案例分析,揭示这些机制如何在提高计算机性能的同时保证资源的有效利用。文章旨在为读者提供对操作系统工作原理的深刻理解,并展示其在现代技术中的应用价值。
|
10天前
|
机器学习/深度学习 算法 调度
操作系统中的进程调度策略
【6月更文挑战第26天】本文将深入探讨操作系统中的核心组件之一——进程调度。我们将从进程调度的基本概念入手,分析其重要性以及如何影响系统性能。文章将介绍几种常见的进程调度算法,并通过实例展示它们在实际操作系统中的应用。我们还将讨论现代操作系统中进程调度面临的挑战和未来可能的发展方向。
|
13天前
|
存储 缓存 算法
深入理解操作系统:从进程管理到内存优化
【6月更文挑战第23天】在数字化时代,操作系统是支撑计算设备的心脏。本文将探索操作系统的核心组件,着重于进程管理和内存优化策略,揭示它们如何共同确保系统资源的高效利用和任务的顺畅执行。通过分析现代操作系统的设计哲学和技术实现,本文旨在为读者提供对操作系统内部工作原理的深刻洞察,并展示其对提高计算性能和用户体验的重要性。
|
16天前
|
存储 负载均衡 算法
深入理解操作系统的进程调度
【6月更文挑战第20天】本文将探讨操作系统中的进程调度,包括其定义、重要性以及常见的调度算法。我们将通过具体的例子和代码片段来深入理解进程调度的工作原理和实现方式。最后,我们将讨论进程调度在现代操作系统中的应用和挑战。
|
20天前
|
数据挖掘 调度 开发者
Python并发编程的艺术:掌握线程、进程与协程的同步技巧
并发编程在Python中涵盖线程、进程和协程,用于优化IO操作和响应速度。`threading`模块支持线程,`multiprocessing`处理进程,而`asyncio`则用于协程。线程通过Lock和Condition Objects同步,进程使用Queue和Pipe通信。协程利用异步事件循环避免上下文切换。了解并发模型及同步技术是提升Python应用性能的关键。
42 5
|
18天前
|
调度
操作系统之进程调度机制
操作系统之进程调度机制
16 1
|
18天前
|
存储 缓存 运维
深入理解操作系统:从进程管理到内存分配
在数字时代的心脏,操作系统扮演着至关重要的角色。本文将深入探讨操作系统的核心机制,包括进程管理、内存分配和文件系统,揭示它们如何协同工作以支持现代计算需求。通过技术深度解析和实际应用示例,我们将一窥操作系统的复杂性与优雅,理解其在软件开发和系统性能优化中的重要性。
|
19天前
|
负载均衡 算法 调度
深入理解操作系统之进程调度
本文旨在探究操作系统核心机制之一——进程调度。文章首先概述进程与线程的基本概念,随后详细解析进程调度的目标、常见算法及其优缺点,并探讨现代操作系统中进程调度的高级话题,如多核调度和实时系统的调度策略。通过实例分析,本篇文章将帮助读者深化对进程调度复杂性的理解,并指出未来可能的发展方向。