临界区(Critical Section):
1. 临界区是指一个程序片段或代码块,其中包含了对共享资源的访问或修改操作。
2. 在临界区内执行的代码可能会与其他并发执行的进程或线程相互干扰,导致竞态条件(Race Condition)等问题。
3. 为了确保并发程序的正确性,必须使用同步机制来保护临界区,以防止多个进程或线程同时进入该区域。
临界资源(Critical Resource):
1. 临界资源是指多个进程或线程共享的资源,例如共享内存、文件、硬件设备等。
2. 当多个进程或线程需要访问或修改同一临界资源时,必须进行适当的同步,以避免数据损坏或不一致性。
3. 临界资源的正确管理是并发编程中的一个关键问题。
共享资源(Shared Resource):
1. 共享资源是多个进程或线程可以同时访问的资源,它通常存储着数据或状态信息。
2. 共享资源可以是临界资源,也可以是非临界资源。临界资源需要特别的同步机制来保护,而非临界资源可能不需要同步。
3. 共享资源的合理管理是确保并发程序正确运行的关键,它涉及到锁定机制、信号量、互斥量等同步工具的使用。
调度原则:
-
互斥性(Mutual Exclusion):
- 这是最基本的原则,它确保在任何给定时间只有一个进程或线程可以进入临界区。
- 当一个进程进入临界区时,其他进程必须等待,直到进程退出临界区。
-
公平性(Fairness):
- 进程调度应该是公平的,每个进程都有机会进入临界区。
- 公平性原则确保没有进程永远被阻塞在等待进入临界区的状态。
-
优先级(Priority):
- 进程可以根据其优先级获得进入临界区的权利。
- 高优先级的进程可能会在低优先级的进程之前进入临界区,但这也需要确保低优先级的进程不会被永久阻塞。
-
先来先服务(First-Come-First-Served,FCFS):
- 按照进程或线程到达临界区的顺序来确定调度顺序。
- 先到达的进程有权首先进入临界区,这种策略简单且公平。
-
等待时间(Waiting Time):
- 考虑进程等待的时间,等待时间较长的进程可能会优先进入临界区,以减少其等待时间。
- 这有助于减少饥饿(Starvation)情况的发生,即某个进程长时间等待而得不到资源。
-
优先让权(Priority Inversion):
- 当高优先级进程等待低优先级进程的资源时,系统可能会将低优先级进程提升为高优先级,以便高优先级进程尽快完成任务。
- 这有助于防止高优先级进程长时间等待低优先级进程释放资源的情况。