操作系统原理之进程线程模型

在进程与线程模型中,我们所要知悉的有:

  1. 并发环境与多道程序设计。
  2. 进程的基本概念,进程控制块(PCB)。
  3. 进程状态及状态转换。
  4. 进程控制:创建、撤销、阻塞、唤醒,fork()的使用。
  5. 线程基本概念,线程的实现机制,Pthread线程包的使用。
  6. 进程的同步与互斥:信号量及PV操作,管程。
  7. 进程间通信。
  8. 处理机调度。

操作系统中最核心的概念的进程,这是对正在运行程序的一个抽象。

1. 多道程序设计模型

1.1 程序的顺序执行

我们把一个具有独立的程序占CPU直到最终结果的过程称为程序的顺序执行。程序的顺序执行具有如下特点:

1) 顺序性

2) 封装性

3)程序执行结果的确定性

4)程序执行结果的可再现性

由前两个特性,就可以推导得到后面的两个特性

1.2 多道程序系统中程序执行环境的变化

多道程序设计的引入

顺序程序的上述特性是为人们所理解熟悉的,但这不是一切程序所共有的。在追求多部件并行和多任务共享资源的多道程序操作系统的程序设计中,这些性质就不复存在了。并行处理的目的旨在提到处理器、设备的利用率。

多道程序设计环境的特点

所谓多道程序设计,就是允许多个程序同时进入内存并运行。多道程序设计是操作系统所采用的最基本、最重要的技术,其根本目的是提高整个系统的效率。衡量系统效率的尺度是系统吞吐量。所谓吞吐量是指单位时间内系统所处理作业(程序)的道数(数量)。多道程序设计改善了各种资源的使用情况,从而增加了吞吐量,提高了系统效率,但也带来了资源竞争。多道程序设计环境具有以下特点:(1)独立性:每道程序逻辑独立,且执行速度与其他程序无关,执行的起止时间也是独立的。(2)随机性:在多道程序环境下,程序和数据的输入与执行开始时间都是随机的。(3)资源共享性:CPU、输入输出设备、内存、信息等资源都将被各个程序所共享。

程序的并发执行

所谓程序的并发执行,是指两个或两个以上程序在计算机系统中同处于已开始执行且尚未结束的状态。能够参与并发执行的程序称为并发程序。程序并发执行产生了一些顺序执行时不同的特性:(1)并发程序在执行期间具有相互制约的关系(顺序执行是独立的)(2)程序与计算不再一一对应(顺序执行结果是确定的)(3)并发程序执行结果不可再现(顺序执行结果具有再现性)

2 进程模型

2.1 进程的概念

从操作系统的角度来看,可将进程分为系统进程和用户进程两类。系统进程执行操作系统程序,完成操作系统的某些功能。用户进程运行用户程序,直接为用户服务。系统进程的优先级通常高于一般用户进程的优先级。

进程与程序的联系与区别

(1)联系:程序是构成进程(从静态的角度看,进程是由程序、数据、进程控制块(PCB)组成)的一部分,一个进程的运行目标是执行它所对应的程序。

(2)区别:程序是静态的,而进程是动态的。进程既然是程序的执行过程,因而进程是有生命周期的,有诞生亦有消亡。一个进程可以执行一个或几个程序,一个程序亦可以构成多个进程。进程具有创建其他进程的功能。

进程的特性

(1)并发性:可以同其他进程一道向前推进

(2)动态性:其一,进程动态产生、动态消亡;其二,在进程生命周期内,其状态动态变化。

(3)独立性:一个进程是一个相对完整的资源分配单位

(4)交往性:可能与其他进程发生直接的或间接的作用(资源分配是独立的,执行过程中不独立)

(5)异步性

进程的状态及其状态转换

三状态进程模型:运行状态(Running)、就绪状态(Ready,获得CPU就能运行)、等待状态(Waiting,阻塞状态或封锁状态,进程因等待某种事件发生而暂时不能运行的状态)。状态转换可能是:就绪到运行,运行到就绪,运行到等待,等待到就绪。

五状态进程模型:运行状态(Running)、就绪状态(Ready)、阻塞状态(Blocked)、创建状态(New,在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源,加载程序并建立地址空间表等)、结束状态(Exit)。主要状态转换有:创建进程;提交(Admit)完成创建,进入就绪;调度运行(Dispatch);释放(Release,进程完成或失败,进入结束状态,可能是正常退出(Exit)或是异常退出(abort));超时(Timeout,用完时间片);事件等待(Event Wait,进程要求的事件未出现而进入阻塞);事件出现(Event Occurs,进程等待的事件出现)。

七状态进程模型:就绪状态(Ready)、阻塞状态(Blocked)、阻塞挂起状态(Blocked,Suspend,进程在外存并等待某事件的出现)、就绪挂起状态(Ready,Suspend,进程在外存,但只要进入内存获得CPU后,即可运行)。新引入的状态转换为挂起和激活。事件出现(到就绪或是就绪挂起状态)和进程提交(到就绪挂起或是就绪状态)。挂起(Suspend),把一个进程从内存转到外存;激活(Active),把一个进程从外存转到内存。

进程控制块

系统利用PCB来描述进程的基本情况以及进程的运行变化过程。PCB是进程存在的唯一标志。

PCB的内容:调度信息和现场信息两大部分。调度信息供进程调度时使用,描述了进程当前所处的状况,它包括进程名、进程号、存储信息、优化级、当前状态、资源清单、“家族”关系、消息队列指针、进程队列指针和当前打开文件。现场信息刻画了进程的运行情况,由于每个进程都有自己专用的工作存储区,其他进程运行时不会改变它的内容。

进程的组成:由程序、数据和进程控制块三部分组成。PCB是进程的“灵魂”,由于进程控制块保存有进程的地址信息,通过PCB可以得到进程程序的存储位置,也可以找到整个进程。程序和数据是进程的“躯体”。

PCB的组织方式:线性方式;索引方式;链接方式。

进程的队列:就绪队列;等待队列;运行队列。

进程控制

进程控制原语

创建原主:一个进程可以使用创建原主创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的子进程,构成新的父子关系。创建一个进程的主要任务是建立进程控制块PCB。具体操作过程是:先申请一空闲PCB区域,将有关信息填入PCB,置该进程为就绪状态,最后把它插入就绪队列中。以下几种事件导致进程的创建:系统初始化;执行了正在运行进程所调用的进程创建系统调用;用户请求创建一个新进程;一个批处理作业的初始化。

撤销原语:撤销进程的实质是撤销PCB。

阻塞原语:某进程执行过程中,需要执行I/O操作,则由该进程调用阻塞原语把进程从运行状态转换为阻塞状态。

唤醒原语:一个进程因等待事件的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。

UNIX的fork()函数及使用

在UNIX类操作系统中,父进程通过调用fork()函数创建子进程。典型的步骤包括:

  1. 为子进程分配一个空闲的proc结构(进程描述符);
  2. 赋予子进程唯一标识pid;
  3. 以一次一页的方式复制父进程用户地址空间;
  4. 获得子进程继承的共享资源的指针,如打开的文件和当前的工作目录等;
  5. 子进程就绪,加入调度队列;
  6. 对子进程返回标识0;向父进程返回子进程的pid。

新创建的子进程基本与父进程相同:子进程得到与父进程用户地址空间相同的一份拷贝,包括文本、数据和bss段、堆以及用户栈;子进程还获得与父进程任何打开文件描述符相同的拷贝,这就意味着当父进程调用fork()函数创建子进程时,子进程可以读写父进程中的开的任何文件。父进程和新建子进程的区别在于他们有不同的pid。

fork()函数执行的特点是:只被调用一次,却会有两次返回:一次是在调用进程(父进程)中,一次是在新创建的子进程中。在父进程中,fork()返回子进程的PID。在子进程中,fork()函数返回0。因为子进程的PID总是非零的,通过返回值就可以区分程序是父进程还是子进程中执行。

3. 线程模型

3.1 线程的引入

如果说在操作系统中引入进程的目的是为了使多个程序并发执行,以改善资源利用率及提高系统效率,那么,在操作系统中引入线程,则是为了减少程序并发执行时所付出的时间和空间开销,使操作系统具有更好的并发性。

进程有两个基本属性,即进程一个可拥有资源的独立单位;同时又是一个可以独立调度和分派的基本单位。

3.2 线程的基本概念

线程是进程中的一个实体,是CPU调度和分派的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一级寄存器和栈),但它可与属于同一个进程的其他线程共享进程所拥有的资源。

线程的属性

引入线程的好处:创建一个新线程花费时间少(结束亦如此);两个线程的切换花费时间少;

3.3 线程实现机制

用户级线程

内核级线程

3.4 Pthread线程包

4 进程(线程)调度

未经允许不得转载:TacuLee » 操作系统原理之进程线程模型

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址