操作系统 第二章 进程通信+线程--笔记

进程通信的类型

高级通信机制可归结为四大类

  1. 共享存储器系统(操作存储区方式)
    相互通信的进程共享某些数据结构或共享存储区
    a.基于共享数据结构的通信方式(低级)
        各进程公用某些数据结构,借以实现诸进程间的的信息交换
        程序员:提供对公用数据结构的设置及对进程间同步的处理。
        操作系统:提供共享存储器。
        特点:复杂、效率低,只适合传递喜爱那个对少量的数据
    b.基于共享存储区
        在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。
        进程通信前先向系统申请获得共享存储区中的一个分区,并指定该分区的关键字;若系统已经分给了其他进程,则将该分区的描述符返回给申请者,申请者把获得的共享存储分区连接到本进程上;此后,便可像读、写普通存储器一样地读、写该公用存储分区。多进程借助该区通信。

  2. 消息传递系统(发–收方式)
    最广泛使用的一种,进程间的数据交换,以格式化的消息为单位。屏蔽底层复杂的操作。
    单机:操作系统底层编程中的消息传递系统调用。
    计算机网络:消息成为报文。程序员直接利用系统提供的一组通讯命令(原语)进行通信

  3. 管道通信(中间文件方式)
    所谓管道,是指用于连接读进程和写进程,以实现通信的一个共享文件,又名pipe文件
    向共享文件输入的写进程以***字符流形式***将大量数据送入管道;而接收管道输出的读进程则从管道中接受(读)数据

4.Client-Server system

消息传递通信的实现方法

1.直接通信方式
发送进程利用操作系统所提供的发送命令(原语),直接把消息发给目标进程。此时发送进程和接收进程都以显式方式提供对方的表示符。通常利用通信命令(原语):
Send()、Receive()
【例】
在这里插入图片描述

2.间接通信方式(即可实时通信,又可非实时通信)
基于共享数据结构的实体用来暂存发送给目标进程的消息;接收进程则从该实体中取出消息,通常把这种实体称为信箱

消息传递系统的实现

1.通信链路的建立
2.消息格式
3.同步方式

消息缓冲队列通信机制

美国Hansan提出,在RC4 4000系统上实现。
1.不需要管理链路
2.定义简单数据结构(消息格式)
3.实现发送和接收的操作原语

在这里插入图片描述

在这里插入图片描述

认识线程

多道程序管理中,追求效率的目的下实现并发,便引入了线程

并发性与效率的讨论(利用进程实现的多道程序中):
进程是一个可拥有资源的独立单位;是一个可独立调度和分配资源的基本单位

在这里插入图片描述

多线程OS中,一个进程包括多个线程,每个线程都是利用CPU的基本单位。

线程的信息(TCB)
标识符、运行状态、优先级、寄存器状态、堆栈。。。。。。

创建新线程:利用线程创建函数,创建完成后,返回一个线程标识符供以后使用。
线程被终止:不立即释放资源,只有当进程中其他线程执行分离函数后资源才会分离出来,被其他线程使用;被终止而未被释放资源的线程仍可被需要它的线程调用,使其重新恢复运行。

多线程系统中的进程

进程只适用于分配系统资源,包括多个线程,不是执行实体,线程在进程范围内作为执行实体

线程与进程的比较

  1. 调度:线程作为CPU调度的基本单位,而进程只作为其他资源分配单位
  2. 并发性:进程之间可以并发,实质上是不同进程的两个线程并发。一个进程的多个线程也可并发。
  3. 拥有资源:进程间的资源相互独立;统一进程间的线程间共享;某个进程内的线程在其他进程不可见
  4. 系统开销:线程上下文切换在同进程下切换的快。因为同进程内线程共享内存地址和打开的文件资源

线程的管理

1.互斥锁–适用于高频度使用的关键共享数据和程序段(unlock和lock两个锁操作原语) 2.条件变量 与互斥锁一起使用,锁能保证互斥进入临界区,利用条件变量使线程阻塞 注意不满足条件时,wait条件变量: 释放互斥锁,进程阻塞在条件变量指向队列中,被唤醒后要重新再设互斥锁 3.信号量 私用信号量:用于同进程的线程同步 公用信号量:用于不同进程间