线程的概念及实现
1.线程的定义
线程是基于进程的一个执行单位或进程内一个可调度的实体,一个进程可以有一个或多个线程,这些线程共享进程所拥有的全部资源,但是每个线程有自己运行中必不可少的资源(线程组成:程序计数器、一组寄存器和栈),线程可以称为轻量级的进程。
2.线程的属性
1.独立调度的基本单位
2.可并发执行。
共享进程资源。
轻型实体。
3.线程的类型
对于进程,无论是系统进程还是用户进程,在进行切换时都要依赖内核中进程调度,因此,无论什么进程都与内核有关,但对线程来说可以分为两类:
1.用户初线程:线程仅存在用户级中,对于这种线程的创建、撤销和切换,不利用系统调用来实现,即无须通过中断进入os内核,因而这种线程与内核无关,其切换速度特别快。
2.内核支持线程:线程依赖于os的内核,线程的创建、撤销及切换都是由os内核来实现的。在内核中保留没给安城的线程控制块(TCB),用于对该线程控制和管理。
4.进程同步
概念:多道程序系统中进程是并执行的,这些进程之间存在着不同的相互制约关系,为了协调这些进程之间的相互制约关系,就需要实现进程的同步。
1.临界资源:
在计算机中有许多资源一次只能允许一个进程使用,如果有多个进程同时去使用这类资源就会引起激烈的竞争。因此必须保护这些资源,避免两个或多个进程同时访问这类资源。
解决办法:一旦分配资源就一直为他所占有,一直到使用完才释放该资源。
临界资源:我们把一次仅允许一个进程使用的资源为临界资源。如:独享设备、内存中的公共数据结构、公共变量等都是临界资源。
访问临界资源算法描述利用锁机制实现
锁:在同步机构中,常用一个变量来代表临界资源的状态,并称它为锁。
表示方法:0-资源可用,1-资源已被占用
关锁操作:进程使用临界资源之前必须完成下列动作:
1.考察锁位的值1或0;
如果原来的值为0,将锁位置成1(表示占用资源);
如果原来的值是1(即资源已被占用)则返回第一步再考察。
2.临界区
在每个进程中,访问临界资源的那段程序成为临界区。进程一旦进入临界区,就必须能够实现对资源的独占使用。
用户编程时,并不确定变成是否是临界区,对临界区的判定是由操作系统来进行的。
流程
3.同步定义(两层含义)
1.各进程互斥访问临界资源。(互斥访问)
2.各进程在执行次序上的协调关系。(同步制约)
4.同步机制应遵循原则(访问临界区):
1.空闲则入:当无进程在互斥区时,任何有权使用互斥区的进程可进入。
2.忙则等待:不允许两个以上的进程同时进入互斥区。
3.优先等待:任何进入互斥区的要求应在有限的时间内得到满足。
4.让权等待:不能进入临界区的进程,应释放cpu(如转换到阻塞状态)
2.信号量机制
P/V操作
由P操作原语和V操作原语组成,其意义是在一个整型变量S上定义两个操作,该整型变量称为信号量,只能由P操作和V操作进行修改。
P操作:
P操作记为P(S),其中S为信号量,执行时主要完成的动作:S=S-1 ,若S>=0,则进程继续执行。若S<0,则该进程被阻塞,并将它插入该信号量的等待队列中。
V操作:
V操作记为V(S),其中S为信号量,执行时主要完成的动作:S=S+1,若S>0,则进程继续执行。若S<=0,则从信号量等待队列中移出第一个进程,使其变为就绪状态,然后再返回原进程继续执行。
注意:使用P/V操作,信号量的入口值非常重要,它关系着进程是否进入等待状态,或者是否被唤醒。信号量一般是指资源数量。
1.信号量的值
使用P/V操作,信号量的入口值非常重要,它关系着进程是否进入等待状态,或者是否被唤醒。
信号量的物理意义:信号量大于零,表示可用资源的数目,信号量小于零,其绝对值为请求资源而被阻塞的进程数目。
互斥:信号量S的值为临界资源数。若只有一个临界资源,则S=1,若10个则S=10.
同步:信号量S的值为0,即S=0