一、什么是进程、线程
进程定义:1、一个正在执行的程序实体
线程:一个进程中可以有多个线程,多个线程共享进程的资源,线程相互独立,有自己的执行态,上下文,可视为在进程内一个独立的程序计数器。
个人理解:进程是个团队,有团队资源,团队内部纪律(进程控制块),线程是团队成员,团队成员彼此独立,共享团队资源
进程资源:处理器时间、存储器、文件、I/O设备
二、并发性:互斥和同步
1、并发原理
伪并行: 单处理器多道程序设计的交替执行。(利用中断,调度到另一个程序)
1)方法:控制中断,控制资源的访问,
2)进程的交互
竞争、通过共享合作、通过通信合作
这里主要讨论竞争关系面临的控制问题:互斥、死锁、饥饿。
- 临界资源,使用临界资源的程序称为临界区
3、互斥的要求:一次只准一个进入临界区,不会出现死锁和饥饿,驻留时间有限制・・
2、几种互斥的硬件实现方法。
1)中断禁用
单个处理器上不能被中断
缺点:多处理器不能保证互斥,且执行速度慢
2)专用机器指令
3、信号量
1)信号量类别
2)原语操作:
semWait() 信号量-1
semSignal() 信号量+1
信号量初始化只能为非负值
信号量若为正数,则其值等于执行完semWait后可执行进程的数目(例:s=1,执行完semwait后只可以执行一个进程,若s=0,则semwait后所有进程堵塞)
4)二元信号量操作:
相差的是,信号量的值只有0和1
5)互斥量:
6)消费者问题
一个或多个生产者:产生数据放在缓冲区
- 生产者和消费者无限缓冲区函数:
消费者开始通过生产者的semSignal(delay) ,结束通过自己的判断
问题:1、生产者在生产过程中会竞争同一个位置
错误的用二元信号量解决白无限缓冲审通过产生产者和消费者问题,原因在于:(代码见书155)
未解决问题三: 消费时最终锁定delay时需要delay已经为0,但是生产可以解锁delay,故在消费者解锁s后即开始生产,会导致delay=1,故第一次判断无效,循环后最终n==0时,delay锁定后不会堵塞。- 生产者消费者有限缓冲区问题
使用信号量解决:新建一个信号量,设为e,其值为缓冲区大小; 生产,semWait(e); 消费,semSignal(e)
7)信号量的实现:
信号量作为原语操作通过软件互斥实现,也可以通过硬件或固件实现
三、管程
1、使用信号的管程
定义:由一个或多个过程、一个初始化序列和局部数据组成的软件模块
如何使用管程:进程通过调用管程中的一个过程进入。
问题:1、如何实现同步
bounderbuffer模块: 控制缓冲区
cond 用来声明条件变量:
2、使用管程解决有限缓冲区的生产者、消费者问题。
monitor boundebuffer ;
声明数据集:
声明条件变量;这里为notfull 和 notempty
文章来源: 操作系统复习笔记