计算机操作系统(第二版)课件:线程机制_第1页
计算机操作系统(第二版)课件:线程机制_第2页
计算机操作系统(第二版)课件:线程机制_第3页
计算机操作系统(第二版)课件:线程机制_第4页
计算机操作系统(第二版)课件:线程机制_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

线程机制线程基本概念线程实现机制Linux线程机制(自学)3.8线程机制3.8.1线程基本概念基于同数据区的同时多请求问题的进程解决思路什么是线程?线程拥有哪些资源?线程与进程的区别4.线程状态设置5.线程控制:线程创建、终止、阻塞、唤醒6.线程同步7.线程调度线程通信

多线程应用依据进程知识学习哪些场合适合使用多线程解决问题?有什么好处?哪些场合又不适合多线程机制呢?3.8线程机制1.线程的引入

“基于同数据区的同时多请求”问题的解决思路:例:数据库服务器需要同时处理来自多个客户端的数据查询请求,这些请求都是针对同一数据库的数据的。

基于进程的解决思路:(1)设置一个进程顺序处理所有请求;(2)设置多个进程分别处理多个请求;3.8.1线程基本概念进程同步复杂;系统开销大。存在的问题进程的两个属性:(1)进程是系统拥有资源的独立单位;(2)进程是独立调度和分派的基本单位;3.8线程机制3.8.1线程基本概念1.线程的引入线程拥有的资源:3.8线程机制3.8.1线程基本概念2.什么是线程线程是隶属于进程的一个实体,是比进程“更小”的一个运行单位。

一个线程ID

一组寄存器堆栈:内核栈、用户栈一个私有存储区线程控制块TCB进程3.8线程机制3.8.1线程基本概念3.线程与进程的比较

调度:线程是CPU的调度单位

并发性:进程间可并发执行;线程间也可并发执行

拥有资源:进程是资源分配和拥有单位,线程基本不拥有资

源,同一进程中所有线程共享进程所拥有的资源

系统开销:线程开销<进程开销

创建及删除线程的开销<进程

线程切换开销<进程线程与进程有哪些不同呢?4.线程管理

(1)就绪态(2)运行态(3)阻塞态(等待态)(4)终止态Windows2000/xp的线程状态:(1)初始化状态(2)就绪状态

(3)备用状态(4)运行状态(5)等待状态(6)转换状态(7)终止状态

3.8线程机制3.8.1线程基本概念

线程状态线程创建线程终止线程阻塞线程唤醒4.线程管理3.8线程机制3.8.1线程基本概念

线程控制

线程同步

线程调度

线程通信3.8线程机制3.8.2线程的实现机制用户级线程内核级线程两者相结合的组合方式1.用户级线程(ULT)完全由用户应用程序实现的线程机制。

POSIXPthreads;MachC-threads;Solaristhreads通信服务器线程管理程序

OS管理线程通信服务器进程3.8.2.线程实现机制运行时系统(线程库):提供多线程应用程序的开发环境和运行环境。由一组管理和控制线程的函数集合组成。它们作为进程代码的一部分,驻留在进程的用户空间。运行时系统的功能:1.用户级线程(ULT)3.8.2.线程实现机制

线程控制;

线程调度;

线程同步;

线程通信;Linux的Posix线程机制应用举例:用户级线程的优点:

线程的调度及切换开销小;

线程调度由应用程序完成,可以选择最适当的算法;

可运行在任何操作系统上。用户级线程的缺点:

线程调用阻塞型系统调用时,将导致所属进程阻塞;

核心只将处理器分配给进程,同一进程中的多个线程不能同时

运行于多个处理器上;1.用户级线程(ULT):3.8.2线程实现机制2.内核级线程(KLT)完全由OS内核实现的线程机制。

Windows2000/xpSolarisDigitalUNIX

3.8.2线程实现机制内核级线程优点:(1)对多处理器,核心可以同时调度同一进程的多个线程;(2)阻塞是在线程一级完成;(3)核心例程是多线程的;内核级线程缺点:同一进程内的线程切换调用内核,系统开销大。用户线程:运行在用户态内核线程:运行在内核态运行状态用户级线程:线程库内核级线程:操作系统内核实现及管理3.组合方式内核支持内核级线程,线程库支持用户级线程,如Solaris3.8.2线程实现机制优点:线程管理开销小,效率高;

多对一模型缺点:线程系统调用时,将导致所属进程阻塞;核心只将处理器分配给进程,同一进程中的两个线程不能同时

运行于两个处理器上;把多个用户级线程映射到一个内核级线程上3.8.2线程实现机制缺点:线程管理开销大;

一对一模型优点:线程系统调用时,仅阻塞线程能获得多处理器的好处把一个用户级线程映射到一个内核级线程上。3.组合方式内核支持内核级线程,线程库支持用户级线程,如Solaris3.8.2线程实现机制

多对多模型优点:线程系统调用时,仅阻塞线程能获得多处理器的好处线程管理开销不至于增加太大把多个用户级线程映射到较少或同样数量的内核级线程上。3.组合方式内核支持内核级线程,线程库支持用户级线程,如Solaris3.8线程机制线程的定义、拥有的资源线程与进程的区别线程控制线程实现机制:用户级线程、内核级线程、组合模型本节知识小结哪个小组来总结下?3.8线程机制3.8.3Linux/openEuler线程机制创建线程clone()Pthread线程库介绍Linux内核线程3.8.3Linux/openEuler线程机制1.创建线程clone()#include<sched.h>intclone(int(*fn)(void*),void*child_stack,intflags,void*arg);参数说明:(1)fn:新线(进)程即将要执行的函数。(2)child_stack:为新线程分配的内核堆栈空间的起始地址。(3)arg:传给新线程要执行的函数fn的参数。(4)flags:创建标志,描述新线(进)程将从父进程继承哪些资源1.创建线程clone()flags:创建标志参数说明:标志名称说明CLONE_VM

父子进程运行于相同的内存空间:共享内存描述符和所有的页表CLONE_FS

父子进程共享相同的文件系统,包括根目录、当前目录、权限掩码umaskCLONE_FILES父子进程共享打开文件表CLONE_SIGHAND

父子进程共享相同的信号处理(signalhandler)表、阻塞信号表和挂起信号表CLONE_PARENT新进程与创建它的进程拥有同一个父进程,即新进程与创建它的进程是兄弟进程CLONE_VFORK父进程被挂起,直至子进程终止,vfork()中设置CLONE_THREAD父子进程属于同一个线程组,设置该标志时,必须同时设置CLONE_SIGHANDCLONE_SETTLS为新线程创建局部存储段(TLS),该段由tls参数所指向的结构描述3.8.3Linux/openEuler线程机制2.Linux/openEuler的Pthread线程库intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*routines)(void*),void*arg)功能:创建新线程,属性为attr,将运行的函数为routines(arg)intpthread_join(pthread_tthread,void**status)功能:调用者等待指定线程结束,并将结束状态写入status中voidpthread_exit(void*retval)功能:终止调用线程相关系统调用:3.8.3Linux/openEuler线程机制互斥锁,条件变量,Posix信号量Pthread线程库同步机制互斥锁实现多个线程对临界资源的互斥使用

创建锁:intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*attr)

初始化锁的属性:pthread_mutexattr_init(pthread_mutexattr_t*mattr)3.8.3Linux/openEuler线程机制2.Linux/openEuler的Pthread线程库Pthread线程库同步机制互斥锁实现多个线程对临界资源的互斥使用

加锁操作:intpthread_mutex_lock(pthread_mutex_t*mutex)intpthread_mutex_trylock(pthread_mutex_t*mutex)

开锁操作:intpthread_mutex_unlock(pthread_mutex_t*mutex)

销毁锁:intpthread_mutex_destroy(pthread_mutex_t*mutex)3.8.3Linux/openEuler线程机制2.Linux/openEuler的Pthread线程库条件变量创建条件变量:int

pthread_cond_init(pthread_cond_t

*cond,pthread_condattr_t

*cond_attr)等待条件成立:int

pthread_cond_wait(pthread_cond_t

*cond,pthread_mutex_t

*mutex);intpthread_cond_timedwait(pthread_cond_t*restrictcond,pthread_mutex_t*restrictmutex,conststructtimespec*restricttimeout)条件变量代表线程继续运行所需要等待的某种条件,它是利用线程间共享的全局变量进行同步的一种机制。Pthread线程库同步机制2.Linux/openEuler的Pthread线程库通知线程条件已满足:intpthread_cond_signal(pthread_cond_t*cond);

intpthread_cond_broadcast(pthread_cond_t*cond)销毁条件变量:intpthread_cond_destroy(pthread_cond_t*cond)3.Linux内核线程3.8.3Linux/openEuler线程机制3.Linux内核线程structtask_struct*kthread_create(int(*threadfn)(void*data),void*data,constchar*namefmt,...)功能:创建一个内核线程,但处于不可运行状态,需调用wake_up_process()显式地唤醒它#definekthread_run(threadfn,data,namefmt,...)

创建一个内核线程并让它能运行intkthread_stop(structtask_struct*thread);给指定线程发出结束运行信号,并一直等待指定线程的结束3.8.3Linux/openEuler线程机制3.9本章小结1.进程基本概念

进程定义和特征进程映像进程状态进程控制2.进程互斥与同步

进程互斥的概念临界资源及临界区概念进程同步机制应遵循的4个准则进程同步的概念进程同步机制:禁止中断、专用机器指令、软件方法、锁机制、信号量机制、管程机制经典进程同步问题:

生产者-消费者问题,哲学家进餐问题,读者-写者问题,理发师问题3.进程调度

调度的层次

高级调度,中级调度,低级调度

选择调度算法要考虑的因素

评价调度性能的指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论