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)可运行在任何操作系统上(只需要线程库)。
    缺点:大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上.

  • 相关阅读:
    GIthub的小技巧
    C#中DateTime格式转换
    流程控制: if分支 while循环 for循环
    注释,输入,格式化输出,数据类型,运算符
    计算机原理简单了解
    day30
    day19
    day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期
    day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理
    day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入
  • 原文地址:https://www.cnblogs.com/yanzs/p/13788249.html
Copyright © 2011-2022 走看看