线程

一、认识线程

1.线程的引入

多道程序管理:追求效率的目的下实现“并发”

利用进程实现的多道程序系统中

进程是一个可拥有资源的独立单位;

是一个可独立调度和分派资源的基本单位

 

有如下频繁操作:创建进程、撤销进程、进程切换

    PCB信息,CPU环境的管理等付出不少时空开销,尤其在进程切换上。

 

所以并发程度不是随意设定的:

并发进程数量不宜过多,切换频率不宜过高。

限制并发程度问题所在:进程实体信息量大,对进程的管理操作越多,与运行时间的比值就越大,运行效率就低。

 

怎样进一步提高并发效率,节约时空开销?     

以进程为单位分配资源

将进程划分为多个功能单位调度执行。

 

多线程系统中,同一个进程中的多个线程

共享进程资源

可并发执行

 

2.线程的属性

多线程OS中,一个进程包括多个线程,每个线程都是利用CPU的基本单位。

轻型实体:只需一点必不可少的、能保证独立运行的资源。(TCB)

独立调度和分派的基本单位:调度切换迅速且开销小。

可并发执行

共享进程资源:同进程中的线程可共享相同的进程地址空间、已打开文件、信号量机构等。

 

3.线程的信息

状态参数

标识符、运行状态、优先级、寄存器状态、堆栈、专有存储器、信号屏蔽等。

运行状态

执行、就绪、阻塞

 

4. 线程的创建和终止

在多线程OS中,应用程序启动时,通常只有一个线程(初始化线程)在执行,它根据需要再创建若干线程。

 

5.多线程系统中的进程

进程只是用于分配系统资源

包括多个线程

不是执行实体,线程在进程范围内作为执行实体。

 

* 线程与进程的比较

调度:线程作为CPU调度的基本单位,而进程只作为其它资源分配单位。

并发性:进程之间可以并发,实质上是不同进程中的两个线程并发。一个进程的多个线程之间亦可并发。

拥有资源:进程间资源相互独立;同一进程的各线程间共享。某进程内的线程在其它进程不可见

系统开销:线程上下文切换在同进程环境下上下文切换要快得多。因为同进程内线程间共享内存地址和打开的文件资源;

 

6.线程的管理

同步和通信机制

1)互斥锁

比较简单的,控制线程互斥访问资源;

适用于高频度使用的关键共享数据和程序段;

unlock和lock两个锁操作原语;

2)条件变量

与互斥锁一起使用

锁保证互斥进入临界区,但利用条件变量使线程阻塞

注意不满足条件时,wait条件变量:

释放互斥锁

进程阻塞在条件变量指向队列中

被唤醒后要重新再设互斥锁

3)信号量

私用信号量(private samephore)

用于同进程的线程间同步,数据结构存放在应用程序的地址空间。属于特定进程,OS感知不到其存在。

公用信号量(public samephore)

用于不同进程间或不同进程中线程的同步,数据结构由OS管理,存放在受保护的系统存储区。

 

互斥锁是为了上锁而优化的;条件变量是为了等待而优化的;信号灯即可用于上锁,也可用于等待,因而可能导致更多的开销和更高的复杂性。

三种机制适用逐渐复杂的同步情况

 

二、线程的实现方式

 

1.内核线程KST(kernel-level thread)

依赖于内核,利用系统调用由OS内核在内核空间完成创建、撤消、切换等线程工作。时间片分配给线程,所以多线程的进程获得更多CPU时间。

2.用户线程ULT(user-level thread)

无须利用系统调用,不依赖于OS核心。进程利用线程库函数创建、同步、调度和管理控制用户线程。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,速度比kst快。

3.组合方式

内核支持多KST线程的管理,同时也允许用户应用程序级的线程管理。

 

用户级线程需借助某种形式的中间系统取得内核服务,用户程序复杂

运行时系统:管理和控制线程的函数/过程集合。

内核控制线程,轻型进程LWP

1、Runtime System

2、轻权进程(LightWeight Process)

posted @ 2018-11-27 16:42  Endless·Dream  阅读(158)  评论(0编辑  收藏  举报