预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共20页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十八讲线程概念,用户级线程实现目的与要求:掌握线程概念,线程与进程区别及用户级线程的实现.重点与难点:线程如何从原进程概念中剥离出来,线程控制块,线程状态.用户级线程实现方法及优缺点.线程的引入传统进程既是除了处理机以外的资源分配单位(如内存占用单位)又是执行单位。随着共享内存多外理机的发展,为了支持进程内多道程序设计而引入线程。8.1.1.对称多处理对称多处理机指共享内存且多个处理机都可响应中断且可以运行用户和核心程序的多处理机系统。新结构对操作系统的要求:多任务并行支持,希望同一进程的程序可同时在多CPU上运行,同时还共享进程存储空间。同步支持,当运行在不同CPU上的程序访问共享数据时要有利用硬件支持的同步手段(如:Test_and_set指令)。每个CPU都应该能够运行操作系统调度程序自行调度。多CPUcache一致性的要求(全部由硬件实现或由硬件和操作系统合作实现)。8.1.2线程概念一.进程与线程区别新的进程被定义为:资源分配单位。线程定义为:CPU分配单位(执行单位)。新进程描述:一个独立的进程空间,可装入进程映像。进程关联的执行文件。进程所用系统其它资源(如设备、文件等)。一个或多个线程。进程在创建时一般同时创建好第一个线程,其它线程按需要由用户程序请求创建。线程TCB包括:线程标识信息;状态和调度信息;现场信息(组织成栈帧);线程私有存储区;指针指向PCB。传统进程与多线程进程比较二.线程状态变化进程产生时同时产生第一个线程,其它线程在以后由任一线程请求创建。线程创建后运行过程中三个主要状态是:运行、就绪、阻塞。运行三.多线程应用多线程可以方便实现多任务在多CPU之上的并行,CPU与外设间的并行。多线程与多进程比,多线程天然地共享空间,而多进程要通过如shmget系统调用才可共享部分用户空间。任务1四、线程间通讯与同步线程间通过共享空间通讯。可以通过同步原语(系统调用/或利用硬同步指令的同步函数),实现互斥与同步。五.多线程编程接口举例UNIX的pthread库所提供的有关线程函数:1.创建线程intpthread_create(pthread_t*tid,constpthread_attr_t*attr,void*(*func)(void*),void*arg);2.等待某线程结束intpthread_join(pthread_ttid,void**status);tid是我们必须要等待线程的tid,3.获得正在执行线程的IDpthread_tpthread_self(void);4.将线程变为独立状态intpthread_detach(pthread_ttid);线程或者是可汇合的(joinable)或者是独立的(detached)。当可汇合的线程终止时,其线程ID和退出状态将保留,直到另外一个线程调用pthread_join。独立的线程终止时,所有的资源都释放,我们不能等待它终止。如果一个线程需要知道另一个线程什么时候终止,最好保留第二个线程的可汇合性。5.线程结束voidpthread_exit(void*status);6.加锁/解锁intpthread_mutex_lock(pthread_mutex_t*mutex)intpthread_mutex_unlock(pthread_mutex_t*mutex)这两个函数用于对临界区的加锁和解锁。以保证对共享数据的互斥操作。mutex是指向锁结构的地址。8.1.3.线程实现两种典型实现多线程方法:多线库方法和核心方法。一.多线库实现的用户级线程不改变操作系统内核,开发一个多线程函数库,这是一种非操作系统内核的实现方法,是一种过渡的方法。由多线程库提供线程创建,结束,同步等函数,进程主程序作为主线程运行,以后调用多线程库的创建线程函数创建用户级线程。操作系统只看到进程。由多线库调度用户级线程分时地在进程中运行。创建用户级线程函数处理过程:接收新线程执行函数及初始变量值;在进程用户空间中分配TCB表,栈区和私有存储区;初始化上述表格;将TCB表中的线程状态改为就绪;运行线程调度程序;返回到被调度线程的现场运行。*进程调度与多线库线程调度对比:用户程序调用任一多线程库函数,在函数处理结束时都去运行线程调度,调用返回时可能返回到另一线程。用户程序在自陷或被中断进入内核,在内核处理结束时都去运行进程调度程序。用户级线程与进程的关系:多线程分时地在进程内运行,多线库线程调度是选取线程占用进程,内核进程调度是选取进程占用CPU。*用户级线程的优势:线程管理开销小;无需修改操作系统核心;缺点:不能做到同一进程内线