版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三两草上传3.1 3.1 进程的概念进程的概念3.1.1 3.1.1 进程的引入进程的引入 1.1.进程的引入进程的引入: : 多道程序在执行时,需要共享系统资源,从而导致各程多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无静态的概念,
2、无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入执行过程的性质,人们引入“进程(进程(ProcessProcess)”概念。概念。 3.1 3.1 进程的概念进程的概念2.2.进程的概念进程的概念: :n 进程的概念是进程的概念是6060年代初首先由麻省理工学院的年代初首
3、先由麻省理工学院的MULTICSMULTICS系统系统和和IBMIBM公司的公司的CTSS/360CTSS/360系统引入的。系统引入的。n 进程是一个具有独立功能的程序关于某个数据集合的一次运进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。动,通过程序计数器的值和处理寄存器的内容来表示。n 进程是操作系统中最基本、重要的概念。是多道程序
4、系统出进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念道程序的活动规律引进的一个概念, ,所有多道程序设计操作系所有多道程序设计操作系统都建立在进程的基础上。统都建立在进程的基础上。3.1 3.1 进程的概念进程的概念n 操作系统引入进程的概念的原因操作系统引入进程的概念的原因: :从理论角度看,是对正在运行的程序过程的抽象;从理论角度看,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内从实现角度看,是一种数据结构,
5、目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入在规律,有效管理和调度进入计算机系统主存储器运行的程序。计算机系统主存储器运行的程序。n 进程的特征进程的特征动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。消亡的。并发性:任何进程都可以同其他进程一起并发执行并发性:任何进程都可以同其他进程一起并发执行独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;和调度的独立单位;异步性:由于进程间的相互制约,使进程具有执行的间断性,
6、即进程异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进按各自独立的、不可预知的速度向前推进结构特征:进程由程序、数据和进程控制块三部分组成。结构特征:进程由程序、数据和进程控制块三部分组成。3.1 3.1 进程的概念进程的概念n 进程与程序的关系进程与程序的关系程序是指令的有序集合,其本身没有任何运行的含义,是程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。程,它是一个动态的概念。程序可以作为一种软件资料长期存在,而进程是
7、有一定生程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。命期的。程序是永久的,进程是暂时的。进程更能真实地描述并发,而程序不能;进程是由程序和进程更能真实地描述并发,而程序不能;进程是由程序和数据两部分组成的。数据两部分组成的。进程具有创建其他进程的功能,而程序没有。进程具有创建其他进程的功能,而程序没有。同一程序同时运行于若干个数据集合上,它将属于若干个同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。不同的进程。也就是说同一程序可以对应多个进程。 3.1 3.1 进程的概念进程的概念3.1.2 3.1.2
8、进程的状态进程的状态 一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,状态加以刻划,, ,按进程在执行过程中的状况至少定义三种不同的进程状按进程在执行过程中的状况至少定义三种不同的进程状态:态:l运行态运行态(RunningRunning)是指当前进程已经分配到)是指当前进程已经分配到CPUCPU,它的程序正在处理机,它的程序正在处理机上执行的状态。上执行的状态。l就绪状态就绪状态(ReadyReady)是指已具备运行条件,但因为其他进程正在占用)是指已具备运行条件,但因为其他进程正在占用CPU,CPU,使它暂时不能
9、运行而处于等待分配使它暂时不能运行而处于等待分配CPUCPU的状态。的状态。l阻塞状态阻塞状态(BlockedBlocked)是指进程因等待某种事件发生(例如等待)是指进程因等待某种事件发生(例如等待I/OI/O操作操作完成,等待其他进程发来的信号)而暂时不能运行的状态,也就是说,完成,等待其他进程发来的信号)而暂时不能运行的状态,也就是说,处于阻塞状态的进程尚不具备运行条件,即使处于阻塞状态的进程尚不具备运行条件,即使CPUCPU空闲它也无法使用。空闲它也无法使用。3.1 3.1 进程的概念进程的概念3.1 3.1 进程的概念进程的概念n 引起进程状态转换的具体原因引起进程状态转换的具体原因
10、n运行态运行态等待态:等待使用资源或某事件发生等待态:等待使用资源或某事件发生 ;n等待态等待态就绪态:资源得到满足或事件发生就绪态:资源得到满足或事件发生 ;n运行态运行态就绪态:运行时间片到;出现有更高优先权就绪态:运行时间片到;出现有更高优先权进程。进程。n就绪态就绪态运行态:运行态:CPUCPU空闲时选择一个就绪进程。空闲时选择一个就绪进程。3.1 3.1 进程的概念进程的概念n 进程五态模型及其转换进程五态模型及其转换运行态就绪态等待态选中落选出现等待事件等待事件结束新建态终止态3.1 3.1 进程的概念进程的概念n 新建态对应进程刚被创建的状态。为一个新进程创建新建态对应进程刚被创
11、建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。操作系统完成创建进程的必要操作。n 进程的终止,首先进程的终止,首先, ,等待操作系统进行善后,然后等待操作系统进行善后,然后, ,退退出主存。进入终止态的进程不再执行,但依然临时保出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。进程的信息抽取之后,系统将删除该进程。 3.1 3.1 进程的概念进程的概念n 挂起状态的引
12、入挂起状态的引入挂起等待事件结束出现等待事件解除挂起挂起落选选中运行态就绪态等待事件结束终止态新建态挂起就绪态解除挂起挂起挂起等待态等待态提交提交3.1 3.1 进程的概念进程的概念l例题:例题: 1 1如果系统中有如果系统中有N N个进程,运行的进程最多几个,最少几个;个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个?就绪进程最多几个最少几个;等待进程最多几个,最少几个? 解答解答 :在单处理机系统中,处于运行状态的进程最多为:在单处理机系统中,处于运行状态的进程最多为1 1个,个,最少为最少为0 0个;处于就绪进程最多为个;处于就绪进程最多为N-1
13、N-1个,最少为个,最少为0 0个;处于阻个;处于阻塞的进程最多为塞的进程最多为N N个,最少为个,最少为0 0个。个。 2. 2. 有没有这样的状态转换,为什么?有没有这样的状态转换,为什么? (1 1) 等待等待运行;运行; (2 2) 就绪就绪等待等待3.1 3.1 进程的概念进程的概念3.1.3 3.1.3 进程的描述进程的描述进程控制块进程控制块l进程在内存的活动可以用进程上下文(进程在内存的活动可以用进程上下文(Process ContextProcess Context)来描述。在操作系统中,把进程的物理实体和支持进程运行来描述。在操作系统中,把进程的物理实体和支持进程运行的环境
14、合称为进程上下文。进程的运行被认为是在进程的上的环境合称为进程上下文。进程的运行被认为是在进程的上下文中执行的。在操作系统中,进程的上下文由用户级上下下文中执行的。在操作系统中,进程的上下文由用户级上下文、系统级上下文和寄存器上下文组成。文、系统级上下文和寄存器上下文组成。l进程控制块(进程控制块(PCBPCB)是进程组成中最关键的部分,是系统对进)是进程组成中最关键的部分,是系统对进程进行控制和管理的依据,是进程存在的唯一标志。当系统程进行控制和管理的依据,是进程存在的唯一标志。当系统创建一个新进程就要为它创建一个创建一个新进程就要为它创建一个PCB;PCB;当进程终止后,系统当进程终止后,
15、系统收回其收回其PCBPCB,该进程在系统中就不存在了,该进程在系统中就不存在了 。l进程与进程与PCBPCB是一一对应的。是一一对应的。3.1 3.1 进程的概念进程的概念l进程控制块的组成:进程控制块的组成:进程名进程名特征信息特征信息进程状态信息进程状态信息调度优先权调度优先权通信信息通信信息现场保护区现场保护区资源需求资源需求进程实体信息进程实体信息族系关系族系关系其他信息其他信息3.1 3.1 进程的概念进程的概念3.1 3.1 进程的概念进程的概念l进程控制块的组织:进程控制块的组织:3.1 3.1 进程的概念进程的概念3.1.4 3.1.4 实例研究实例研究LinuxLinux进
16、程进程l在在LinuxLinux内核中,代表一个进程的内核数据结构是内核中,代表一个进程的内核数据结构是structstruct task_structtask_struct,它就是前面提到的具有实际意义的进程控制,它就是前面提到的具有实际意义的进程控制块,块,LinuxLinux把它命名为把它命名为task_structtask_struct结构,原代码见结构,原代码见include/include/linux/sched.hlinux/sched.h文件。文件。l每一个可以独立调度的进程必须拥有它自己的进程控制块,每一个可以独立调度的进程必须拥有它自己的进程控制块,或者说进程和进程控制块之
17、间是一一对应的。或者说进程和进程控制块之间是一一对应的。lLinuxLinux定义了五种进程状态:定义了五种进程状态:TASK_RUNNINGTASK_RUNNING、TASK_INTERRUPTIBLETASK_INTERRUPTIBLE 、TASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE 、TASK_MOMBIETASK_MOMBIE 和TASK_STOPPEDTASK_STOPPED 。3.1 3.1 进程的概念进程的概念lTASK_RUNNINGTASK_RUNNING状态状态:该状态表示进程要么在:该状态表示进程要么在CPUCPU上执行,要上执行,要么
18、在就绪队列中等待调度程序调度执行。么在就绪队列中等待调度程序调度执行。lTASK_INTERRUPTIBLETASK_INTERRUPTIBLE状态状态:该状态表示进程处于可中断的:该状态表示进程处于可中断的等待状态,也就是说处于等待队列中的进程,可被其他进等待状态,也就是说处于等待队列中的进程,可被其他进程产生的一个信号或一个硬件中断所唤醒,使其状态变为程产生的一个信号或一个硬件中断所唤醒,使其状态变为TASK_RUNNINGTASK_RUNNING状态。状态。lTASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE状态状态:该状态表示进程处于不可中:该状态表示进程
19、处于不可中断的等待状态。不可中断的等待状态是指等待进程不能被断的等待状态。不可中断的等待状态是指等待进程不能被其他进程产生的一个信号所唤醒或改变成另一个状态。当其他进程产生的一个信号所唤醒或改变成另一个状态。当进程打开一个设备文件时,才会用到这种状态。进程打开一个设备文件时,才会用到这种状态。3.1 3.1 进程的概念进程的概念l TASK_MOMBIETASK_MOMBIE状态状态:该状态表示进程中止执行,并且:该状态表示进程中止执行,并且释放了运行时的大部分资源,但尚未释放自己的进释放了运行时的大部分资源,但尚未释放自己的进程控制块时所处的一种状态。程控制块时所处的一种状态。l TASK_
20、STOPPEDTASK_STOPPED状态状态:该状态表示进程的执行被暂停。:该状态表示进程的执行被暂停。当一个进程被另一个进程监控时,任何信号都可以当一个进程被另一个进程监控时,任何信号都可以把这个进程的状态变成暂停状态。另外,当进程收把这个进程的状态变成暂停状态。另外,当进程收到信号到信号SIGSTOPSIGSTOP、SIGTSTPSIGTSTP、SIGTTINSIGTTIN和和SIGTOUSIGTOU时,也时,也将转变成暂停状态。将转变成暂停状态。3.1 3.1 进程的概念进程的概念僵死TASK_ZOMBIE就绪TASK_RUNNING不可中断TASK_UNINTERRUPTIBLE可中
21、断TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU运行调度schedulle 时间片到申请资源未果,调用interruptible_sleep_on()申请资源未果,调用sleep_on()申请资源可用后wake_up()申请资源可用,收到信号、wake_up()wake_up_interruptible()创建do_fork()执行do_exit()跟踪系统调用,执行syscall_trace()sys_exit()schedulle()收到SIG_KILL或SIG_CONT后,执行wake_up()3.2 3.2 进程控制进程控制3.2.1 3.2.1 进程控制机
22、构进程控制机构 1.1.操作系统内核操作系统内核 n 操作系统内核就是操作系统的核心,它是基于硬件的第一层操作系统内核就是操作系统的核心,它是基于硬件的第一层软件扩展,提供操作系统最基本的功能,是操作系统工作的软件扩展,提供操作系统最基本的功能,是操作系统工作的基础。基础。n现代操作系统设计中,通常将一些与硬件相关的模块,如中现代操作系统设计中,通常将一些与硬件相关的模块,如中断处理程序、各种常用设备的驱动程序以及运行频率较高的断处理程序、各种常用设备的驱动程序以及运行频率较高的模块等,将它们常驻内存,以提高操作系统的运行效率,并模块等,将它们常驻内存,以提高操作系统的运行效率,并对它们加以特
23、殊的保护。通常把这一部分程序称为操作系统对它们加以特殊的保护。通常把这一部分程序称为操作系统的内核。的内核。3.2 3.2 进程控制进程控制2.2.原语原语 n原语(原语(primitiveprimitive)是机器指令的延伸,是由若干条指令)是机器指令的延伸,是由若干条指令构成,用于完成特定功能的过程。原语是操作系统核心,构成,用于完成特定功能的过程。原语是操作系统核心,它不是由进程而是由一组程序模块所组成,是操作系统的它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态一个组成部分,它必须在管态(一种机器状态) )下执行下执行. .n原语都是原子操作原
24、语都是原子操作. .所谓原子操作是指一个操作中所有动所谓原子操作是指一个操作中所有动作,要么全做,要么全不做,即原子操作是一个不可分割作,要么全做,要么全不做,即原子操作是一个不可分割的操作。的操作。 3.2 3.2 进程控制进程控制3.2.2 3.2.2 进程控制进程控制 1.1.进程的创建进程的创建 n进程在执行过程中,能通过进程在执行过程中,能通过系统调用创建多个新进程,系统调用创建多个新进程,创建进程称为父进程,而新创建进程称为父进程,而新进程称为该进程的子进程。进程称为该进程的子进程。这些新进程仍然可以再创建这些新进程仍然可以再创建其他进程,从而形成了进程其他进程,从而形成了进程树树
25、 。根ABCGFED祖先3.2 3.2 进程控制进程控制 1.1.进程的创建进程的创建 n创建进程必须调用创建原语来实现。创建原语的主要功能创建进程必须调用创建原语来实现。创建原语的主要功能是创建一个指定标识符的进程,形成进程的是创建一个指定标识符的进程,形成进程的PCBPCB。n一个典型的进程创建原语可描述如下:一个典型的进程创建原语可描述如下:Create (s0,m0,pi) p=Get_New_PCB(); /分配新的分配新的PCB pid=Get_New_PID(); /分配进程的分配进程的PID pID=pid; /设置进程的设置进程的PID p-CPU_State=s0; /CP
26、U的状态的状态 p -Memory=m0; /内存内存 p -Priority=pi; /优先级优先级 p -Status.Type=Ready; /进程状态进程状态 p -Status.List=RL; /进程队列进程队列 Insert(RL,p); /将进程将进程p插入就绪队列插入就绪队列 Scheduler(); /调度程序调度程序 3.2 3.2 进程控制进程控制 2.2.进程的阻塞进程的阻塞 n正在运行的进程因为提出服务请求(如正在运行的进程因为提出服务请求(如I/OI/O操作)未被操作操作)未被操作系统立即满足,或者所需数据尚未到达等原因,只能转变系统立即满足,或者所需数据尚未到达
27、等原因,只能转变为阻塞状态,等待相应事件出现后再把它唤醒。为阻塞状态,等待相应事件出现后再把它唤醒。n阻塞原语可描述如下:阻塞原语可描述如下:Block( ) p=Get_PCB(); /获取当前进程的进程控制块获取当前进程的进程控制块 s=p-Status.Type; /保存当前进程的状态保存当前进程的状态 cpu=p-Processor_ID; /处理机状态处理机状态 p-CPU_State=Interrupt(cpu); /保存处理机现场保存处理机现场 p-Status.Type=Blocked; /将进程的状态改为阻塞将进程的状态改为阻塞 Insert(BL,p); /将进程插入等待队
28、列将进程插入等待队列 Scheduler();3.2 3.2 进程控制进程控制 3.3.进程的唤醒进程的唤醒 n当阻塞的进程所等待的事件出现时(如所需数据已到达,当阻塞的进程所等待的事件出现时(如所需数据已到达,或者等待的或者等待的I/OI/O操作已经完成),则由另外的与阻塞进程相操作已经完成),则由另外的与阻塞进程相关的进程(如完成关的进程(如完成I/OI/O操作的进程)调用唤醒原语,将等待操作的进程)调用唤醒原语,将等待该事件的进程唤醒。阻塞进程不能唤醒自己。该事件的进程唤醒。阻塞进程不能唤醒自己。n唤醒原语的执行过程如下:唤醒原语的执行过程如下: Wakeup( pid ) P=Get_
29、PCB(pid); /获取进程控制块获取进程控制块 Remove(p-Status.List,p); /从阻塞队列中移出进程从阻塞队列中移出进程p p-Status.Type=Ready; /进程的状态改为就绪进程的状态改为就绪 Insert (RL,p); /将进程插入到就绪队列将进程插入到就绪队列 Scheduler (); /调度程序调度程序3.2 3.2 进程控制进程控制 4.4.进程的终止进程的终止 n进程完成了任务,或者在执行过程发生异常,这时系统就进程完成了任务,或者在执行过程发生异常,这时系统就要终止当前进程的执行。终止进程的执行,可用进程终止要终止当前进程的执行。终止进程的执
30、行,可用进程终止原语来实现。原语来实现。n一个典型进程终止原语如下:一个典型进程终止原语如下:Destroy ( pid ) P=Get_PCB(pid); /获取进程控制块获取进程控制块 Kill_Tree(p); /删除整个进程树删除整个进程树 Scheduler(); /调度器调度器3.2 3.2 进程控制进程控制Kill_Tree ( P ) for ( each q in p-Creation.Tree.Child) Kill_Tree(q); /删除当前进程的所有子进程删除当前进程的所有子进程qif (p-Status.Type=Running) cpu =p-Processor_
31、ID; Interrupt (cpu);Remove (p-Status.List,p);Release_all(p-Memory);Release_all (p-Other_Resources);Close_all(p-Open_Files);Delete_PCB(p);3.2 3.2 进程控制进程控制3.2.3 3.2.3 实例研究:实例研究:LinuxLinux和和WindowsWindows系统创建进程系统创建进程 1.Linux1.Linux系统中进程创建系统中进程创建forkfork u在在LinuxLinux系统中,用户或系统可以使用系统调用系统中,用户或系统可以使用系统调用fo
32、rkfork来创建来创建一个新的进程。一个新的进程。forkfork的函数原形为:的函数原形为: pid_tpid_t fork() fork()u当一个进程调用当一个进程调用forkfork创建一个子进程后,父进程和子进程创建一个子进程后,父进程和子进程都在自己独立的地址空间内执行。它们之间不共享任何地都在自己独立的地址空间内执行。它们之间不共享任何地址空间,但是父子进程具有相同的程序代码、数据和堆栈址空间,但是父子进程具有相同的程序代码、数据和堆栈段,段, 因此,为了区别运行中的父子进程,因此,为了区别运行中的父子进程,forkfork系统调用向系统调用向父子进程返回不同的值。它向子进程返
33、回父子进程返回不同的值。它向子进程返回0 0,而向父进程返,而向父进程返回子进程的回子进程的PIDPID。3.2 3.2 进程控制进程控制.Beforefork()After.forkfork执行前执行前一个控制流进入内核一个控制流进入内核forkfork模块模块。Beforefork()After。Beforefork()Afterforkforkfork执行后执行后调用后,从调用后,从forkfork返回两个控制流返回两个控制流父进程父进程子进程子进程/* - The file create.c introduces the use of fork. -*/ #include main()
34、 int pid; printf(“Before: my pid is %d .n”,getpid(); pid=fork(); /create new process if (pid = -1) /出错处理出错处理 perror(“Can not fork process!”); /error else if (pid =0) /子进程代码子进程代码 printf(“I am the child. My pid is %d .n”, getpid();else /父进程代码父进程代码 printf(“I am the parent. My child is %d .n”,pid); 3.2
35、3.2 进程控制进程控制2.Windows2.Windows系统中进程的创建系统中进程的创建CreateProcessCreateProcess u在在windowswindows系统,一个进程可以调用系统,一个进程可以调用win32 APIwin32 API的的CreateProcessCreateProcess函数来创建一个新的进程及其主线程,以执函数来创建一个新的进程及其主线程,以执行指定的任务。在利用行指定的任务。在利用CreateProcessCreateProcess建立进程时,操作系建立进程时,操作系统要为新进程分配新的地址空间和资源,建立新的主线程。统要为新进程分配新的地址空间
36、和资源,建立新的主线程。一旦新进程建立,父进程仍然使用原来的地址空间继续执一旦新进程建立,父进程仍然使用原来的地址空间继续执行,而新进程则在新的地址空间执行一个新的程序。行,而新进程则在新的地址空间执行一个新的程序。uCreateProcessCreateProcess含有含有1010个参数来指定建立进程的方式,具体个参数来指定建立进程的方式,具体参数的含义可参考相关的参数的含义可参考相关的Win32 APIWin32 API手册。手册。 #include #include #include STARTUPINFO startInfo; PROCESS_INFORMATION processI
37、nfo; strcpy(lpCommandLine,“c:WINNTSYSTEM32NOTEPAD.EXE temp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo);startInfo.cb=sizeof(startInfo);if (! CreateProcess(NULL,lpCommandLine,NULL,NULL,FALSE, HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE, NULL, NULL,&startInfo, &processInfo) fprintf(stderr,”Cr
38、eateProcess failed!”); ExitProcess(1);CloseHandle(&processInfo.hThread);3.3 3.3 线程线程3.3.1 3.3.1 线程的概念线程的概念1.1.单线程程序的缺点:单线程程序的缺点:进程切换开销大进程切换开销大进程通信代价大进程通信代价大进程之间的并发性粒度较粗,并发度不高进程之间的并发性粒度较粗,并发度不高不适合并行计算和分布并行计算的要求不适合并行计算和分布并行计算的要求不适合客户不适合客户/ /服务器计算的要求。服务器计算的要求。3.3 3.3 线程线程2.2.线程概念:线程概念:n线程(线程(Thread
39、Thread)是进程内的一个执行单位或进程内的一个)是进程内的一个执行单位或进程内的一个可调度的实体,是可调度的实体,是CPUCPU使用的基本单元。它由线程使用的基本单元。它由线程IDID、程序、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(如打他线程共享其代码段、数据段和其他操作系统资源(如打开文件和信号)。开文件和信号)。n在引入线程的现代操作系统中,进程是资源分配的单位,在引入线程的现代操作系统中,进程是资源分配的单位,而线程是处理机调度的单位。一个进程可以创建一个或多而线程是处理机调
40、度的单位。一个进程可以创建一个或多个线程,因而一个进程中的多个线程就会争夺个线程,因而一个进程中的多个线程就会争夺CPUCPU,在不同,在不同的状态之间进行转换。也就是说,与进程类似,线程也是的状态之间进行转换。也就是说,与进程类似,线程也是一个动态的概念,也有一个从创建到消亡的生命过程,在一个动态的概念,也有一个从创建到消亡的生命过程,在这一过程中它具多种状态,如运行、就绪、阻塞和终止等这一过程中它具多种状态,如运行、就绪、阻塞和终止等几个状态。几个状态。3.3 3.3 线程线程3.3 3.3 线程线程n线程应用举例:线程应用举例: 例例1 1:LANLAN中的一个文件服务器,在一段时间内需
41、要处理几中的一个文件服务器,在一段时间内需要处理几个文件请求。有效的方法是:为每一个请求创建一个线程。个文件请求。有效的方法是:为每一个请求创建一个线程。 例例2 2:一个线程显示菜单,并读入用户输入;另一个线程执:一个线程显示菜单,并读入用户输入;另一个线程执行用户命令。行用户命令。 例例3 3:考虑一个应用:由几个独立部分组成,这几个部分不:考虑一个应用:由几个独立部分组成,这几个部分不需要顺序执行,则每个部分可以以线程方式实现。当一个需要顺序执行,则每个部分可以以线程方式实现。当一个线程因线程因I/OI/O阻塞时,可以切换到同一应用的另一个线程。阻塞时,可以切换到同一应用的另一个线程。3
42、.3 3.3 线程线程n多线程编程具有以下优点:多线程编程具有以下优点:(1)响应程度高)响应程度高 (2)资源共享)资源共享 (3)经济)经济 (4)多处理器体系结构的利用)多处理器体系结构的利用 3.3 3.3 线程线程3. 3. 进程与线程的比较进程与线程的比较n地址空间:不同进程的地址空间是独立的,而同一进程内的地址空间:不同进程的地址空间是独立的,而同一进程内的线程共享同一地址空间。一个进程的线程在另一个进程内是线程共享同一地址空间。一个进程的线程在另一个进程内是不可见的。不可见的。n调度:在支持线程的操作系统中,进程是资源分配的基本单调度:在支持线程的操作系统中,进程是资源分配的基
43、本单位,而线程是处理机调度的基本单位。位,而线程是处理机调度的基本单位。n并发性:同一进程内的线程可以并发执行并发性:同一进程内的线程可以并发执行, ,不同进程间的线程不同进程间的线程也可以并发执行也可以并发执行, ,并发能力进一步增强。并发能力进一步增强。n系统开销:系统开销:进程切换时将涉及到有关资源指针的保存以及地进程切换时将涉及到有关资源指针的保存以及地址空间的变化等问题,线程切换时,由于同一进程内的线程址空间的变化等问题,线程切换时,由于同一进程内的线程共享资源和地址空间,将不涉及资源信息的保存和地址变化共享资源和地址空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统的开
44、销时间。问题,从而减少了操作系统的开销时间。 3.3 3.3 线程线程3.3.2 3.3.2 线程的实现线程的实现1.1.用户级线程用户级线程n用户线程在内核之上支持,并在用户层通过线程库来实现。用户线程在内核之上支持,并在用户层通过线程库来实现。线程库提供对线程的创建、调度和管理的支持而无须内核线程库提供对线程的创建、调度和管理的支持而无须内核支持。由于内核并不知道用户级的线程,所以所有线程的支持。由于内核并不知道用户级的线程,所以所有线程的创建和调度都是在用户空间内进行的,而无须内核的干预。创建和调度都是在用户空间内进行的,而无须内核的干预。n用户级线程通常能快速的创建和管理,但它们也有缺
45、点。用户级线程通常能快速的创建和管理,但它们也有缺点。例如,如果内核是单线程的,那么任何一个用户级线程若例如,如果内核是单线程的,那么任何一个用户级线程若执行阻塞系统调用,就会引起整个进程阻塞,即使还有其执行阻塞系统调用,就会引起整个进程阻塞,即使还有其他线程可以在应用程序内运行。他线程可以在应用程序内运行。 3.3 3.3 线程线程2.2.内核级线程内核级线程n内核级线程由操作系统直接支持,内核在其空间内执行线内核级线程由操作系统直接支持,内核在其空间内执行线程的创建、调度和管理。因为线程管理是由操作系统完成程的创建、调度和管理。因为线程管理是由操作系统完成的,所以内核线程的创建和管理要慢于
46、用户线程的创建和的,所以内核线程的创建和管理要慢于用户线程的创建和管理。管理。n由于内核管理线程,当一个线程执行阻塞系统调用时,内由于内核管理线程,当一个线程执行阻塞系统调用时,内核能调度应用程序内的另一个线程以便执行。而且,在多核能调度应用程序内的另一个线程以便执行。而且,在多处理器环境下,内核能在不同处理器上调度线程。处理器环境下,内核能在不同处理器上调度线程。 3.3 3.3 线程线程3.3.3 3.3.3 多线程模型多线程模型1.1.多对一模型多对一模型n多对一模型将许多用户级线程映射到一个内核线程。线程多对一模型将许多用户级线程映射到一个内核线程。线程管理是在用户空间进行的,因而效率
47、比较高,但是如果一管理是在用户空间进行的,因而效率比较高,但是如果一个线程执行了阻塞系统调用,那么整个进程就会阻塞。而个线程执行了阻塞系统调用,那么整个进程就会阻塞。而且,因为任何时刻只有一个线程访问内核,多个线程不能且,因为任何时刻只有一个线程访问内核,多个线程不能并行运行在多处理器上。在这种模型中,处理机调度的单并行运行在多处理器上。在这种模型中,处理机调度的单位仍然是进程。位仍然是进程。nGreen Green thread,Solaristhread,Solaris 2 2所提供的线程库就是用了这种模所提供的线程库就是用了这种模型。另外,在不支持内核级线程的操作系统上所实现的用型。另外
48、,在不支持内核级线程的操作系统上所实现的用户级线程库也使用多对一模型。户级线程库也使用多对一模型。3.3 3.3 线程线程2.2.一对一模型一对一模型n一对一模型将每个用户线程映射到一个内核线程。该线程一对一模型将每个用户线程映射到一个内核线程。该线程模型在一个线程执行阻塞时,能允许另一个线程继续执行,模型在一个线程执行阻塞时,能允许另一个线程继续执行,所以它提供了比多对一模型更好的并发功能。它也允许多所以它提供了比多对一模型更好的并发功能。它也允许多个线程运行在多处理机系统上。这种模型的缺点是创建一个线程运行在多处理机系统上。这种模型的缺点是创建一个用户线程就需要创建一个相应的内核线程。个用
49、户线程就需要创建一个相应的内核线程。n创建内核线程的开销会影响应用程序的性能,所以这种模创建内核线程的开销会影响应用程序的性能,所以这种模型的绝大多数实现限制了系统所支持的线程数量。型的绝大多数实现限制了系统所支持的线程数量。nWindows NT/2000/xpWindows NT/2000/xp和和OS/2OS/2实现了一对一模型。实现了一对一模型。3.3 3.3 线程线程3.3.多对多模型多对多模型n多对多模型多路复用了许多用户级线程到同样数量或更小多对多模型多路复用了许多用户级线程到同样数量或更小数量的内核线程上。数量的内核线程上。n内核线程的数量可能与特定应用程序或特定机器有关。内核
50、线程的数量可能与特定应用程序或特定机器有关。 n多对多模型克服前面两种模型的缺点,开发人员可以创建多对多模型克服前面两种模型的缺点,开发人员可以创建任意多的必要的线程,并且相应内核线程能在多处理器系任意多的必要的线程,并且相应内核线程能在多处理器系统上并行运行。而且,当一个线程执行阻塞系统调用时,统上并行运行。而且,当一个线程执行阻塞系统调用时,内核能调度另一个线程来执行。内核能调度另一个线程来执行。 3.3 3.3 线程线程用户空间线程库P内核空间2)用户级线程用户空间P内核空间1)内核级线程用户空间线程库PP内核空间3)混合式线程ULTKLTProcessP3.3 3.3 线程线程3.3.
51、4 3.3.4 线程池线程池n线程池的的实现思想如下:线程池的的实现思想如下: 在进程建立时就创建若干线程,在进程建立时就创建若干线程,把它们放在一个把它们放在一个“池中池中”,它们在那里等待工作。当服务器,它们在那里等待工作。当服务器收到一个请求时,就唤醒池中的一个线程(如果有可用线程收到一个请求时,就唤醒池中的一个线程(如果有可用线程的话),并将要处理的请求传给它。一旦线程完成了它的任的话),并将要处理的请求传给它。一旦线程完成了它的任务,它会返回到池中再等待其他工作。如果池中没有可用的务,它会返回到池中再等待其他工作。如果池中没有可用的线程,那么服务器就会一直等到直到有空闲线程为止。线程
52、,那么服务器就会一直等到直到有空闲线程为止。n线程池具有以下优点:线程池具有以下优点:(1 1)通常用现有线程处理请求比等待)通常用现有线程处理请求比等待创建新线程要快;(创建新线程要快;(2 2)线程池限定了任何时候可存在线程的)线程池限定了任何时候可存在线程的数量。数量。3.3 3.3 线程线程3.3.5 3.3.5 实例研究实例研究 1.Windows Server 20031.Windows Server 2003线程线程nWindows Server 2003Windows Server 2003的线程是内核线程,系统的处理机调的线程是内核线程,系统的处理机调度对象为线程。线程的上下
53、文主要包括寄存器、线程环境度对象为线程。线程的上下文主要包括寄存器、线程环境块、核心栈和用户栈。块、核心栈和用户栈。nWindows Server 2003Windows Server 2003把线程的状态分成待调度就绪状态、把线程的状态分成待调度就绪状态、就绪状态、备用状态、运行状态、等待状态、就绪挂起状就绪状态、备用状态、运行状态、等待状态、就绪挂起状态、转换状态、终止状态和初始化状态。态、转换状态、终止状态和初始化状态。nWindows Server 2003Windows Server 2003内核中与线程调度相关的主要数据结内核中与线程调度相关的主要数据结构有处理机数据结构和几个全局
54、数据结构。它们是一个待构有处理机数据结构和几个全局数据结构。它们是一个待调度就绪线程队列、一个分成调度就绪线程队列、一个分成3232个优先级的就绪线程队列、个优先级的就绪线程队列、一个备用线程变量和一个运行线程变量。一个备用线程变量和一个运行线程变量。3.3 3.3 线程线程nWindows Server 2003Windows Server 2003有一组相关的系统调用,应用程序可有一组相关的系统调用,应用程序可用它们来进行线程控制。用它们来进行线程控制。CreateThreadCreateThread完成线程的创建,在调用进程的地址空间完成线程的创建,在调用进程的地址空间上创建一个线程,以
55、执行指定的函数,它的返回值为所上创建一个线程,以执行指定的函数,它的返回值为所创建线程的句柄。创建线程的句柄。ExitThreadExitThread用于结束当前线程。用于结束当前线程。SuspendThreadSuspendThread可挂起指定线程。可挂起指定线程。ResumeThreadResumeThread可激活指定线程,它的对应操作是递减指可激活指定线程,它的对应操作是递减指定线程的挂起计数,当挂起计数为定线程的挂起计数,当挂起计数为0 0时,线程恢复执行。时,线程恢复执行。3.3 3.3 线程线程2.Pthread2.Pthread线程线程n PthreadPthread是指是指
56、POSIXPOSIX标准(标准(IEEE1003.1cIEEE1003.1c)定义的,它定义线)定义的,它定义线程创建程创建APIAPI和同步和同步APIAPI。这是线程行为的规范,而不是实现。这是线程行为的规范,而不是实现。操作系统设计者可以根据意愿来采取任何实现形式。通常,操作系统设计者可以根据意愿来采取任何实现形式。通常,实现实现PthreadPthread规范的库局限于基于规范的库局限于基于UNIXUNIX的系统,的系统,WindowsWindows操作操作系统通常并不支持系统通常并不支持PthreadPthread。n PthreadPthread线程函数调用:线程函数调用: (1
57、1)Pthread_createPthread_create()()函数函数创建一个线程创建一个线程 (2 2)Pthread_joinPthread_join()()函数函数挂起当前线程直到所等待线程挂起当前线程直到所等待线程结束结束 (3 3)Pthread_exitPthread_exit()()函数函数终止当前线程终止当前线程3.4 3.4 处理机调度处理机调度3.4.1 3.4.1 处理机调度的层次处理机调度的层次 1. 1. 高级调度高级调度 高级调度又称为作业调度或宏观调度。其主要功高级调度又称为作业调度或宏观调度。其主要功能是根据一定的算法,从输入的一批任务(作业)中能是根据一
58、定的算法,从输入的一批任务(作业)中选出若干个作业,分配必要的资源,如内存、外设等,选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程为它建立相应的用户作业进程和为其服务的系统进程(如输入(如输入/ /输出进程),最后把它们的程序和数据调入输出进程),最后把它们的程序和数据调入内存,等待进程调度程序对其执行调度,并在作业完内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。成后作善后处理工作。3.4 3.4 处理机调度处理机调度2. 2. 中级调度中级调度n 中级调度涉及进程在内外存间的交换。为缓解内存紧中级调度涉及进程在内外存间的交换
59、。为缓解内存紧张问题,在许多系统中设立了中级调度。张问题,在许多系统中设立了中级调度。n 中级调度的主要功能是在内存使用紧张时,将一些暂中级调度的主要功能是在内存使用紧张时,将一些暂时不能运行的进程从内存对换到外存上等待。以后,时不能运行的进程从内存对换到外存上等待。以后,当外存有足够的空闲空间时,再将合适的进程重新换当外存有足够的空闲空间时,再将合适的进程重新换入内存,等待进程调度。入内存,等待进程调度。n 引入中级调度的主要目的是为了提高内存的利用率和引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。系统吞吐量。 3.4 3.4 处理机调度处理机调度3. 3. 低级调度低级调度n
60、低级调度又称进程调度或微观调度,其主要功能是根低级调度又称进程调度或微观调度,其主要功能是根据一定的算法,将据一定的算法,将CPUCPU分派给就绪进程队列中的一个进分派给就绪进程队列中的一个进程。执行低级调度功能的程序称为进程调度程序,由程。执行低级调度功能的程序称为进程调度程序,由它实现它实现CPUCPU在进程间的切换。在进程间的切换。 n 进程调度是操作系统中最基本的一种调度,在一般的进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须有进程调度,而且它的策略的优劣操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的性能。直接影响整个系统的性能。 3.4 3.4 处理机调度处理机调度作业CPU就绪
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高职(农产品质量检测)农产品认证技术阶段测试题及答案
- 初中音乐人音版八年级下册花儿与少年教学设计
- 用户隐秘保护与服务保障承诺书5篇
- 警惕书包过重呵护脊柱健康小学主题班会课件
- 建筑公司土木工程施工安全标准操作手册
- 第一节 网络传输介质教学设计高中信息技术华东师大版2020选择性必修2 网络基础-华东师大版2020
- 行政后勤管理标准化操作流程手册
- 安置协议书赠予公证有效
- 退房不签协议书有效
- 代付款协议书模板英文
- 物业承接查验实施方案
- 中医外科三基试题及答案
- 展厅讲解员培训课件
- 2026秋招:贵州黔晟国有资产经营公司笔试题及答案
- 2026春人教版八年级英语下册重点单词-词性转换背诵默写(背诵版)
- 2025年河南推拿职业学院单招职业适应性测试题库附答案
- 2025年高考数学全国Ⅰ卷第18题解析几何的探究与思考说题比赛
- 华为的绩效管理及绩效考核制度
- 慢性阻塞性肺疾病的呼吸训练方案
- 华西医院骨科课件
- 膝关节半月板损伤的康复训练
评论
0/150
提交评论