计算机操作系统笔记(7)--进程管理之线程

来源:互联网 发布:音乐简谱制作软件 编辑:程序博客网 时间:2024/05/22 02:31

目的及要求
1)掌握线程的基本概念
2)理解线程的同步和通信
3)了解线程的实现方式

一 线程的基本概念

1 线程的引入

引入进程的目的:使多个程序能并发执行,提高资源利用率和系统吞吐量。
引入线程的目的:减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。

进程的基本属性
1)进程是一人可拥有资源的独立单位。
2)进程同时又是一个可独立调度和分派的基本单位。

线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所附属的进程的所有资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。

在多线程OS中,通常一个进程包括多个线程,每个线程是利用CPU的基本单位,是花费最小开销的实体。

线程和进程的比较
线程是属于进程的(线程不能单独存在),线程运行在进程空间内,每个线程共享其所附属的进程的所有资源(线程不拥有资源,线程只使用资源),当进程退出进该进程所产生的线程都会被强制退出并清除。

调度 并发性 拥有资源 系统开销 进程 传统基本单位 低 拥有 高 线程 基本单位 高 使用 低

2 线程的属性

1)轻型实体(为进程的一个实体):基本上不拥有资源。只有一点必不可少的、能保证独立运行的资源。
2)独立调度和分派的基本单位:在CPU在运行的基本单位。
3)可并发执行:同一进程中线程可并发执行,不同进程中的线程也可并发执行。
4)共享进程资源:基本不拥有资源,使用所属进程的资源。

3 线程运行的状态

1)执行状态:线程正在CPU上执行。
2)就绪状态:具有所需要的所有资源,等待CPU空闲。
3)阻塞状态:缺少某些资源,等待资源的完成。

4 线程的创建和终止

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

创建新线程时,需要利用纯种创建函数(或系统调用),并提供相应参数,线程创建函数执行完后,返回一个线程标识符供以后使用。

线程终止方式
1)自愿退出
2)出错或被其他线程强行终止

线程被终止后并不立即释放释放资源,只有当进程中的其它线程执行分离函数后,资源才分离出来能被其他线程利用。

5 多线程OS中的进程

在多线程OS中,进程是作为拥有资源的基本单位,通常进程都包含多个线程并为它们提供资源,但进程不再作为一个执行的实体。

此时进程的属性
1)作为系统资源分配的单位
2)可包括多个线程
3)进程不是一个执行的实体,但仍具有执行相关的状态

二 线程的同步和通信

为了支持不同频率的交互操作不同程度的并行性,在多线程OS中通常提供多种同步机制。

1 互斥锁

用于实现线程间对资源互斥访问的机制。
Lock(); Unlock();
为了减少线程被阻塞的机会,有的系统还提供了一种用于mutex上的操作命令Trylock()

2 条件变量

条件变量通常都与互斥锁一起使用。互斥锁用于短期锁定,主要用来保证对临界区的互斥进入,而条件变量则用于线程的长期等待,直到所等待的资源成为可用资源。

3 信号量机制

1)私有信号量:实现同一进程内的各线程间的同步。
2)公用信号量:也称为系统信号量,实现不同进程间或不同进程的线程间的同步。

三线程的实现方式

1 内核支持线程(Kernel-Supported Threads)

对于通常的进程,无论是系统进程还是用户进程,进程的创建撤消以及要求由系统设备完成的I/O操作,都是利用系统调用而进入内核,再由内核中的相应处理程序完成的。我们说它们是在操作系统内核的支持下运行的。

内核支持线程也依赖于内核支持运行的,线程的创建和撤销也依靠内核,此外在内核空间还为每一个内核支持线程设置一个线程控制块,内核是根据该控制块感知某线程的存在,并对其进行控制的。Windows NT和OS/2支持内核线程。

内核维护进程和线程
优点
1)一个线程发起系统调用而阻塞,不会影响其他线程的运行;
2)时间片分配给线程,所以多线程的进程获得更多CPU时间。

缺点:用户线程模式切换开销大。

2 用户级线程(User-level Threads)

不依赖于OS核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

如:数据库系统informix,图形处理PageMaker。

线程的维护由应用进程完成,内核不了解用户级线程的存在。

优点
调度、切换由应用软件内部进行,通常采用简单的规则,也无需用户态/核心态切换,所以速度很快

缺点
1)一个线程发起系统调用而阻塞,则整个进程在等待;
2)时间片分配给进程,线程多则每个线程就慢。

0 0
原创粉丝点击