管程机制把信号量及其操作原语“封装”在一个对象内部。
1.管程的组成
(1)一组局部变量
(2)对局部变量操作的一组过程
(3)对局部变量进行初始化的语句。(联想面向对象中的类)
生产者消费者问题对缓冲区定义一个管程。
2.管程特点
任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据;就如同使用临界资源,就要先通过其信号量的申请。
任何时刻,仅允许一个进程在管程中执行某个内部
3.管程如何实现同步?过程。
(1)对共享变量互斥操作:
管程的特点直接实现了该要求,进程一次一个进入管程调用内部过程操作共享变量。
管程的互斥访问完全由编译程序在编译时自动添上,无须程序员关心,能保证正确。
(2)操作的同步控制:
靠条件变量的操作管理实现。
进入管程但不能获取资源操作的过程将阻塞,并在满足条件时被唤醒执行。
4.条件变量
主要作用就是进程同步的阻塞和唤醒机制。
类似信号量变量,但不取具体值,相当于每个阻塞队列的队列指针。
5.管程的优点
(1) 保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。
(2)管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,使同步操作相对集中,从而增加了模块的相对独立性
(3)引入管程可提高代码的可读性,便于修改和维护,正确性易于保证:采用集中式同步机制。一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰。
6.管程的缺点
(1)大多数常用的编程语言中没有实现管程,如果某种语言本身不支持管程,那么加入管程是很困难的。
(2)虽然大多数编程语言也没有实现信号量,但可将P、V操作作为一个独立的子例程或操作系统的管理程序调用加入。
、
通信:
1.进程通信的类型
高级通信机制可归结为四大类
共享存储器系统(操作存储区方式)
相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
基于共享数据结构的通信方式(低级)
基于
a.基于共享数据结构
b.基于共享存储区
②消息传递系统(发–收方式)
最广泛使用的一种,进程间的数据交换,以格式化的消息为单位。屏蔽底层复杂操作。
单机:操作系统底层编程中的消息传递系统调用;
计算机网络:消息称为报文。程序员直接利用系统提供的一组通信命令(原语)进行通信。(④客户机-服务器系统)
如socket编程,利用函数库的send、receive等命令即可实现网络通信
所谓“管道”,是指用于连接一读进程和一写进程以实现通信的一个共享文件,又名pipe文件。
向共享文件输入的写进程以字符流形式将大量的数据送入管道;而接收管道输出的读进程则从管道中接收(读)数据。
首创于UNIX系统。其管道机制需提供三方面的协调能力:互斥、同步、确定对方是否存在。
2.消息传递通信的实现方法
1)直接通信方式
2)间接通信方式
3.消息传递系统的实现
单机和网络环境下的高级进程通信广泛采用“消息传递”方式,需要考虑的问题:
通信链路的建立
消息格式
同步方式
一、认识线程
1.线程的引入
多道程序管理:追求效率的目的下实现“并发
2.线程的属性
多线程OS中,一个进程包括多个线程,每个线程都是利用CPU的基本单位。
轻型实体:只需一点必不可少的、能保证独立运行的资源。(TCB)
独立调度和分派的基本单位:调度切换迅速且开销小。
可并发执行
共享进程资源:同进程中的线程可共享相同的进程地址空间、已打开文件、信号量机构等。
3.线程的信息
4. 线程的创建和终止
5. * 线程与进程的比较
6. 调度:线程作为CPU调度的基本单位,而进程只作为其它资源分配单位。
并发性:进程之间可以并发,实质上是不同进程中的两个线程并发。一个进程的多个线程之间亦可并发。
拥有资源:进程间资源相互独立;同一进程的各线程间共享。某进程内的线程在其它进程不可见
系统开销:线程上下文切换在同进程环境下上下文切换要快得多。因为同进程内线程间共享内存地址和打开的文件资源;
6.线程的管理
同步和通信机制
1)互斥锁
比较简单的,控制线程互斥访问资源;
适用于高频度使用的关键共享数据和程序段;
unlock和lock两个锁操作原语;
2)条件变量
与互斥锁一起使用
锁保证互斥进入临界区,但利用条件变量使线程阻塞
注意不满足条件时,wait条件变量:
释放互斥锁
进程阻塞在条件变量指向队列中
被唤醒后要重新再设互斥锁
3)信号量
私用信号量(private samephore)
用于同进程的线程间同步,数据结构存放在应用程序的地址空间。属于特定进程,OS感知不到其存在。
公用信号量(public samephore)
用于不同进程间或不同进程中线程的同步,数据结构由OS管理,存放在受保护的系统存储区。