操作系统第二篇【进程管理】

进程的概述

首先,我们要明白一点:程序不能独立运行,作为资源分配和独立运行的单位是进程。操作系统所具有的四大特征也都是基于进程而形成的。

学习进程的前提:

  • 前面也讲了操作系统的发展历史,我们知道未配置操作系统和单批到处理系统的程序是按照顺序执行的只有前边的程序执行完了,后边的程序才能执行。因此,CPU的利用率是非常低下的。
  • 为了能更好地描述程序的顺序和并发执行情况,我们先介绍用于描述程序执行先后顺序的前趋图
  • 所谓前趋图(Precedence Graph),是指一个有向无循环图,可记为DAG(Directed Acyclic Graph),它用于描述进程之间执行的先后顺序

根据前趋图,我们就可以发现程序有以下的三个特性:

  • 顺序性:指处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束;
  • 封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;
  • 可再现性:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都可获得相同的结果。

但是,当程序中引入了并发这么一个概念的时候,会给程序带来新的特征:

  • (1) 间断性
  • (2) 失去封闭性。
  • (3) 不可再现性。

为什么要引入进程:

在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可再现性的特征。由此,决定了通常的程序是不能参与并发执行的,否则,程序的运行也就失去了意义。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念

小总结:引入进程就是为了能够让程序能够并发执行

进程的定义:

  • (1) 进程是程序的一次执行。
  • (2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
  • (3) 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

进程的特征:

除了进程具有程序所没有的PCB结构外,还具有下面一些特征:

  • (1) 动态性。
  • (2) 并发性。
  • (3) 独立性。
  • (4) 异步性。

进程的基本状态和装换

一般而言,每一个进程至少应处于以下三种基本状态之一: **(1) 就绪(Ready)状态。(2) 执行(Running)状态。(3) 阻塞(Block)状态。 **

进程控制

进程控制是指系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。

进程的控制是通过原语实现的。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语、挂起原语和激活原语等。

一般,把系统态下执行的某些具有特定功能的程序段称为原语。 原语可分为机器指令级原语和功能级原语。 前者是一条语句,后者是一段代码。 机器指令级原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。 功能级原语的特点是作为原语的程序段不允许并发执行。

  • 1)活动就绪Readya→静止就绪Readys:Suspend原语
  • 2)活动阻塞Blockeda →静止阻塞Blockeds:Suspend原语
  • 3)静止就绪Readys→活动就绪Readya:Active原语
  • 4)静止阻塞Blockeds→活动阻塞Blockeda:Active原语

引起挂起状态的原因:

  1. 1)终端用户的请求。
  2. 2)父进程的请求。
  3. 3)负荷调节的需要。
  4. 4)操作系统的需要。
  5. 5)对换的需要。

进程与进程之间的关系

这里写图片描述

在进程有关系的时候有两种关系

  • 互斥(间接制约)
  • 同步(直接制约)

信号量机制

信号量机制进程同步的一个工具,使用它能够合理地分配CPU资源,管理进程

一般地,我们对资源分配的时候,我们有以下的原则:

  • 同步时将信号量设置为0
  • 互斥时将信号量设置为1
  • 有几个进程设置几个信号量
  • 当等于0的时候,表示资源与进程数平衡
  • 当大于0的时候,表示资源多,临界资源有余
  • 当小于0的时候,表示资源少

记录型信号量机制

  • wait()(P操作)
    • 申请资源,减少
  • signal()(V操作)
    • 释放资源,增加

信号量的应用

  1. 利用信号量实现进程互斥

为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。

  1. 利用信号量实现前趋关系

还可利用信号量来描述程序或语句之间的前趋关系。设有两个并发执行的进程P1和P2。P1中有语句S1;P2中有语句S2。我们希望在S1执行后再执行S2。为实现这种前趋关系,只需使进程P1和P2共享一个公用信号量S,并赋予其初值为0,将signal(S)操作放在语句S1后面,而在S2语句前面插入wait(S)操作,即

在进程P1中,用S1;signal(S); 

在进程P2中,用wait(S);S2;

进程通信

进程通信,是指进程之间的信息交换,其所交换的信息量大小不一。

信号量机制在通信方面的缺点:1) 效率低;2) 通信对用户不透明。

高级进程通信是指用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。(往往我们都是使用高级进程通信的)

进程的通信类型

在进程通信的时候还有几种类型可分:

  • 共享存储器系统
    • 在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
  • 消息传递系统
    • 消息传递机制是使用最广泛的一种进程间通信的机制(这种用的多)
    • 操作系统隐藏了通信的细节,简化了通信程序的编制。
  • 管道通信
    • 管道是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。

消息传递系统的实现方法又可以分几种:

  • 直接通信方式
    • 1) 发送原语:Send(Receiver,message);发送一个消息给接收进程
    • 2) 接收原语:Receive(Sender,message);接收Sender发来的消息
  • 间接通信方式
    • 通过信箱:指进程之间的通信,需要通过作为共享数据结构的实体。

在间接通信的方式中,信箱作为的是一个实体

  • 私用信箱
  • 公有信箱
  • 共享信箱

对于信箱而言也有几种关系:

  • 一对一关系
  • 多对一关系
  • 一对多关系
  • 多对多关系

原文发布于微信公众号 - Java3y(java3y)

原文发表时间:2018-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

CPU的进程调度策略

For real time scheduling #实时进程 SCHED_RR #论寻 Round-robin fashion,each process ge...

3434
来自专栏编程一生

一个处理大数据的后台服务(已废弃)

922
来自专栏Spark学习技巧

如何理解Linux中的load averages?

经常和 Linux 打交道的童鞋都知道,load averages 是衡量机器负载的关键指标,但是这个指标是怎样定义出来的呢?

582
来自专栏虚拟化云计算

kvm虚拟机的FT(容错)方案

KVM中的FT(fault tolerance),也叫non-stop service。在有些场景下也被称为虚拟机热备。

4038
来自专栏流媒体

Linux下Socket编程(六)——udp简介

中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要...

752
来自专栏Java架构

今咱们来聊聊JVM 堆外内存泄露的BUG是如何查找的前言内存泄露Bug现场查找线索总结

1694
来自专栏企鹅号快讯

分布式系统一致性分类,你知道几种?

为了提升系统的可用性、性能、扩展性,我们可以从两个方面着手, 要去建立多个副本。可以放到不同的物理机、机架、机房、地域。一个副本的失效可以让请求转到其他副本。 ...

97410
来自专栏JAVA高级架构

高并发后端设计-限流篇

系统在设计之初就会有一个预估容量,长时间超过系统能承受的TPS/QPS阈值,系统可能会被压垮,最终导致整个服务不够用。为了避免这种情况,我们就需要对接口请求进行...

4166
来自专栏杨建荣的学习笔记

一个MySQL死锁问题的反思

很早之前我写过几篇关于MySQL死锁的分析,比如 换个角度看待MySQL死锁的一点简单认识 MySQL死锁的两个小案例 MySQL在RR隔离级别下的unique...

3408
来自专栏腾讯Bugly的专栏

《iOS APP 性能检测》

| 导语 最近组里在做性能优化,既然要优化,就首先要有指标来描述性能水平,并且可以检测到这些指标,通过指标值的变化来看优化效果,于是笔者调研了iOS APP性能...

8384

扫码关注云+社区