操作系统——进程管理(1)

一、进程

1、什么是进程

进程是一个正在运行的程序,一个进程至少要包括以下几个方面的内容:程序的代码,程序的数据,CPU寄存器中有关程序运行的数值,堆(为程序动态分配的内存空间),栈(保存运行时上下文信息,保存调用函数的形参和局部变量),进程占用的系统资源(比如打开的文件等等)。

总之,进程包括了程序运行的所有状态信息。

2、进程的特性

动态性:进程是一个正在运行的程序,它的状态信息是在不断变化的。

独立性:每一个进程都有“自己”的寄存器和内部状态,它在运行时独立与其它的进程。但是,在物理上CPU只有一组寄存器,然而每一个进程都有自己的寄存器,该如何做到?每一个进程都有一组属于自己的逻辑上的寄存器。什么是逻辑寄存器?逻辑寄存器就是一个个的内存变量,这些变量存放在进程的PCB(见下文解释)中。当进程运行时,逻辑寄存器就把值存到物理寄存器里,当进程暂停时,就把物理寄存器里的值保存到逻辑寄存器里。

并发性:计算机运行的进程表面上看来是同时运行的,但是事实上是顺序运行的,几个进程依次轮流运行。

3、进程的创建

在系统初始化的时候会创建新的进程。(在Windows操作系统中,有一个名为 启动 的文件夹,如果把程序的快捷方式复制到该文件夹中,那么当系统启动时,就会自动启动这些程序)

正在运行的进程,如果执行了创建进程的系统调用,也会创建新的进程。

用户启动程序。比如,在UNIX/LINUX下在命令行下输入程序名,在Windows下直接双击程序快捷方式。

在初始化一个批处理作业的时候,也会创建新的进程。

总之,从技术上来讲,也就是在一个已经存在的进程中,通过系统调用创建新的进程。

4、进程的终止

正常退出:用户自己关闭程序

错误退出:程序在运行的过程中,发现了一个致命的错误,被迫终止。此时的退出要求是进程自己主动提出的,自愿退出。

致命退出:由于程序设计的缺陷,运行时发生错误,被迫退出。此时的退出是被动退出,不是主动退出。此时是被操作系统强制性的终止运行。

被其它进程终止。如,UNIX/LINUX系统中的Kill函数,Windows中的TerminateProcess函数。

5、进程的状态

运行状态:进程占用CPU,正在CPU上运行。

就绪状态:进程具备了运行的条件,但是由于CPU正在运行其它进程,所以暂时不能运行。

堵塞状态(等待状态):进程由于等待某个事件的发生而暂时不能运行的状态。比如,在等待输入操作,或者与其它进程之间有关系等等

6、如何设计和实现进程的机制

进程管理模块其实也是一个程序模块,它属于操作系统的一部分。程序=算法+数据结构。

首先,我们要设计一个数据结构,用它来表示每一个进程。在操作系统中,用来表示一个进程的数据结构就是进程控制块(Process Control Block,PCB)。每一个进程都有一个PCB,保存与它有关的各种状态信息。在LIUNX系统中,PCB称为“任务结构体”(task struct)。PCB主要包括,进程管理方面的信息,存储管理方面的信息,文件管理方面的信息。

我们通过用PCB来描述进程的情况和进程的运行状态,把它看成进程存在的唯一标志。当创建一个进程的时候,就生成一个PCB,并初始化它的内容。当退出一个进程的时候,只需要把PCB回收就可以了。总之,对进程的管理通过对其PCB的管理实现。

7、状态队列

由于进程是状态是不断变化的,进程之间也是不断进程切换运行的,如何管理进程提高CPU的运行效率?也就是如何管理PCB?

由操作系统维护一组队列,来表示操作系统中所有进程的当前状态,不同的状态用不同的队列表示。处于运行状态的进程构成运行队列,处于就绪状态的进程构成就绪队列,但是处于堵塞状态的进程,则根据堵塞的原因构成不同的堵塞队列。但是没有运行队列,因为任何时候只有一个进程处于运行状态,所以没有必要设置一个队列。


二、线程

1、为什么引入线程

在实际的应用中,有人提出了一个新的实体概念,它满足两个特性:第一,各个实体并行执行;第二,实体之间可以共享相同的地址空间。进程只满足第一个特性,但是不满足第二个特性。所以提出了线程的概念。

2、什么是线程

线程是在进程基础上引入的。进程是程序运行的所以资源的组合,同时也可以看成是一个正在运行的程序,从这个角度来讲可以把进程看成是代码在这个资源环境上的一条执行流程,也就是线程。

进程=线程+资源平台,线程就是代码的执行流程。

在DOS系统中,只允许有一个进程,而且这个进程只有一个线程。在UNIX系统中,允许有多个进程同时存在,但是每个进程只有一个线程。在Windows系统中,允许有多个进程同时存在,而且每一个进程可以同时又多个线程。LINUX系统类似于UNIX,但是可以通过进程组的方式,把相关的一组进程捆绑在一起,使它们能共享地址空间,类似于线程的作用。

3、进程的资源平台上的资源都能共享吗?

一部分是共享资源:进程管理方面的信息,如进程的标识符ID、优先级的状态等;存储管理方面的信息,如代码段、数据段、堆等;文件管理方面的信息,如打开的文件等。

另一部分是独享资源:寄存器和栈,每一个线程都有自己独立的一份。

4、进程和线程的比较

①进程是系统资源的分配单位,在没有线程这个概念之前,进程同时还是CPU的调度单位。但是出现线程之后,进程只是资源的分配单位,而线程称为CPU的调度单位。

②进程拥有一个完整的资源平台,而线程只独享必要的资源,比如寄存器和栈

③线程同样有就绪、阻塞和执行三个基本状态,同样具有状态之间的转换关系。那些适合进程的状态和状态转换关系,也同样适合于线程。

④线程能有效地减少并发执行的时间和空间开销。线程的创建时间比进程短,线程的终止时间比进程短,同一个进程内的各个线程的切换时间比进程短,由于同一进程中的线程共享内存和文件资源 ,可以直接进程通信不需要通过内核进程,从而减小了通信的开销。

5、线程的实现

1、用户线程:在用户空间中实现的一种线程机制,不依赖系统的内核,是由一组用户级的线程库函数来完成线程的管理(线程的创建,终止,同步,调度等)

2、内核线程:在操作系统的内核当中实现的一种线程机制,由操作系统内核来完成线程的创建,终止和管理。

特点:

①在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息,即PCB和TCB(线程控制块Tchread Control Block)都存在于内核空间中,由内核程序来维护,一般的用户程序不能访问。

②线程的创建,终止和切换都是通过系统调用的方式来进行的,需要从用户态转换到系统态,由内核程序完成,所以系统开销比较大。

③在一个进程中,如果一个线程由于发起系统调用而被阻塞,并不会影响其它线程的运行。因为操作系统知道每一个线程的存在。CPU的调度单位也是线程。

④线程是CPU的调度单位,时间片是分配给线程的。

现代操作系统,如Windows操作系统都是采用内核线程的方式实现,以线程作为调度的基本单位。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值