Section 2 - 进程的描述与控制 - PART - 2

进程的描述与控制

  • 6.进程的通信-高级通信
    • 进程通信是指进程之间的信息交换,根据交换信息量的多少分为:
      • 低级进程通信:交换信息量较少,特点为
        • 效率低
        • 通信对用户不透明
      • 高级进程通信:交换信息量较多,效率高,又分为
        • 共享存储器系统:互相通信的进程通过共享某些数据结构或者存储区读写来交换数据,前者是低级通信(基于共享数据结构的通信方式),只适用于少量数据的交换,后者是高级通信(基于共享存储区的通信方式),通过在内存中划分一块共享存储区,诸进程通过这个共享存储区来进行读写数据实现进程通信
        • 消息传递系统:指进程之间以消息为单位,程序员通过通信原语,在进程间实现数据交换,按照实现方式的不同分为
          • 直接通信方式:发送进程利用OS提供的发送原语,直接将消息发送给接受进程
            • 要求:发送进程和接受进程都以显示方式提供对方的标识符
            • OS提供的通信原语
              • Send(Receiver,message)
              • Receiver(Sender,message)
          • 间接通信方式:发送进程和接受进程通过共享一个中间实体(信箱)来实现进程通信。系统提供的若干条原语:
            • 信箱创建和撤销原语
            • 两条通信原语:①Send(Mailbox,message) 将消息发送给指定邮箱②Receive(mailbox,message)从指定邮箱接受消息
            • 信箱的分类:①私用邮箱(进程是自己创建)②公用邮箱(OS创建)③共享邮箱(某进程创建,但指定为共享的)
            • 发送进程和接受进程之间,存在四种相对关系:①一对一关系:发送进程和接受进程之间建立一条专用的通信链路②多对一关系:允许提供服务的进程与多个用户进程进行交互,也称为客户/服务器交互(C/S interaction)③一对多关系:允许一个发送进程与多个接受进程进行交互,使发送进程可用广播方式,发送消息④多对多关系:允许建立一个公用邮箱,让多个进程都能向邮箱中投递消息,也能取走自己的消息
          • 消息传递系统实现中的若干问题
            • 通信链路:为了在发送进程和接受进程间实现通信,需建立一条通信链路在两个进程间,建立链路有两种方式:
              • 显示建立链路(发送进程需要在通信前用显示"建立连接"原语命令请求OS为之建立一条通信链路,用完后就拆掉链路)
              • 隐式建立链路(发送进程只需要利用OS提供的发送原语,OS会自动为之创建一条链路)
              • 通信链路的链接方式:①点-点②多点
              • 通信方式:①单向通信链路:只允许发送进程向接受进程发送消息,或者相反②双向通信链路:允许进程A和进程B同时互发消息
              • 通信链路的容量:①无容量②有容量
            • 消息格式
              • 消息头
              • 消息正文
            • 进程的同步方式
              • 发送进程和接受进程均堵塞:紧密同步,无缓冲
              • 发送进程不堵塞,接受进程堵塞:应用广
              • 发送和接受进程均不堵塞:较常见,即发送和接受进程都在忙自己事情,仅当发生某事件使他无法继续进程,才会堵塞
          • 直接消息传递系统实例
            • 消息缓存队列通信机制中的数据结构
              • 消息缓存区

                typedef struct message_buffer{
                    int sender; // 发送消息的进程名称或标识符
                    int size;  // 发送消息的长度
                    char *text; // 发送消息的正文
                    struct message_buffer *next; // 指向下一个消息缓存区的指针
                }
                
              • 在进程PCB中设计通信的数据结构

                typedef struct processcontrol_block {
                    struct message_buffer *mq; //消息队列队里的首指针
                    semaphore mutex; // 消息队列互斥信号量,初值为1
                    semaphore sm; // 消息队列资源信号量
                }
                
            • 发送原语send
              • 申请一个消息缓存区,将发送区内容(发送消息正文,进程标识符等)复制到这个缓存区;找到接受区的PCB,执行互斥操作P(mutex),把缓存区挂到接受进程消息队列的尾部,执行V(mutex),然后执行V(sm),即消息数加1
            • 接受原语receive
            • 执行P(sm),查看是否有信件,执行互斥操作P(mutex),从消息队列中摘下第一个消息,执行V(mutex),把消息缓存区内容复制到接收区,释放消息缓存区
Snip20170113_1.png
        - 管道通信系统
            - 发送进程(写进程)通过一个管道(*管道:连接一个读进程和一个写进程之间实现通信的共享文件*)以字符流形式将大量的数据送入管道,接受进程(读进程)从管道接受数据
  • 7.线程的基本概念
    • 引入线程的目的
      • 使多个程序能并发执行
      • 改善资源利用率,提高系统吞吐量
      • 减少程序并发执行时,所付出的时空开销
      • 使OS具有更好的并发性
    • 线程的定义
      • 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程基本上自己不拥有系统资源,只拥有少部分在运行中必不可少的资源,但他可与同属一个进程中的其他线程共享进程所拥有的全部资源
      • 一个线程可以创建和撤销另一个线程
      • 同一个进程中的多个线程可以并发执行
      • 当一个线程改变了存储器中的一个数据项时,当其他线程访问这一项时,能够看到修改后的结果
      • 若一个线程为读操作打开一个文件时,同一个进程中其他线程也能从该文件中读
    • 线程的属性
      • 线程是轻型实体。基本上不拥有系统资源,只有一点必不可少的、能保证独立运行的资源
      • 线程是独立调度和分配的基本单位
      • 可并发执行。一个进程中的多个线程可并发执行;不同进程中的线程也能并发执行
      • 共享进程资源。同一个进程中的多个线程,都可以共享该进程所拥有的资源
Snip20170113_2.png
- 多线程
    - 指OS支持在一个进程中执行多个线程的能力
    - 传统的进程中只有一个线程在执行
        - MS-DOS 是支持单用户进程和单线程的OS
        - UNIX支持多用户进程,但只支持每个进程一个线程(即多进程单线程)
    - 单进程多线程的例子:JAVA运行环境
    - 多进程多线程的例子:Windows 2000
- 多线程OS中*进程*的属性
    -   作为系统资源分配的单位
    -   可包括多个线程。至少包括一个线程,这些线程可并发执行。OS中所有线程都只能属于某一个特定的进程
    -   进程并不是一个可执行的实体了,线程是独立运行的基本单位
- 线程间的同步
    -    互斥锁
        -    比较简单的、用于实现线程间对资源互斥访问的机制
    -    条件变量
        -    为避免互斥锁造成的死锁问题,在创建互斥锁时就联系着一个条件变量
        -    单纯的互斥锁用于短期锁定,用来保证互斥进入CS
        -    条件变量用于线程的长期等待,知道所等资源的可用  
    -    信号量机制
        -    私用信号量
        -    公用信号量
    -    多读、单写锁
-   线程的实现方式
    -  内核支持线程KST(kernel Supported Threads)的实现:如Apple的MAC OS
    -  用户级线程ULT(User Level Threads):一些数据库管理系统
    -  组合方式:把ULT和KST两种方式进行组合,提供了组合方式ULT/KST线程
Snip20170113_4.png
Snip20170113_5.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容