第二章:进程与线程


一:进程

 1.进程的概念和特征:

  1.进程的概念

      1.进程是执行中的一段程序关于某个数据集合的一次运行过程

      2.多进程是指操作系统能同时运行多个任务

      3.创建进程实际上是创建进程映像中的 PCB(进程控制块),PCB是进程存在的唯一标志

      4.一个进程实体由程序段,数据段,PCB(进程控制块)三部分构成   

  进程映像:由程序段,数据段,PCB三部分构成   

  2.进程的特征:

      1.动态性(程序的一次执行, 有创建,活动,暂停,终止等过程,具有一定的生命周期,是动态的产生,变化和消亡)

      2.并发性(多个进程实体同时存于内存中,目的:使进程的程序之间能够并发执行,提高资源利用率)

      3.独立性(进程实体是一个能够独立运行,独立获得资源和独立接受调度的基本单位)

      4.异步性(进程的相互制约导致执行结果的不可再现性,为此操作系统必须配备相应的进程同步机制)

      5.结构性(每个进程都配置一个PCB对其进行描述,进程实体是由程序段,数据段和程序控制快组成)

 2.进程的状态和转换:

    1.进程的五种状态:

      1.运行态

      2.就绪态

      3.阻塞态(等待态)

      4.创建态

      5.结束态

注意:还有一种七状态模型

    2.三种基本状态之间的转换:

      1.就绪态------>运行态:就绪态的进程被调度后,获得处理机的资源,进入运行态

      2.运行态------>就绪态:运行态的进程时间片用完后,让出处理机,变为就绪态  

      3.运行态------>阻塞态:等待某些资源比如 I/O时进入阻塞状态

  3.进程间的通信:

    概念:进程通信是指进程之间的信息交换,进程间的数据交换是以格式化的消息(Message)为单位的

    1.共享存储:通过对进程间一块共享空间进行读/写操作实现进程直接的信息交换,需要同步互斥工具(P,V操作)

        1)低级方式:基于数据结构的共享

        2)高级方式:基于存储区的共享 

    2.消息传递:进程通过系统提供的发送信息和接收信息两个原语进程数据交换

        1)直接通信:发送进程直接把消息发送给接收进程

        2)间接通信:发送进程把消息发送到某个中间实体

    3.管道通信:半双工通信     

二:线程:

  1.线程的基本概念:

    为了减少程序在并发执行时付出的时空开销,提高操作系统的并发性能,引入了线程的概念,

    线程是进程中的一个实体,是被系统独立调度和分派的基本单位,不拥有系统资源

  2.组成:由 线程ID,程序计数器,寄存器集合和堆栈组成。

  3.线程与进程的差别:

    1.调度方面:同一进程内线程切换不会引起进程切换,只需要很小的时空开销,不同进程内线程的切换会引起进程的切换

    2.拥有资源:进程是拥有资源的基本单位,线程不拥有系统资源

    3.并发性:进程之间可以并发执行,线程之间也可以并发执行,提高了系统的吞吐量

    4.系统开销:创建或者撤销进程的开销远大于创建或撤销线程时的开销

    5.地址空间和资源:进程的地址空间相互独立,进程的各线程共享进程的资源

    6.通信方面:进程之间通信需要进程同步和互斥手段辅助,保证数据的一致性,线程之间可以直接读/写进程数据段    

 三:处理机调度:

  1.调度的基本概念:

    因为在多道程序中,进程的数量往往多于处理机的数量,所以会产生处理机资源的抢夺

    处理机调度是按照一定的算法对处理机进行分配,以实现进程的并发执行

  2.调度的层次:

    1.高级调度(作业调度):选取外存上处于后备状态的作业分配内存,并建立进程,可以看作内存和外存的之间的调度

    2.中级调度:把外存中的已经具备运行条件的就绪进程重新调入内存,并修改为就绪态,挂在就绪队列上

    3.低级调度:从就绪队列中选取一个进程将处理机分配给它

  3.进程调度的方式:

    1.非剥夺调度方式

    2.剥夺调度式

  4.典型的调度算法:

    1.先来先服务调度算法(FCFS)

    2.短作业优先调度算法(SJF)

    3.优先级调度算法

    4.高响应比优先调度算法

    5.时间片轮转调度算法

    6.多级反馈队列调度算法

四:进程同步:

  1.进程同步的概念:

    在多道程序环境下,程序是并发执行的,为了协调进程之间的相互制约关系,实现资源共享和进程协作,避免进程之间的冲突,引入了进程同步

  2.临界资源:

    概念:一次仅允许一个进程使用的资源称为临界资源,比如:打印机

    1.访问临界资源:必须互斥的进行

      访问过程:1.进入区:设置正在访问临界区标志,防止其他进程同时进入临界区

           2.临界区:访问临界资源的那部分代码

             3.退出区:清除正在访问临界区的标志

             4.剩余区:代码的其他部分

  3.同步:

    又称为直接制约关系,是指为了完成某种任务而建立的两个或多个进程,这些进程需要在某些位置上协调他们的工作次序而等待,传递信息所产生的制约关系

  4.互斥:

    又称为间接制约关系,一个进程进入临界区时,另一个进程必须等待占用临界资源的进程退出临界区后才允许去访问此临界资源

  5.实现临界区互斥的方法:

    1.软件方法:

      1.单标志法

      2.双标志先检查法

      3.双标准后检查法

      4.皮特森法

    2.硬件方法:

      1.中断屏蔽法

      2.硬件指令法

  6.信号量

    1.概念:是一种功能较强的机制,可以用来解决互斥和同步问题,两个标准的原语:wait(S) 和 signal(S)

    原语:完成某种功能且不被分割,不被中断的执行的操作序列

    可以记为 P 操作:申请     V操作:释放

    2.类型:

      1.整型信号量:

        定义为一个可用于表示资源数目的整型量S

      2.记录型信号量:

        不存在”忙等“现象的进程同步机制,需要一个可用于表示资源数目的整型量S和进程链表L用来连接所有等待该资源的进程

   可以使用信号量实现进程间的同步和互斥问题

五:管程:

  1.管程的定义:

    代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,称为管程

    管程将共享变量以及对这些共享变量的操作封装起来,形成一个具有一定功能的接口模块,这样只能通过管程提供的某个过程才能访问管程中的资源,每次仅允许一个进程进入管程,从而实现互斥,使用完后必须释放管程并唤醒入口等待队列中的进程

六:经典同步问题: 

  1.生产者-消费者问题----(生产者消费者设计模式)

  2.读者-写者问题

  3.哲学家进餐问题

  4.吸烟者问题 

问题1:分别简单的说一说进程和线程已经它们的区别?

    1.进程:进程是具有一定功能的程序在一个数据集合上运行的过程,是系统进行资源调度和分配的一个独立单位

    2.线程:线程是进程的实体,是CPU调度和分配的基本单位,线程本身不拥有系统资源,只有一点必不可少的资源

    3.简单理解就是进程更像是容器,容器的内部是线程,真正干活的是线程

    4.一个进程可以有多个线程,多个线程可以并发执行

  区别:

    1.进程是系统进行资源分配和调度的基本单位,线程是CPU调度和分配的基本单位

    2.线程有独立的地址空间,线程共享所属进程的地址空间

    3.线程依赖进程存在,一个进程最少有一个线程

问题2:线程同步的方式有哪些?

    1.互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问

    2.信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量

    3.事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作

问题3:进程通信的方式有哪些?

    1.P,V操作(低级通信)

    2.共享存储

    3.消息传递

    4.管道(扩展)

      1.管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两条管道

      2.一个进程向管道中写的内容被管道另一端的进程读出,写入的内容每次都添加在管道缓存区的末尾,并且每次都是从缓冲区的头部读取数据

      3.只能用于父子进程或者兄弟进程之间

问题4:并发,并行,异步的区别?  

    1.并发:在一个时间段中同时有多个程序在运行,但是任意时刻其实只有一个程序在CPU上运行,宏观上并发是通过不断的切换实现的

    多线程:并发运行一段代码,是实现异步的手段

    2.并行:在多CPU系统中,多个程序无论宏观还是微观上都是同时执行

    3.异步:同步是顺序执行,异步是在等待某个资源的时候继续做自己的事