【0327】并发:互斥和同步

    技术2022-07-10  170

    并发:互斥和同步

    定义

    多任务

    单核CPU执行多任务:操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

    并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

    并发VS并行

    并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的

    名词解释

    原子操作:一个函数或动作由一个或多个指令的系列实现,对外是不可见的,要么一组指令一起执行,要么不执行,没有其他进程可以看到其中间状态或中断此操作。原子性保证了并发进程的隔离。

    死锁Dealock:每个进程都在等待其他进程做完某些事情而不能继续执行的情况

    活锁:多个进程为了响应其他进程的变化而持续改变自己的状态但不做有用工作的情况

    临界区critical section:一段代码,在这段代码中进程将访问共享资源。

    互斥 Mutual exclusion:一个进程在临界区访问共享资源时其他进程不能进入该临界区访问任何共享资源

    实现互斥的三种方法:禁用硬件中断;基于软件的方法;更高级抽象(原子操作指令)

    竞争条件race condition:竞争条件发生在多个进程或线程同时对(共享)数据进行读写操作,因此(数据的)最终取值取决于进程指令(对共享数据的)操作顺序

    饥饿starvation:一个可运行进程尽管能继续执行,但被调度程序无限期地忽视,而不能被调度执行的情形

    操作系统设计的核心问题是进程和管理:多道程序设计技术(单处理器),多处理器技术(多处理器),分布式处理器状态【管理进程】

    并发在以下三种不同的上下文出现:

    多应用程序,结构化应用程序,操作系统结构

    并发处理带来的困难

    全局资源共享充满危险;操作系统很难对资源进行最优化分配;定位程序设计错误非常困难。

    操作系统可以跟踪进程状态,一边进行进程的调度和切换;能够为各个进程分配资源;必须保护每个进程的数据和物理资源;一个进程的功能和输出结果必须和执行速度无关(本章主题)

    进程交互

    进程之间完全不知道相互间的存在

    进程间接【通过文件共享,共享合作等】感知别的进程存在

    进程直接感知【输入输出】其余进程的存在

    进程间的资源竞争

    临界区没有进程使用时,其他进程立即没有延迟地进入临界区。每个进程在临界区的时间是有限的。

    进程同步与竞争

    两个或多个进程执行同一段代码或访问同一资源的现争称为竞争(Race)。

    硬件支持

    中断:关闭中断,一直独占CPU。

    缺点:交替和重叠无法实现,并发处理不能实现。系统效率降低,容易引发死锁。只适用于单处理器系统。

    特殊机器指令:

    原子性要求:指令周期内,特殊机器指令不会被中断。

    •实现过程中:如果有进程在访问指令的内存单元,则其他进程不能访问该指令所在的内存单元。

    通过机器硬件进行设置

    缺点:程序员负担加大;会发生空转,占用CPU资源;可能引发死锁;当一个进程离开临界区时有超过一个进程在等待,可能发生饥饿。

    信号量

    计数信号量

    信号量是一种数据结构,它包含一个整数和阻塞队列。count>0时代表有可用临界区资源;count<0时代表在阻塞队列等待临界资源的进程数量。

    每当一个进程试图试问信号量保护的临界资源时,必须先执行Semwait操作:

    Count-- If count <0, then the process executing the semWait is blocked in queue. (<0)

    当一个进程释放或产生一个临界资源后,必须执行Semsignal操作:

    Count++ If count <=0, then a process blocked by a semWait operation in queue, if any, is unblocked. ( <=0 )

    二元信号量

    value=0,1 等于1表示有临界区资源可用

    信号量术语:

    Binary Semaphore 二元信号量【只取0 /1的信号量】

    Mutex互斥信号量【类似于二元信号量,关键区别在于为其加锁的进程和为其解锁的进程必须为同一个新进程】s

    Counting Semaphore 计数信号量=General Semaphore一般信号量=信号量【非二元信号量】

    Weak Semaphore弱信号量【没有规定进程从队列移出顺序的信号量称为弱信号量】

    Strong Semaphore强信号量【被阻塞时间最久的进程最先从队列释放,采用这种FIFO策略的是强信号量】

    Processed: 0.011, SQL: 9