进程线程的概念
- 格式:docx
- 大小:31.29 KB
- 文档页数:19
进程与线程的区别进程的通信方式线程的通信方式进程与线程的区别进程的通信方式线程的通信方式2011-03-15 01:04进程与线程的区别:通俗的解释一个系统运行着很多进程,可以比喻为一条马路上有很多马车不同的进程可以理解为不同的马车而同一辆马车可以有很多匹马来拉--这些马就是线程假设道路的宽度恰好可以通过一辆马车道路可以认为是临界资源那么马车成为分配资源的最小单位(进程)而同一个马车被很多匹马驱动(线程)--即最小的运行单位每辆马车马匹数=1所以马匹数=1的时候进程和线程没有严格界限,只存在一个概念上的区分度马匹数1的时候才可以严格区分进程和线程专业的解释:简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。
但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
这就是进程和线程的重要区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
分别解释一下程序,进程和线程的概念和
区别?
问题:分别解释一下程序,进程和线程的概念和区别? 回答:
程序是计算机指令的集合它,以文件的形式存储在磁盘上。
进程是一个程序在其自身的地址空间中的一次执行活动。
进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源,而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占系统的运行资源。
线程:进程中的一个单一的连续控制流程。
一个进程可以拥有多个线程。
线程又称轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
系统会为每个线程分配一个时间片。
在java中每个线程都有一个优先级。
java运行时系统实现了一个用于调度线程执行的线程调度器,用于确定某一时刻由哪个线程在CPU上运行。
在java中,线程通常是抢占式的而不需要时间片分配进程(分配给每个线程相等的CPU时间的进程),但实际上只有一个线程在运
行。
该线程一直运行到它终止进入等待状态,或者另一个具有更高优先级的线程变成可运行状态。
在后一种情况下,低优先级的线程被高优先级的线程抢占,高优先级的线程获得运行的机会。
java线程调度器支持不同优先级线程的抢占方式,但其本身不支持相同优先级线程的时间片轮换。
java运行时系统所在的操作系统支持时间片的轮换,则线程调度器就支持相同优先级线程的时间片轮换。
进程、线程、管程三者之间的关系首先我们先了解进程、线程、管程各自的概念:进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
线程:线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。
线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。
线程可以创建和撤消线程,从而实现程序的并发执行。
一般,线程具有就绪、阻塞和运行三种基本状态。
管程:管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。
现在我们来了解进程和线程的关系:简而言之,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。
但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
这就是进程和线程的重要区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
下面我们用实际图解来加以分析进程和线程之间的关系:这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。
⼀⽂读懂什么是进程、线程、协程(建议收藏)进程我们都知道计算机的核⼼是CPU,它承担了所有的计算任务;⽽操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应⽤程序则是具有某种功能的程序,程序是运⾏于操作系统之上的。
进程是⼀个具有⼀定独⽴功能的程序在⼀个数据集上的⼀次动态执⾏的过程,是操作系统进⾏资源分配和调度的⼀个独⽴单位,是应⽤程序运⾏的载体。
进程是⼀种抽象的概念,从来没有统⼀的标准定义。
进程⼀般由程序、数据集合和进程控制块三部分组成。
程序⽤于描述进程要完成的功能,是控制进程执⾏的指令集;数据集合是程序在执⾏时所需要的数据和⼯作区;程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯⼀标志。
进程具有的特征:动态性:进程是程序的⼀次执⾏过程,是临时的,有⽣命期的,是动态产⽣,动态消亡的;并发性:任何进程都可以同其他进程⼀起并发执⾏;独⽴性:进程是系统进⾏资源分配和调度的⼀个独⽴单位;结构性:进程由程序、数据和进程控制块三部分组成。
线程在早期的操作系统中并没有线程的概念,进程是能拥有资源和独⽴运⾏的最⼩单位,也是程序执⾏的最⼩单位。
任务调度采⽤的是时间⽚轮转的抢占式调度⽅式,⽽进程是任务调度的最⼩单位,每个进程有各⾃独⽴的⼀块内存,使得各个进程之间内存地址相互隔离。
后来,随着计算机的发展,对CPU的要求越来越⾼,进程之间的切换开销较⼤,已经⽆法满⾜越来越复杂的程序的要求了。
于是就发明了线程。
线程是程序执⾏中⼀个单⼀的顺序控制流程,是程序执⾏流的最⼩单元,是处理器调度和分派的基本单位。
⼀个进程可以有⼀个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
⼀个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。
⽽进程由内存空间(代码、数据、进程空间、打开的⽂件)和⼀个或多个线程组成。
进程、线程和协程的概念进程进程是系统资源分配的最⼩单位, 系统由⼀个个进程(程序)组成⼀般情况下,包括⽂本区域(text region)、数据区域(dataregion)和堆栈(stack region)。
⽂本区域存储处理器执⾏的代码数据区域存储变量和进程执⾏期间使⽤的动态分配的内存;堆栈区域存储着活动过程调⽤的指令和本地变量。
因此进程的创建和销毁都是相对于系统资源,所以是⼀种⽐较昂贵的操作。
进程有三个状态:1. 等待态:等待某个事件的完成;2. 就绪态:等待系统分配处理器以便运⾏;3. 运⾏态:占有处理器正在运⾏。
进程是抢占式的争夺CPU运⾏⾃⾝,⽽CPU单核的情况下同⼀时间只能执⾏⼀个进程的代码,但是多进程的实现则是通过CPU飞快的切换不同进程,因此使得看上去就像是多个进程在同时进⾏.通信问题: 由于进程间是隔离的,各⾃拥有⾃⼰的内存内存资源, 因此相对于线程⽐较安全, 所以不同进程之间的数据只能通过IPC(Inter-Process Communication)进⾏通信共享.线程线程属于进程线程共享进程的内存地址空间线程⼏乎不占有系统资源通信问题: 进程相当于⼀个容器,⽽线程⽽是运⾏在容器⾥⾯的,因此对于容器内的东西,线程是共同享有的,因此线程间的通信可以直接通过全局变量进⾏通信,但是由此带来的例如多个线程读写同⼀个地址变量的时候则将带来不可预期的后果,因此这时候引⼊了各种锁的作⽤,例如互斥锁等。
同时多线程是不安全的,当⼀个线程崩溃了,会导致整个进程也崩溃了,即其他线程也挂了, 但多进程⽽不会,⼀个进程挂了,另⼀个进程依然照样运⾏。
进程是系统分配资源的最⼩单位线程是CPU调度的最⼩单位由于默认进程内只有⼀个线程,所以多核CPU处理多进程就像是⼀个进程⼀个核⼼线程和进程的上下⽂切换进程切换分3步:1. 切换页⽬录以使⽤新的地址空间2. 切换内核栈3. 切换硬件上下⽂⽽线程切换只需要第2、3步,因此进程的切换代价⽐较⼤协程协程是属于线程的。
了解一下在任务管理器里的进程。
其实在谈到进程时,还要涉及到线程的概念。
进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。
对于操作系统而言,其调度单元是线程。
一个进程至少包括一个线程,通常将该线程称为主线程。
一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
那进程与线程的区别到底是什么?网络安全先让朋友们了解一下在任务管理器里的进程。
其实在谈到进程时,还要涉及到线程的概念。
进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。
对于操作系统而言,其调度单元是线程。
一个进程至少包括一个线程,通常将该线程称为主线程。
一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
那进程与线程的区别到底是什么?进程是执行程序的实例。
例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成Notepad.exe的代码及其所需调用动态链接库的进程。
每个进程均运行在其专用且受保护的地址空间内。
因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。
在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。
我这里以沙箱为例进行阐述。
一个进程就好比一个沙箱。
线程就如同沙箱中的孩子们。
孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。
但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。
因此,每个进程就象一个被保护起来的沙箱。
未经许可,无人可以进出。
实际上线程运行而进程不运行。
两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。
这是一种协作策略。
下面让我们分析一下任务管理器里的进程选项卡。
进程与线程的定义、关系及区别进程与线程的定义、关系及区别⼀、进程的定义进程:指在系统中能独⽴运⾏并作为资源分配的基本单位,它是由⼀组机器指令、数据和堆栈等组成的,是⼀个能独⽴运⾏的活动实体。
进程⼀般有三个状态:就绪状态、执⾏状态和等待状态【或称阻塞状态】;进程只能由⽗进程建⽴,系统中所有的进程形成⼀种进程树的层次体系;挂起命令可由进程⾃⼰和其他进程发出,但是解除挂起命令只能由其他进程发出。
进程控制块(PCB):PCB不但可以记录进程的属性信息,以便对进程进⾏控制和管理,⽽且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB⽽知道该进程存在与否。
系统建⽴进程的同时就建⽴该进程的PCB,在撤销⼀个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。
⼀般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。
由程序段、相关的数据段和PCB三部分构成了进程实体(⼜称进程印像),⼀般,我们把进程实体就简称为进程。
进程的特征:1.动态性:进程的实质是程序的⼀次执⾏过程,进程是动态产⽣,动态消亡的。
2.并发性:任何进程都可以同其他进程⼀起并发执⾏。
3.独⽴性:进程是⼀个能独⽴运⾏的基本单位,同时也是系统分配资源和调度的独⽴单位。
4.异步性:由于进程间的相互制约,使进程具有执⾏的间断性,即进程按各⾃独⽴的、不可预知的速度向前推进。
⼆、线程的定义线程:线程是进程中的⼀个实体,作为系统调度和分派的基本单位。
线程的性质:1.线程是进程内的⼀个相对独⽴的可执⾏的单元。
若把进程称为任务的话,那么线程则是应⽤中的⼀个⼦任务的执⾏。
2.由于线程是被调度的基本单元,⽽进程不是调度单元。
所以,每个进程在创建时,⾄少需要同时为该进程创建⼀个线程。
即进程中⾄少要有⼀个或⼀个以上的线程,否则该进程⽆法被调度执⾏。
3.进程是被分给并拥有资源的基本单元。
同⼀进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使⽤他们。
进程和线程的区别进程:指在系统中正在运⾏的⼀个应⽤程序;程序⼀旦运⾏就是进程;或者更专业化来说:进程是指程序执⾏时的⼀个实例,即它是程序已经执⾏到课中程度的数据结构的汇集。
从内核的观点看,进程的⽬的就是担当分配系统资源(CPU时间、内存等)的基本单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独⽴执⾏的⼀个单元执⾏流。
进程——资源分配的最⼩单位,线程——程序执⾏的最⼩单位。
线程进程的区别体现在4个⽅⾯:1、因为进程拥有独⽴的堆栈空间和数据段,所以每当启动⼀个新的进程必须分配给它独⽴的地址空间,建⽴众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说⼗分“奢侈”,系统开销⽐较⼤,⽽线程不⼀样,线程拥有独⽴的堆栈空间,但是共享数据段,它们彼此之间使⽤相同的地址空间,共享⼤部分数据,⽐进程更节俭,开销⽐较⼩,切换速度也⽐进程快,效率⾼,但是正由于进程之间独⽴的特点,使得进程安全性⽐较⾼,也因为进程有独⽴的地址空间,⼀个进程崩溃后,在保护模式下不会对其它进程产⽣影响,⽽线程只是⼀个进程中的不同执⾏路径。
⼀个线程死掉就等于整个进程死掉。
2、体现在通信机制上⾯,正因为进程之间互不⼲扰,相互独⽴,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,⽽线程由于共享数据段所以通信机制很⽅便。
3、体现在CPU系统上⾯,线程使得CPU系统更加有效,因为操作系统会保证当线程数不⼤于CPU数⽬时,不同的线程运⾏于不同的CPU 上。
4、体现在程序结构上,举⼀个简明易懂的列⼦:当我们使⽤进程的时候,我们不⾃主的使⽤if else嵌套来判断pid,使得程序结构繁琐,但是当我们使⽤线程的时候,基本上可以甩掉它,当然程序内部执⾏功能单元需要使⽤的时候还是要使⽤,所以线程对程序结构的改善有很⼤帮助。
什么情况下使⽤进程个线程:1、需要频繁创建销毁的优先使⽤线程;因为对进程来说创建和销毁⼀个进程代价是很⼤的2、线程的切换速度快,所以在需要⼤量计算,切换频繁时⽤线程,还有耗时的操作使⽤线程可提⾼应⽤程序的响应3、因为对CPU系统的效率使⽤上线程更占优,所以可能要发展到多机分布的⽤进程,多核分布⽤线程4、并⾏操作时使⽤线程,如C/S架构的服务器端并发线程响应⽤户的请求5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好因为我的项⽬中需要对数据段的数据共享,可以被多个程序所修改,所以使⽤线程来完成此操作,⽆需加⼊复杂的通信机制,使⽤进程需要添加复杂的通信机制实现数据段的共享,增加了我的代码的繁琐,⽽且使⽤线程开销⼩,项⽬运⾏的速度快,效率⾼。
提起程序这个概念,大家再也熟悉不过了,程序与进程概念是不可分的。
程序是为了完成某项任务编排的语句序列,它告诉计算机如何执行,因此程序是需要运行的。
程序运行过程中需要占有计算机的各种资源才能运行下去。
如果任一时刻,系统中只有一道程序,即单道程序系统,程序则在整个运行过程中独占计算机全部资源,整个程序运行的过程就非常简单了,管理起来也非常容易。
就象整个一套房子住了一个人,他想看电视就看电视,想去卫生间就去卫生间,没人和他抢占资源。
但为了提高资源利用率和系统处理能力,现代计算机系统都是多道程序系统,即多道程序并发执行。
程序的并发执行带来了一些新的问题,如资源的共享与竞争,它会改变程序的执行速度。
就象多个人同时住一套房子,当你想去卫生间的时候,如果此时卫生间里有人,你就得等待,影响了你的生活节奏。
如果程序执行速度不当,就会导致程序的执行结果失去封闭性和可再现性,这是我们不希望看到的。
因此应该采取措施来制约、控制各并发程序段的执行速度。
由于程序是静态的,我们看到的程序是存储在存储介质上的,它无法反映出程序执行过程中的动态特性,而且程序在执行过程中是不断申请资源,程序作为共享资源的基本单位是不合适的,所以需要引入一个概念,它能描述程序的执行过程而且可以作为共享资源的基本单位,这个概念就是进程。
进程的生命周期进程和人一样是有生命的,从诞生到死亡要经历若干个阶段。
一般说来进程有三种状态:就绪、执行、等待。
由多种原因可以导致创建一个进程,例如一个程序从外存调入内存开始执行,操作系统就要为其创建进程,当然还可以有其它原因,如一个应用进程为完成一个特殊的任务,可以自己创建一个子进程。
进程被创建后就是在内存中,处于就绪状态,所谓就绪状态就是具备除了CPU之外的所有资源,万事具备,只欠东风,一旦占有了CPU,就变成了执行状态,执行中如果需要等待外围设备输入数据,则进程就沦落为等待状态,操作系统又会从就绪状态队列中调度一个进程占有CPU。
等到数据到来后,等待状态的进程又被唤醒成为就绪状态。
这些状态的转换是通过进程控制原语实现的。
程序的运行是通过进程体现的,操作系统对进程进行管理和控制,那么操作系统怎么了解到进程的状态呢,怎么把资源分配给进程呢,而且进程做状态转换时CPU现场保存在那呢?这要说到PCB(进程控制快)。
PCB是进程的唯一标志,在其中记录了进程的全部信息,它是一种记录型的数据结构,相当于进程的档案。
操作系统就通过PCB感知进程的存在,通过PCB了解进程和控制进程的运行。
PCB也是放在内存中的,如果PCB太大,有些系统把PCB中一些不重要的信息放在外存中。
进程执行速度的制约并发进程由于共享系统内部资源,因此导致进程执行速度上的制约,这种制约分为:间接制约与直接制约。
间接制约引起进程之间的互斥执行,直接制约引起进程间的同步执行。
例如一个家里如果只有一个卫生间,卫生间这个公有资源使得每个人只能互斥使用它,这就是间接制约。
而直接制约是指并发进程各自执行的结果互为对方的执行条件,例如司机与售票员的关系,当司机到站停车后,售票员才能开门,而只有售票员关门后,司机才能开车,他们之间是同步的。
进程的互斥与同步可以很好的通过信号量和PV原语来实现。
通过读一些同步与互斥的例子,你会体会到PV原语的精妙,也会感到一种乐趣。
并发进程的资源竞争不当还会导致死锁现象。
从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。
理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易。
许多程序员从来没有学习过嵌入式系统领域著名的操作系统VxWorks,但是立马就能在上面做开发,大概要归功于平时在Win32多线程上下的功夫。
因此,学习Win32多线程不仅对理解Win32本身有重要意义,而且对学习和领会其它操作系统也有触类旁通的作用。
进程与线程先阐述一下进程和线程的概念和区别,这是一个许多大学老师也讲不清楚的问题。
进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。
而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。
它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
根据进程与线程的设置,操作系统大致分为如下类型:(1)单进程、单线程,MS-DOS大致是这种操作系统;(2)多进程、单线程,多数UNIX(及类UNIX的LINUX)是这种操作系统;(3)多进程、多线程,Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这种操作系统;(4)单进程、多线程,VxWorks是这种操作系统。
在操作系统中引入线程带来的主要好处是:(1)在进程内创建、终止线程比创建、终止进程要快;(2)同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。
另外,线程的出现还因为以下几个原因:(1)并发程序的并发执行,在多处理环境下更为有效。
一个并发程序可以建立一个进程,而这个并发程序中的若干并发程序段就可以分别建立若干线程,使这些线程在不同的处理机上执行。
(2)每个进程具有独立的地址空间,而该进程内的所有线程共享该地址空间。
这样可以解决父子进程模型中,子进程必须复制父进程地址空间的问题。
(3)线程对解决客户/服务器模型非常有效。
进程是计算机进行资源分配和独立运行的基本单位。
3.1 进程的引入引入进程是为了使多道程序并发执行。
1.程序的顺序执行一个程序通常由若干个程序段所组成,它们必须按照某种先后次序来执行,仅当前一个操作执行完后才能执行后继操作,这类计算过程就是程序的顺序执行过程。
例如:先输入→再计算→最后输出,即:I→C →P。
程序顺序执行时的特征顺序性:处理机的操作严格按照程序所规定的顺序执行,即每一个操作必须在下一个操作开始之前结束。
封闭性:程序一旦开始运行,其执行结果不受外界因素影响。
可再现性:只要程序执行时的初始条件和执行环境相同,当程序重复执行时,都将获得相同的结果。
2.程序的并发执行程序的并发执行是指若干个程序(或程序段)同时在系统中运行,这些程序(或程序段)的执行在时间上是重叠的,一个程序(或程序段)的执行尚未结束,另一个程序(或程序段)的执行已经开始。
前驱图前驱图是一个有向无循环图,图中的每个结点可以表示一条语句、一个程序段或进程,结点间的有向边表示语句或程序段的执行次序。
程序并发执行例进程1、2、3并发执行。
对每个进程而言,其输入、计算和输出这三个操作必须顺序执行。
它们之间存在如下先后关系:I1先于C1和I2 , C1先于P1和C2 , P1先于P2I2和C1 , I3、 C2和P1可以并发。
与时间有关的错误例程序并发执行时可能出现与时间有关的错误。
例进程1:r1=x; 进程2:r2=x;r1++; r2++;x=r1; x=r2;设在两进程运行之前,x的值为0。
则两进程运行结束后,x值可为:Bernstein条件读集:语句执行期间要引用的变量集合,记为R(Si)={a1,…,am}写集:语句执行期间要改变的变量集合,记为W(Si)={b1,…,bn}Bernstein条件能保证两条相继的语句并发执行而不会产生与时间有关的错误:R(Si)∩ W(Sj)={ }R(Sj)∩ W(Si)={ }W(Si)∩ W(Sj)={ }例考虑下面是条语句:S1:a=x+y S2:b=z+1S3:c=a-b S4:d=c+1R(S1)={x,y} R(S2)={z} R(S3)={a,b}W(S1)={a} W(S2)={b} W(S3)={c}因R(S1)∩ W(S2)∪R(S2)∩ W(S1)∪W(S1)∩W(S2)={ },故S1和S2可以并发执行。
因R(S2)∩ W(S3)∪R(S3)∩ W(S2)∪W(S3)∩W(S2)={b},故S2和S3不能并发执行。
并发语句的描述方式cobeginS1;S2;…Sn;coend对应的前驱图如右,其中S0和Sn+1分别是cobegin和coend语句前后的两条语句。
程序并发执行时的特征间断性:并发程序具有“执行---暂停----执行”这种间断性的活动规律。
失去封闭性:多个程序共享系统中的资源,这些资源的状态将由多个程序来改变,致使程序之间相互影响。
不可再现性:在初始条件相同的情况下,程序的执行结果依赖于执行的次序。
并发程序的其他特征资源分配动态性:多道程序在运行过程中可根据需要随时提出分配资源的请求。
程序并发执行的相互制约:并发程序执行时相互影响,相互制约。
其相互制约关系分为:直接制约:合作进程之间的相互制约。
间接制约:因资源共享产生的相互制约。
相互通信的可能:多个进程之间可能需要相互传递信息。
同步与互斥的必要:并发进程之间需要调整相对执行速度,许多资源需要互斥使用。
3.2 进程的概念为了描述并发执行程序的动态特性,人们引入了一个新的概念——进程。
1. 进程的定义进程有多种定义,下面列举一些有代表性的定义:进程是可以并发执行的计算部分。
进程是一个程序与其数据一道通过处理机的执行所发生的活动。
进程是一个数据结构及在其上进行加工处理的过程。
进程是一个可以高度独立的活动。
进程是一个具有一定独立功能的程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。
进程的特征动态性:进程是程序的一次执行过程。
动态性还表现为它因创建而产生,因调度而执行,因无资源而暂停,因撤消而消亡。
而程序是静态实体。
并发性:多个进程实体同时存在于内存中,能在一段时间内同时运行。
独立性:在传统OS中,进程是独立运行的基本单位,也是系统分配资源和调度的基本单位。
异步性:也叫制约性,进程之间相互制约,进程以各自独立的不可预知的速度向前推进。