【操作系统】进程同步
这篇笔记我们讲讲进程协作之间的进程同步。
首先还是看这张图,对我们当前正在学习的地方做一个定位:
上一篇笔记我们已经讲了进程通信相关的知识,这篇笔记我们讲讲进程协作之间的进程同步。
进程同步
1. 基本概念
1.1为什么要提出?
进程同步是为了协调多个进程或线程对共享资源的访问,以确保数据一致性、避免冲突,并保证程序按预期执行。在操作系统中,多个进程或线程可能需要同时访问共享资源(例如内存、文件、硬件设备等),如果没有合适的同步机制,可能会出现一些不可预期的问题,如数据竞争、死锁(后面详讲)、资源浪费等。
1.2 同步是什么?
进程我们前面已经提及过了,这里不多赘述,直接理解同步
同步分为进程同步和资源同步,进程同步我们下面会详细讲述,这里简单提一下。进程同步指多个进程在特定点会合(join up)或者握手使得达成协议或者使得操作序列有序。数据同步指一个数据集的多份拷贝一致以维护完整性。常用进程同步原语实现数据同步。1
1.3 什么又是互斥?
两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象被称作进程互斥。 也就是说,一个进程正在访问临界资源,另一个要访问该资源的进程必须等待。
1.4 临界资源是啥?
1.4.1 系统资源
前面一直说系统资源,或许有同学会疑问啥是系统资源。在计算机科学中,系统资源(英语:system resource),或是资源(英语:resource),意指是一个电脑系统中,限制其运算能力的任何实体或是虚拟的组成元件。任何连结到电脑系统中的装置,都是一个资源,例如键盘、萤幕等。电脑系统内部的任何元件都是资源,如CPU,RAM。电脑系统中的软件虚拟元件,包括档案,网络连线与记忆体区块等,都是一种资源。2
1.4.2 临界资源(共享资源)
临界资源(Critical Resource)是指在并发环境中,多个进程或线程需要共享访问,但同一时刻只能被一个进程或线程使用的资源。也就是一种特殊的共享资源。3
在多道程序环境下,存在着临界资源,它是指多进程存在时必须互斥访问的资源。也就是某一时刻不允许多个进程同时访问,只能单个进程的访问。我们把这些程序的片段称作临界区或临界段,它存在的目的是有效的防止竞争条件又能保证最大化使用共享数据。而这些并发进程必须有好的解决方案,才能防止出现以下情况:多个进程同时处于临界区,临界区外的进程阻塞其他的进程,有些进程在临界区外无休止的等待。除此以外,这些方案还不能对CPU的速度和数目做出任何的假设。只有满足了这些条件,才是一个好的解决方案。4
1.4.3 临界区
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,例如:semaphore。只能被单一线程访问的设备,例如:打印机。5
2. 同步如何实现
实现同步也就是实现临界区进程(或线程)之间的互斥访问
2.1 访问原则
2.2 软件实现(后续补充)
2.2.1 单标志法
2.2.2 双标志先检查法
2.2.3 双标志后检查法
2.3 硬件实现(后续补充)
2.3.1 中断屏蔽方法
2.3.2 Test-And-Set((TS指令/TSL指令)
2.3.3 Swap指令(EXCHANGE,XCHG指令)
2.3.4 信号量机制(重点,下一节详细讲解)
3. 参考资料
维基百科:同步_(计算机科学)↩︎
维基百科:资源_(计算机科学)↩︎
ChatGPT:临界资源↩︎
百度百科:进程互斥↩︎
百度百科:临界区↩︎