操作系统学习笔记(三)--进程(下)

Posted on 2016-03-27 19:54  paulingzhou  阅读(349)  评论(0编辑  收藏  举报

上篇随笔不知何故继续编辑发生卡顿,因此重新开一篇随笔继续整理笔记。

 

最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助。同时盼望大家能对文章评论,大家一起多多交流,共同进步!

本篇文章大致内容为:

  • 进程操作(Operatios on Processes)
  • 进程间协同(Cooperating Processes)
  • 进程间通信(Interprocess Communication)

进程终止(Process Termination)

  1. 正常终止:Process executes last statement and asks the operating system to delete it(exit)  

    - Output data from child to parent(via waiting)

    - Process' resources are deallocated by OS

  2. 异常终止:Parent may terminate execution of children processes(abort)

    - Child has exceeded allocated resources 子进程需要的资源高于父进程可提供的资源

    - Task assigned to child is no longer required 子进程的任务不再需要

    - If parent is exiting, in some OSs do not allow child to continue if its parent terminates - cascading termination 若父进程结束,则在某些操作系统中子进程也会终止,层叠终止。

进程间通信(Interprocess Communication)

Independent process 独立进程 不会影响其他进程或被其他进程影响

Cooperating process 协作进程 多个进程一起完成一项任务,其中一个进程的结果可能影响到其他进程或被其他进程所影响

  好处:   1. 信息共享

      2. 提高计算加速比 Conputation speedup

      3. 便于模块化设计 Modularity

      4. 便利:单个用户可以同时完成多项任务 individual user works on many tasks simultaneously

数据交换的机制:IPC - mechanism to exchange data * information

  • 消息传递 Message passing: maximum speed, convenience of communication  使用send和receive两个系统调用
  • 共享储存 Shared memory: easy to implement, smaller amounts of data, slower

下入为消息传递(左图)和共享储存(右图)的结构示意图

生产者-消费者问题 Producer-Consumer Problem

操作系统的范例,生产者生产出消息被消费者所消化。

  • A buffer shared by producer & consumer
  • filled by producer & emptued by consumer
  • unbounded-buffer  无界缓冲区
  • bounder-buffer     有界缓冲区

使用*in和*out两个指针,初始时都设置在系统给进程分配的共享内存空间的最低位,若生产者生产出消息,则将消息放在in指针指向的内存空间,in指针+1;若消费者消化消息,则取出out指针指向的内存空间,out+1.

前驱关系:  P --> C : 缓存全空    C-->P : 缓存全满

Insert():  while(((in + 1) % BUFFERSIZE) == out)  ; //do nothing

Remove():  while(in == out)  ;//do nothing

存在两个问题:

  1. 浪费了in指针指向的前一个储存空间(若不浪费则系统无法判断当前存储空间为全满还是全空),可添加计数器解决;
  2. 共享内存在全空或全满时的do nothing,CPU仍在不停判断内存是否为全空或全满,造成忙等(busy waiting),即系统虽然不执行任何执行CPU仍忙。可将此类进程放入阻塞队列,但还存在上下进程同步等问题。

分割线

________________________________________________________

2016.3.28 更新

进程间通信:Interprocess Communication

进程分为两大类:

  - 独立进程(Independent process):其结果不会影响其他进程的执行。

  - 协同进程(Cooperating process):其结果会影响其他进程的执行或其他进程的结果会影响该进程的执行。

    协同进程的好处:

      - 信息共享 Information sharing

      - 加快运算速度 Computation speedup

      - 便于模块化 Modularity

      - 方便 Convenience -> indivudual user works on many tasks simultaneously

IPC(mechanism to exchange data & information) : 进程间通信机制

分为两类: 消息传递(sharing message),通过send(), receive()两个系统调用传递数据; 共享内存(shared memory),为进程间通信首选

生产者/消费者问题(Producer-Consumer Problem):采用共享内存机制,生产者往共享内存放数据,消费者从共享内存取数据,使用in和out两个指针

具体操作:生产者向in指针指向的地址空间存放数据,消费者从out指针指向的地址空间取出数据。

问题:in指针指向的地址空间被浪费了;busy waiting

消息传递(Message-Passing):进程之间通信保持进程间同步的机制。

提供两类操作: 

  1. send(message) - message size fixed or variable
  2. receive(message)

如果P和Q希望通信,则他们需要:

  1. 建立通信链路(communication link)
  2. 使用send/receive交换数据

实现消息传递时需要考虑的问题:

  1. 如何建立链路?
  2. 链路为两进程专用还是可用于多进程之间通信?
  3. 每一对进程之间有多少种链路?
  4. 链路的容量(即链路的缓存空间)有多大?
  5. 发送的信息时固定的还是可变的
  6. 链路时单向还是双向的

直接通信(Direct Communication)

特性:

  1. 需要显示的创建一个邮箱
  2. 可以对应多个进程
  3. 每一对进程可共享多个链路
  4. 链路可以是单向的,也可以是双向的

操作:

  1. 创建一个新邮箱
  2. 通过邮箱收发数据
  3. 撤销邮箱

send(), receive()为原语,原子操作,一执行就不能被打断(优先级最高)

同步 Synchronous

Blocking is considered synchronous.  --> 可靠性高

阻塞发送:发送者被阻塞直到数据被接收

阻塞接收:接收者被阻塞直到数据被发送

Non-blocking is considered asynchtonous  --> 效率高

非阻塞发送:发送者发出数据后继续执行下一条程序语句

非阻塞接收:接收者接收数据,若无数据则返回空

Zero capacity(零缓冲) --> 发送必须等待接收,即全时段阻塞发送

Bounded capacity(有限缓冲) --> 当缓冲链路的容量满时发送需要等到接收,此时阻塞发送

Unbounded capacity(无限缓冲) --> 缓冲链路的容量无限制,此时全时段非阻塞发送