zoukankan      html  css  js  c++  java
  • 操作系统笔记------进程通信与线程

    进程通信(IPC)

    进程通信指进程之间的信息交换,其所交换的信息量,少者是一个状态或数值,多者则是成千上万个字节。

    共享存储器系统

    相互通信的进程共享数据结构或共享存储区,进程之间通过这些空间进行通信。
    实现过程:进程申请一片内存,拿到内存描述符;如果已分配过,直接获得内存描述符;利用内存描述符将内存连接到本进程;进行读写。
    分类:基于共享数据结构的通信方式;基于共享存储区的通信方式

    消息通信系统

    进程间的数据交换,是以格式化的消息(message)为单位进行通信。

    消息通信方式的分类

    直接通信:信息直接传递给接收方,在发送时,指定接收方的地址或标识,也可以指定多个
    接收方或广播式地址,在接收时,允许接收来自任意发送方的消息,并在读出消息的同时获取发送方的地址。
    OS提供两个通信原语:
    发送进程:Send(receiver,msg);
    接收进程:Receive (sender,msg);


    间接通信:借助于收发双方进程之外的共享数据结构作为通信中转,如消息队列。
    间接通信方式:信箱通信
    发送进程:Send(mailbox,msg);
    接收进程:Receive(mailbox,msg);

    信箱分类:公有信箱; 私有信箱; 共享信箱;

    通常收方和发方的数目可以是任意的

    特点:操作系统隐藏通信细节;通信程序简单;可以跨网络传输;灵活。

    管道通信系统

    在磁盘创造一个文件;大小固定,如4kB;发送进程写连续字符流;接收进程按顺序读连续字符流;(UNIX首创)
    对管道文件的共享:同步、互斥

    线程

    进程是分配与拥有资源的独立单位,线程是调度和分派的基本单位。
    线程有时称轻量级进程,是进程中的一个轻型运行实体,是一个CPU调度和分派的基本单位,可并发执行,共享进程资源

    左边是单线程的进程(传统进程),右边是多线程的进程。

    线程的开销

    线程控制块(TCB),寄存器状态,堆栈,局部变量拷贝,线程运行状态(就绪、阻塞、执行),可以创建、撤消另一个线程,优先级与信号屏蔽。

    线程的好处

    创建一个新线程花费时间少(结束亦如此),两个线程的切换花费时间少,同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核适合多处理机系统。

    实现方式

    内核支持线程

    内核支持线程,是在内核的支持下运行,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等,也是依靠内核实现
    内核空间还为每一个内核支持线程设置了一个线程控制块(TCB),内核是根据该控制块而感知某线程的存在的,并对其加以控制。
    对于通常的进程,无论是系统进程还是用户进程,进程的创建、撒消,以及要求由系统设备完成的I/O操作,都是利用系统调用而进入内核,再由内核中的相应处理程序予以完成。进程的切换同样是在内核的支持下实现的。

    若系统中设置的是内核支持线程,则以线程为单位进行调度。

    在采用轮转法调度时,是各个线程轮流执行一个时间片。同样假定进程A中只有一个内核支持线程,而在进程B中有100个内核支持线程。此时进程B可以获得的CPU时间是进程A的100倍,且进程B可使100个系统调用并发工作。
    优点:对多处理器,核心可以同时调度同一进程的多个线程;阻塞是在线程一级完成;核心例程是多线程的。
    缺点:在同一进程内的线程切换调用内核,导致速度下降

    用户级线程

    用户级线程仅存在于用户空间中。可以为一个应用程序建立多个用户级线程。在一个系统中的用户级线程的数目,可以达到数百个至数千个。用户级线程的任务控制块(TCB)设置在用户空间,由用户维护,因此这种线程的创建、撤消、状态转换等功能,都无须利用系统调用来实现。而用户级线程的切换(包括同步与通信),如果发生在一个应用进程的诸多线程之间,也无须内核支持。通常由专门的线程库(包)负责对线程进行管理,无须内核的帮助,因而内核完全不知道用户级线程的存在

    对于设置了用户级线程的系统,其调度仍是以进程为单位进行的。

    在采用轮转调度算法时,各个进程轮流执行一个时间片。但假如在进程A中包含了一个用户级线程,而在另一个进程B中含有100个用户级线程,这祥,进程A中线程的运行时间,将是进程B中各线程运行时间的100倍,相应地,其速度要决上100倍(进程分配的时间相同)。

    优点:线程切换不调用核心;调度是应用程序特定的可以选择最合适(好)的算法;用户级线程(User-Level Threads ULT)可运行在任何操作系统上(只需要线程库)。
    缺点:大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上.

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/yanzs/p/13788249.html
Copyright © 2011-2022 走看看