赞
踩
目录
一个进程的概念,体现了两个特点:
资源拥有单位
给每个进程分配一虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度
调度单位
进程是由一个或多个程序的一次执行
可能会与其他进程交替执行
这两个特性分别由操作系统独立处理
调度被称为线程或轻型进程(LWP,lightweight process)
所有权资源被称为处理器任务
这两个特性分别由操作系统独立处理
资源拥有单元称为进程(或任务),调度的单位称为线程、
又称轻型进程(light weight process)。
线程只拥有一点在运行中必不可省的资源(程序计数器、一组寄存器和栈),但它可与同属一个进程的其它线程共享进程拥有的全部资源。
线程定义为进程内一个执行单元或一个可调度实体。
线程:
有执行状态(状态转换)
不运行时保存上下文
有一个执行栈
有一些局部变量的静态存储
可存取所在进程的内存和其他资源
可以创建、撤消另一个线程
是进程的一个实体,可作为系统独立调度和分派的基本单位。
不拥有系统资源(只拥有少量的资源,资源是分配给进程)
一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分)
系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)
一个线程与属于同一进程的线程共享,其内容为:
代码部分
数据部分
操作系统资源
(进程具有虚拟地址空间,以保存进程映像对处理器、其他进程、文件和I/O资源的保护访问权限)
传统进程或重型进程(heavyweight process)等于具有一个线程的任务
创建一个新线程花费时间少(结束亦如此)
两个线程的切换花费时间少
(如果机器设有“存储[恢复]所有寄存器”指令,则整个切换过程用几条指令即可完成)
因为同一进程内的线程共享内存和文件,因此它们之间相互通信
无须调用内核
适合多处理机系统
LAN中的一个文件服务器,在一段时间内需要处理几个文件请求
有效的方法是:为每一个请求创建一个线程
在一个SMP机器上:多个线程可以同时在不同的处理器上运行
一个线程显示菜单,并读入用户输入;另一个线程执行用户命令
考虑一个应用:由几个独立部分组成,这几个部分不需要顺序执行,则每个部分可以以线程方式实现
当一个线程因I/O阻塞时,可以切换到同一应用的另一个线程
多核系统给程序员带来了压力,挑战包括
划分活动
平衡
数据分裂
数据相关性
测试和调试
用户级线程 user-level thread
核心级线程 kernel-level thread
两者结合方法
用户级线程:不依赖于OS核心(内核不了解用户线程的存在),应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
如:数据库系统informix,图形处理Aldus PageMaker。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。
用户线程的维护由应用进程完成;
内核不了解用户线程的存在;
用户线程切换不需要内核特权;
用户线程调度算法可针对应用优化;
一个线程发起系统调用而阻塞,则整个进程在等待。(一对多模型中)
三个主线程库:
POSIX Pshoeds,Win32线程,Java线程
内核级线程:依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。一个线程发起系统调用而阻塞,不会影响其他线程。时间片分配给线程,所以多线程的进程获得更多CPU时间。
内核维护进程和线程的上下文信息;
线程切换由内核完成;
时间片分配给线程,所以多线程的进程获得更多CPU时间;
一个线程发起系统调用而阻塞,不会影响其他线程的运行。
例子:
Windows XP/2000 及以后
Solaris
Linux
POSIX Pthreads
Mac OS X
多对一
一对一
多对多
许多用户级线程都映射到单个内核线程
由用户级运行时库实现
在用户级别上创建、调度、同步线程
操作系统不知道用户级别的线程
操作系统认为每个进程只包含一个控制线程
例子:
Solaris Green Threads
GNU Portable Threads
优点
不需要操作系统支持
是否可以调整调度策略以满足应用程序(用户级别)的需求
降低了开销的线程操作,因为没有系统调用
缺点
不能利用多处理器(没有真正的并行性)
当一个线程阻塞时,整个进程阻塞
每个用户级线程都映射到内核线程
操作系统为每个用户级线程提供了一个内核线程
每个内核线程都要独立调度
由操作系统执行的线程操作(创建、调度、同步)
例子:
Windows NT/XP/2000
Linux
Solaris 9 and later
优点
每个内核级线程都可以在一个多处理器上并行运行
当一个线程阻塞时,可以调度进程中的其他线程
缺点
线程操作的开销更高
操作系统必须随着线程数量的增加而良好地扩展
允许将许多用户级线程映射到许多内核线程
允许操作系统创建足够数量的内核线程
例子:
Solaris prior to version 9
Windows NT/2000 with the ThreadFiber
类似于M:M,只是它允许一个用户线程被绑定到内核线程
例子:
IRIX
HP-UX
Tru64 UNIX
Solaris 8 and earlier
线程库为程序员提供了用于创建和管理线程的API
两种主要的实现方式
库完全放在用户空间中
操作系统支持的内核级库
演示:10-13,41min
可以作为用户级或 内核级提供
用于线程创建和同步的便携式操作系统接口(POSIX,Portable Operating System Interface)标准(IEEE 1003.1c)API
http://standards.ieee.org/reading/ieee/stad_public/description/posix
API指定了线程库的行为,实现取决于该库的开发
常见于UNIX操作系统(Solaris,Linux,Mac OS X)
10-13,68min
Java线程由JVM管理
通常使用底层操作系统提供的线程模型来实现
Java线程可以由以下方式创建:
扩展线程类
实现了可运行的接口
随着线程数量的增加,它越来越受欢迎,显式线程的程序正确性更加困难
创建和管理由编译器和运行时库而不是程序员来完成的线程
探索了五种方法
线程池
分叉连接
OpenMP
大中央调度
英特尔线程构建块
fork()和exec()系统调用的语义学
目标线程的线程取消
异步或延迟
信号处理
线程池
线程特定数据
调度程序激活
只复制调用线程还是所有线程?
替换进程,包括所有的线程吗?
在一个线程完成之前终止它
两种一般方法:
异步取消会立即终止目标线程
延迟取消允许目标线程定期检查它是否应该被取消
UNIX系统中使用信号通知进程发生了特定事件
一个信号处理程序被用于处理信号
1、信号是由特定的事件产生的
2、信号被传递到一个流程
3、信号处理
选项:
将信号传递到信号应用到的线程上
将信号传递给这个过程中的每个线程
在过程中将信号传递给某些线程
指定一个特定的三个信号组来接收该进程的所有信号
在池中创建许多等待工作的线程
优点:
使用现有线程服务请求通常比创建新线程稍微快一些
允许将应用程序中的线程数绑定到池的大小
允许每个线程都有自己的数据副本
当无法控制线程创建过程时(即使用线程池时)有用
M:M和两级模型都需要通信,以维护分配给应用程序的适当数量的内核线程
调度程序激活提供了回调——从内核到线程库的通信机制
这种通信允许应用程序维护正确的内核线程数
Windows XP Threads
Linux Thread
实现了内核级的一对一映射
每个线程包含
线程id
寄存器组
单独的用户堆栈和内核堆栈
私有数据存储区
寄存器集、堆栈和私有存储区域被称为线程的上下文
线程的主要数据结构包括:
ETHREAD (executive thread block)
KTHREAD (kernel thread block)
TEB (thread environment block) CreateThread.cpp
Linux将它们称为任务,而不是线程
线程的创建是通过clone()系统调用来完成的
clone()允许子任务共享父任务(进程)的地址空间
1、 The main difference between a process and a program is that A
A.a process has its life cycle while a program has not.
B.a program has its life cycle while a process has not.
C.a program can own resources while a process cannot.
D.a process can own resources while a program cannot.
2、 Which component of a process is not shared across threads? A
A. Register values
B. Heap memory
C. Global variables
D. Program memory
3、 A Thread Control Block (TCB) stores: C
A. User (owner) ID
B. Memory map
C. The machine state (registers, program counter)
D. Open file descriptors
4、 For many-to-one model, if one thread within a single process is blocking, then B
A. the rest threads of this process keep running.
B. the whole process will be blocked.
C. the blocking thread will be cancelled.
D. the blocking thread will be always blocked.
5、下列哪种方法不能实现进程之间的通信( ) C
A.共享文件 B.数据库 C.全局变量 D.共享内存
6、UNIX系统中提供了一种进程间的信息传送机制,把一个进程的标准输出与另一个进程的标准输入连接起来,这种机制称为 B
A. 重定向B. 管道 C. socket D. 共享内存
7、下列操作中,操作系统在创建新进程时,必须完成的是( )。 B
I.申请空白的进程控制块
II. 初始化进程控制块
III.设置进程状态为执行态
A、仅I
B、仅I、II
C、仅I、III
D、仅II、III
8、 下列关于线程的描述中,错误的是___。 B
A.内核级线程的调度由操作系统完成
B.操作系统为每个用户级线程建立一个线程控制块
C.用户级线程间的切换比内核级线程间的切换效率高
D.用户级线程可以在不支持内核级线程的操作系统上实现
9、下列关于进程和线程的叙述中,正确的是 A
A.不管系统是否支持线程,进程都是资源分配的基本单位
B.线程是资源分配的基本单位,进程是调度的基本单位
C.系统级线程和用户级线程的切换都需要内核的支持
D.同一进程中的各个线程拥有各自不同的地址空间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。