操作系统之我见-线程
2015-10-21 16:10
246 查看
线程:进程内相对独立的可调度的执行单元
进程是被分配拥有资源的基本单元,同一进程内的多个线程共享该进程的资源,只是拥有。
进程之间的通信往往要求内核的参与,而线程间通信是在同一进程的地址空间内,共享主存和文件,无需内核参与
举个例子,如文件编辑程序,用户在屏幕上修改工作时,一个线程负责管理修改工作,另一个线程负责下一个段落的输入,第三个线程负责打印和备份工作。
线程的状态和管理
(1)就绪状态 线程具备执行条件,等待调度程序分配一个CPU运行
(2)运行状态(3)等待状态
注意的地方,线程没有挂起状态,因为线程不是资源拥有者,资源属于进程
线程的描述
一个进程是一个地址空间,其中装有进程的映像,又是一个保护体系,控制有保护的访问包括处理器、文件、I/O以及其他进程
现代操作系统中,为每个线程设置一个线程控制块(TCB),进程控制块和线程控制块均用进程对象和线程对象来描述。
例如,线程对象属性有线程ID,动态优先级。线程服务有创建线程,终止线程,特别线程中的挂起是等待
线程的管理
(1)创建线程原语,多数用fork( )
(2)撤销线程原语,若Exit (3)阻塞原语(4)挂起一个线程,使该线程状态变为等待或停止
(5)恢复一个线程(6)改变优先数
每个线程属于某个线程组
多线程
从线程的观点可把操作系统分为
(1)单进程和单线程系统(2)多进程和单线程(3)单进程和多线程(4)多进程和多线程
用户级线程(User-Level Threads,ULT),指用户应用程序建立的线程,并且由用户应用程序负责所有这些用户级线程的调度执行和管理,操作系统的内核完全不知道这些线程的 存在和管理。
现代操作系统和某些语言如Java,为用户准备和提供了一个基于多线程的用户应用程序的开发环境和运行环境,称为线程库
用户线程方法适用于任何操作系统,因为它不要内核支持用户级线程,而且线程库可以被所有应用程序共享。
缺点:当一个线程执行访管请求被阻塞时,将使得进程中的所有其他线程实际完全被阻塞。
内核级线程(Kernel-Level Threads,KLT),在纯KLT方法中,所有线程的创建、调度和管理全部由内核操作系统负责
优点:内核可调度一个进程中的多个线程同时在多个处理器上并行运行,进程中的一个线程被阻塞,进程中的其他线程仍可以被调度运行。
KLT和ULT结合
内核支持多线程的建立、调度和管理同时提供线程库,允许用户应用程序建立、调度和管理用户级的线程
系统中每一个具体的线程只有两类
(1)用户线程 运行在用户地址空间的线程
(2)内核线程 运行在内核空间的线程,如内核子程序所有中断异常处理程序用线程实现都是内核线程
线程库
一个多线程应用程序的开发和运行环境,在一个线程库中至少提供以下功能的过程调用,建立一个线程,撤销一个线程调度一个线程,线程间通信原语、线程间同步原语。
进程是被分配拥有资源的基本单元,同一进程内的多个线程共享该进程的资源,只是拥有。
进程之间的通信往往要求内核的参与,而线程间通信是在同一进程的地址空间内,共享主存和文件,无需内核参与
举个例子,如文件编辑程序,用户在屏幕上修改工作时,一个线程负责管理修改工作,另一个线程负责下一个段落的输入,第三个线程负责打印和备份工作。
线程的状态和管理
(1)就绪状态 线程具备执行条件,等待调度程序分配一个CPU运行
(2)运行状态(3)等待状态
注意的地方,线程没有挂起状态,因为线程不是资源拥有者,资源属于进程
线程的描述
一个进程是一个地址空间,其中装有进程的映像,又是一个保护体系,控制有保护的访问包括处理器、文件、I/O以及其他进程
现代操作系统中,为每个线程设置一个线程控制块(TCB),进程控制块和线程控制块均用进程对象和线程对象来描述。
例如,线程对象属性有线程ID,动态优先级。线程服务有创建线程,终止线程,特别线程中的挂起是等待
线程的管理
(1)创建线程原语,多数用fork( )
(2)撤销线程原语,若Exit (3)阻塞原语(4)挂起一个线程,使该线程状态变为等待或停止
(5)恢复一个线程(6)改变优先数
每个线程属于某个线程组
多线程
从线程的观点可把操作系统分为
(1)单进程和单线程系统(2)多进程和单线程(3)单进程和多线程(4)多进程和多线程
用户级线程(User-Level Threads,ULT),指用户应用程序建立的线程,并且由用户应用程序负责所有这些用户级线程的调度执行和管理,操作系统的内核完全不知道这些线程的 存在和管理。
现代操作系统和某些语言如Java,为用户准备和提供了一个基于多线程的用户应用程序的开发环境和运行环境,称为线程库
用户线程方法适用于任何操作系统,因为它不要内核支持用户级线程,而且线程库可以被所有应用程序共享。
缺点:当一个线程执行访管请求被阻塞时,将使得进程中的所有其他线程实际完全被阻塞。
内核级线程(Kernel-Level Threads,KLT),在纯KLT方法中,所有线程的创建、调度和管理全部由内核操作系统负责
优点:内核可调度一个进程中的多个线程同时在多个处理器上并行运行,进程中的一个线程被阻塞,进程中的其他线程仍可以被调度运行。
KLT和ULT结合
内核支持多线程的建立、调度和管理同时提供线程库,允许用户应用程序建立、调度和管理用户级的线程
系统中每一个具体的线程只有两类
(1)用户线程 运行在用户地址空间的线程
(2)内核线程 运行在内核空间的线程,如内核子程序所有中断异常处理程序用线程实现都是内核线程
线程库
一个多线程应用程序的开发和运行环境,在一个线程库中至少提供以下功能的过程调用,建立一个线程,撤销一个线程调度一个线程,线程间通信原语、线程间同步原语。
相关文章推荐
- Hibernate反向工程 使用试例
- SVN各种错误提示产生原因及处理方法大全(转)
- Jersey VS Django-Rest
- Oracle大表清理truncate .. reuse storage
- Zuma
- 黑马程序员——多态
- 好用的开源轻量级DHCP和DNS服务软件“Dual DHCP DNS Server”
- Objective-C 程序设计 第五章
- Android中ProgressBar样式
- 我的常用Linux命令
- Android onMesure 用法简介
- ConnectionTimeOut和SocketTimeOut的区别
- 正则表达式应用
- 转:mac下安装homebrew
- 互联网行星1 楔子
- 获取系统资源APP
- angularjs和ajax的结合使用 (一)
- Qt UI界面改了,但UI界面不更新
- java拾遗之关键字while
- oracle通配符过滤(模糊匹配)