计算机操作系统(第四版) 第二章 进程的描述与控制(后四节+清晰的总结+图示)

1 引言

    好久没有整理操作系统的内容,这篇文章整理的是后四节的内容,分别是经典进程的同步问题、进程通信、线程的基本概念、线程的实现。线程的基本概念和实现是后四节中的重点。

2 经典进程的同步问题

    书本上有四个例题,老师目前只讲了第一个问题,同时是最经典的生产者和消费者问题。

生产者和消费者问题



3 进程的通信

    进程通信是指进程之间的信息交换。由于进程的互斥与同步,需要在进程间交换一定的信息,故不少学者将它们也归为进程通信,但只能把它们称为低级进程通信。我们以信号量机制为例来说明,它们之所以低级的原因在于:① 效率低,生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息;② 通信对用户不透明,OS只为进程之间的通信提供了共享存储器。

3.1 进程通信的类型

3.1.1 共享存储器系统(Shared-Memory System)

    在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。据此,又可把它们分成以下两种类型:  (1) 基于共享数据结构的通信方式。  (2) 基于共享存储区的通信方式。

3.1.2 管道(pipe)通信系统

    所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。这种方式首创于UNIX系统,由于它能有效地传送大量数据,因而又被引入到许多其它操作系统中。

3.1.3 消息传递系统(Message passing system)

    在该机制中,进程不必借助任何共享存储区或数据结构,而是以格式化的消息 (message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。  基于消息传递系统的通信方式属于高级通信方式,因其实现方式的不同,可进一步分成两类:  (1) 直接通信方式  (2) 间接通信方式 

4 客户机-服务器系统(Client-Server system)

(1)套接字 (2)远程过程调用和远程方法调用 

4 线程的基本概念

4.1 线程的引入

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





4.2 进程和线程的比较

(1)调度的基本单位(2)并发性(3) 拥有资源 (4)独立性(5) 系统开销(6) 支持多处理机系统

4.3 线程的状态和线程控制块

(1)线程运行的三个状态 

类比进程,线程同样有三个状态,分别是执行态、阻塞态、就绪态。

(2)线程控制块(TCB)

    如同每个进程有一个进程控制块一样,系统也为每个线程配置了一个线程控制块TCB,将所有用于控制和管理线程的信息记录在线程控制块中。

(3)多线程OS中的进程属性

    通常在多线程OS中的进程都包含了多个线程,并为它们提供资源。OS支持在一个进程中的多个线程能并发执行,但此时的进程就不再作为一个执行的实体。多线程OS中的进程有以下属性: (1) 进程是一个可拥有资源的基本单位。(2) 多个线程可并发执行。 (3) 进程已不是可执行的实体。

5 线程的实现

5.1 线程的实现方式

在讲解线程的实现方式之前,我们先来介绍两种线程的类型,

(1)内核支持线程KST(Kernel Supported Threads)

由操作系统管理起来的线程叫内核线程,内核线程是可以被操作系统看到的线程。

(2)用户级线程ULT(User Level Threads)

操作系统看不到的线程

(3)组合方式

有些OS把用户级线程和内核支持线程两种方式进行组合,提供了组合方式ULT/KST 线程。在组合方式线程系统中,内核支持多个内核支持线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程。


5.2 线程的实现

5.2.1 内核支持线程的实现

    在仅设置了内核支持线程的OS中,一种可能的线程控制方法是,系统在创建一个新进程时,便为它分配一个任务数据区PTDA(Per Task Data Area),其中包括若干个线程控制块TCB空间,如下图所示。


5.2.2 用户级线程的实现

(1)运行时系统(Runtime System)

    所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合,其中包括用于创建和撤消线程的函数、线程同步和通信的函数,以及实现线程调度的函数等。正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。

(2)内核控制线程

    这种线程又称为轻型进程LWP(Light Weight Process)。每一个进程都可拥有多个LWP,同用户级线程一样,每个LWP都有自己的数据结构(如TCB),其中包括线程标识符、优先级、状态,另外还有栈和局部存储区等。LWP也可以共享进程所拥有的资源。LWP可通过系统调用来获得内核提供的服务,这样,当一个用户级线程运行时,只须将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。这种线程实现方式就是组合方式。


5.3 线程的创建和终止

5.3.1 线程的创建

    应用程序在启动时,通常仅有一个线程在执行,人们把线程称为“初始化线程”,它的主要功能是用于创建新线程。在创建新线程时,需要利用一个线程创建函数(或系统调用),并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小,以及用于调度的优先级等。在线程的创建函数执行完后,将返回一个线程标识符供以后使用。

5.3.2 线程的终止

    当一个线程完成了自己的任务(工作)后,或是线程在运行中出现异常情况而须被强行终止时,由终止线程通过调用相应的函数(或系统调用)对它执行终止操作。但有些线程(主要是系统线程),它们一旦被建立起来之后,便一直运行下去而不被终止。在大多数的OS中,线程被中止后并不立即释放它所占有的资源,只有当进程中的其它线程执行了分离函数后,被终止的线程才与资源分离,此时的资源才能被其它线程利用。

6 结束语

计算机操作系统的第二章内容到这里就已经结束,下一篇文章的内容是处理机的调度问题。

 分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!

猜你喜欢

转载自blog.csdn.net/chen_yongbo/article/details/79995638