进程概念的引入
在多道程序的环境下,程序的并发执行代替了程序的顺序执行。它破坏了程序的封闭性和可再现性,使得程序和计算不再一一对应,而且由于资源共享和程序的并发执行导致在各个程序活动之间可能存在相互制约关系。总之,程序活动不再处于一个封闭系统中,而出现了许多新的特征,即独立性、并发性、动态性以及它们之间的相互制约性。在这种情况下,程序这个静态概念已经不能如实地反映程序活动的这些特征。为此20世纪60年代中期的MULTICS系统的设计者和以E. W. Dijkstra为首的T. H.E系统的设计者开始广泛使用“进程"(Process)这一新概念来描述系统和用户的程序活动,而IBM公司的CTSS/360系统使用了另术语“任务"(Task), 但两者的意义相同。
线程概念的引入
在操作系统中引入进程概念的目的在于提高系统效率,提高资源利用率。自从引入了进程的概念后,操作系统便以进程为单位在处理机上并发执行。进程不仅作为系统调度的基本单位,同时也是系统资源分配的基本单位。进程因创建而产生,经调度程序的调度而运行,因等待某一时间而阻塞,最后因完成任务而撤销。这就是说,进程在整个生存期间,不断地改变其运行环境。在进程调度过程中,进程切换是经常的。再进程切换时,由于要保留现运行进程的运行环境,又要设置所选中进程的运行环境,为此要花费不少处理机时间。因此,把进程作为操作系统调度的基本单位要付出巨大的时空开销,从而也限制了系统中进程的数量和进程切换的频率。为了提高系统的并行能力,把并行粒度进一步减小,在进程内部就引入了线程的概念。在引入线程的操作系统中,线程是系统调度的基本单位,而不是独立分配资源的基本单位(资源是分给进程的)。这样,引入了线程的概念后,既减少了系统的时空开销,又增强了系统的并行能力。
什么是进程
进程:进程是操作系统中一个最基本也是最重要的概念,然而对于进程的概念,学界并没有明确的定义,或者说进程这一概念尚未完全统一。下面列举几个操作系统的权威人士对于进程所下的定义:
- 行为的一个规则叫做程序,程序在处理机上执行时锁发生的活动称为进程。(Dijkstrfa)
- 进程是这样的计算部分,它可以与别的进程并发执行。(Madnick and Donovan)
- 顺序进程(有时称为任务)是一个程序与其数据集一道顺序通过处理机的执行所发生的活动。(Alan.C.Show)
- 一个进程是一系列逐一执行的操作,而操作的确切含义有赖于我们以何种详尽程度来描述进程、(Brinch.Hansen)
为了强调进程的并发性和动态性,我们引用徐甲同等老师编著的《计算机操作系统教程》中对进程所下的定义:进程是程序的一次执行,该程序可与其他程序并发执行。
什么是线程
线程:线程可定义为:进程内的一个执行单位,或者定义为“进程内的一个可调度的实体”。在具有多线程机制的操作系统中,处理机调度的基本单位是进程而不是线程。
线程和进程的关系
(1)二者均可并发执行。
(2)线程是指进程内的一个执行单元,也是进程内的可调度实体。一个程序至少有一个进程,一个进程至少有一个线程,一个线程只属于一个进程。每个进程在创建时通常只有一个线程,需要时这个线程可以创建其他线程。
(3)进程的多线程都在进程的地址空间活动。
(3)资源分配给进程,而不是分配给线程,同一进程的所有线程共享该进程的所有资源,线程在执行中需要资源时,系统从进程的资源配额中扣除并分配给它。
(4)处理机调度的基本单位是线程,处理机分给线程,即真正在处理机上运行的是线程。
(5)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.进程和线程的主要差别在于它们是不同的操作系统资源管理方式。 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间, 一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。