操作系统 -- 进程和线程同步

简介: 操作系统 -- 进程和线程同步

同步


多道程序设计:现代操作系统的重要特性


并行


进程和线程:操作系统抽象出来用于支持多道程序设计


CPU调度:实现多道程序规则


调度算法:不同的策略


  • 独立的线程


不和其他线程共享资源或者状态

确定性:输入决定状态

可重现:能够重现起始条件

调度顺序不重要


  • 合作线程


在多个线程中共享状态

不确定性

不可重现


  • 不确定性和不可重现意味着bug可能是间歇性发生的


为什么要合作


  • 进程和线程,计算机和设备需要合作
  • 优点1:共享资源
  • 优点2:加速
  • 优点3:模块化


程序可以调用fork()函数来创建一个新的进程


假设两个进程并发执行


Race Condition (竞态条件)


系统缺陷:结果依赖于并发执行或者事件的顺序/时间


  • 不确定性和不可重现


如何避免竞态?


  • 让指令不会被打断


Atomic Operation(原子操作)


  • 原子操作是指一次不存在任何中断或者失败的执行


该执行成功结束

或者根本没有执行

并且不应该发现任何部分执行的状态


  • 实际上的操作往往不是原子的


有些看上去是原子操作,实际上不是

连X++这样的简单语句,实际上都是由3条指令构成

有时候甚至连单挑指令都不是原子的


Critical Section(临界区)


临界区是指进程中的一段需要访问共享资源并且当另一个进程处于相应的代码区域时不会被执行的代码区域


  • 互斥:同一时间临界区最多存在一个线程
  • Progress:如果一个进程、线程想要进入临界区,那么它最终会成功
  • 有限等待:如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的
  • 无忙等待:如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起


临界区对代码的保护:


  • 禁用硬件中断:


没有中断,没有上下文切换,没有并发

硬件将中断处理延迟到中断被启用之后

大多数现代计算机体系结构都是提供指令来完成


进入临界区

禁用中断


离开临界区

启用中断


一旦中断被禁用,线程就无法被停止

要是临界区可以任意长怎么办?

一定要慎用


基于软件的解决方案


  • 更高级的抽象


硬件提供了一些原语:中断禁用,原子指令等


操作系统提供更高级的编程抽象来简化并行编程:锁,信号量等


锁是一个抽象数据结构

使用锁来编写临界区


大多数现代计算机体系结构都提供了特殊的原子操作指令

test-and-set测试和位置

交换:交换内存中的两个值


Mutual exclusion(互斥)


当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享资源


Dead Lock(死锁)


两个或者以上的进程,在相互等待完成特定的任务,而最终没办法将自身的任务进行下去


Starvation(饥饿)


一个可执行的进程被调度器持续忽略,以至于隋斐然处于可执行状态但是却不被执行

目录
相关文章
|
1天前
|
消息中间件 Java 调度
Java多线程基础-3:进程与线程间的区别的联系
进程是操作系统中运行的应用程序,具有独立内存空间,包含代码、数据和堆栈,是资源分配的最小单位,而线程是CPU调度的最小单位,是进程内的执行任务,多个线程可共享进程资源。
10 0
|
1天前
|
IDE Java 开发工具
"如何使用 jconsole 查看Java进程中线程的详细信息? "
当Java程序运行时,其中的一些线程也正在执行。我们可以用第三方工具 jconsole 来查看Java进程中线程的执行情况和详细信息,这有助于我们对多线程编程的理解。
7 0
|
1天前
|
消息中间件 Java C++
"Java多线程基础-2:简介虚拟地址空间——保障进程间独立性的机制 "
如何保障进程之间这样的独立性?操作系统采用了“虚拟地址空间”的方式。
6 0
|
1天前
|
存储 Java 调度
Java多线程基础-1:通俗简介操作系统之进程的管理与调度
操作系统是一个复杂的软件,具备许多功能。其中,进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。
9 0
|
1天前
|
机器学习/深度学习 监控 调度
深度学习在图像识别中的应用与挑战深入理解操作系统中的进程调度策略
【5月更文挑战第27天】 随着人工智能技术的飞速发展,深度学习已经成为图像识别领域的核心技术。本文将探讨深度学习在图像识别中的应用,以及在实际应用中所面临的挑战。我们将介绍深度学习的基本原理,以及如何将其应用于图像识别任务中。此外,我们还将讨论在实际应用中可能遇到的一些问题,如数据不平衡、模型过拟合等,并提出相应的解决方案。
|
1天前
|
算法 调度 虚拟化
深入理解操作系统的进程调度策略
【5月更文挑战第27天】 在现代操作系统的核心功能中,进程调度策略是维护系统稳定运行和资源有效分配的关键。本文将探讨操作系统中不同的进程调度算法,包括它们的原理、优势、局限性以及在实际系统中的应用场景。通过对先进先出(FIFO)、最短作业优先(SJF)和轮转(RR)等经典调度算法的分析,结合多级反馈队列和实时调度算法的讨论,本文旨在为读者提供一个全面的视角来理解操作系统如何管理进程调度,保证系统的高效性和响应性。
|
1天前
|
算法 调度
深入理解操作系统的进程调度策略
【5月更文挑战第27天】 在现代操作系统中,进程调度策略的选择对系统性能有着至关重要的影响。本文将探讨操作系统中常见的进程调度算法及其优缺点,并分析如何根据不同的应用场景选择合适的调度策略。通过对比先来先服务(FCFS)、短作业优先(SJF)和轮询调度(RR),我们深入了解每种策略背后的设计哲学及其在实际应用中的表现。
|
1天前
|
调度 开发者
深入理解操作系统中的进程调度策略
【5月更文挑战第27天】 在多任务操作系统中,进程调度策略是决定系统性能和响应速度的关键因素之一。本文将深入探讨现代操作系统中常用的进程调度策略,包括先来先服务(FCFS)、短作业优先(SJF)、轮转(Round Robin)以及多级反馈队列(Multilevel Feedback Queue)。我们将分析每种策略的工作原理、优缺点以及适用场景,帮助读者理解如何根据不同的应用需求选择合适的进程调度方法。
|
1天前
|
算法 Linux 调度
深入理解操作系统之进程调度策略
【5月更文挑战第27天】 在多任务操作系统中,进程调度策略是决定系统性能和用户体验的关键因素。本文将详细探讨三种主要的进程调度算法:先来先服务(FCFS)、短作业优先(SJF)和轮转调度(RR)。通过比较它们的优缺点,并结合实际操作系统案例,我们旨在提供一个全面的视角以帮助读者深入理解这些调度策略的工作原理及其在不同场景下的应用。
|
1天前
|
算法 Linux 调度
深入理解操作系统中的进程调度策略
【5月更文挑战第27天】 在现代操作系统中,进程调度策略是确保系统资源有效利用和用户服务质量的关键。本文将探讨不同的进程调度算法及其对系统性能的影响。我们将从简单的先来先服务(FCFS)策略开始,逐渐过渡到更复杂的轮转调度(RR)、多级反馈队列(MFQ)以及实时调度算法。文章还将讨论各种策略如何平衡响应时间、吞吐量和公平性,同时考虑到不同类型作业的需求。最后,通过分析现代操作系统如Linux和Windows的实际应用情况,提供对这些理论概念在实际环境中应用的深入见解。