• 第 3 章 进程


      进程是现代分时操作系统的工作单元。

      进程是资源分配的基本单位。

      线程是程序执行的最小单位。

    3.1 进程概念

    3.1.1 进程

      进程是执行的程序,这是一种非正式的说法。进程不只是程序代码(也称文本段),进程还包括数据(程序计数器的值和处理器寄存器的内容等)、进程堆栈(包括临时数据,如函数参数、返回地址和局部变量)和数据段(包括全局变量)和堆。 

       内存中的进程

     3.1.2 进程状态

      新的(new):进程正在创建

      运行(running):指令正在执行

      等待(waitting):进程等待发生某个时间(如I/O完成或收到信号)

      就绪(ready):进程等待分派处理器

      终止(terminated):进程已经完成执行

     3.1.3 进程控制块

      操作系统内的每个进程表示,采用进程控制块(Progress Control Block,PCB),也称任务控制块。它包含于进程的相关信息:

    • 进程状态:新的、就绪、运行、等待、停止等;
    • 程序计数器:表示进程将要执行的下一个指令的地址;
    • CPU寄存器:包括累加器、索引寄存器、堆栈指针、通用寄存器和其他条件码信息寄存器。发生中断时,这些状态信息与程序计数器一起需要保存;
    • CPU调度信息:包括进程优先级、调度队列的指针和其他调度参数;
    • 内存管理信息:包括基地址和界限寄存器的值、页表或段表;
    • 记账信息:包括CPU时间、实际使用时间、时间期限、记账数据、作业或进程数量等;
    • I/O 状态信息:包括分配给进程的I/O设备列表等

    3.1.4 线程

      ...

    3.2 进程调度

      多道程序设计的目标是,无论何时都有进程运行,从而最大化CPU利用率。分时操作系统的目的是在进程间快速切换CPU,以便用户在程序运行时能与其交互。为了满足这些目的,程序调度器选择一个可用进程到CPU上执行。单处理系统不会具有多个正在运行的进程。

    3.2.1 调度队列

      进程在进入系统时,会被加到作业队列(job queue),这个队列包括系统内的所有进程。

      驻留在内存中的、就绪的、等待运行的进程保存在就绪队列。

      等待特定 I/O 设备的进程列表被称为设备队列。每个设备都有自己的设备队列。

      最初,新进程被加到就绪队列中等待,知道被选中执行。当该进程被分配到CPU上执行时,一下时间可能发生:

    • 进程可能发出I/O请求,并被放到I/O队列。
    • 进程可能创建一个子进程,并等待其终止。
    • 进程可能由于中断而被强制释放CPU,重新回到就绪队列

      前面两种情况,进程最终会从等待状态切换到就绪状态,并放回到就绪队列。进程重复这一循环知道终止,然后会从所有队列中删除,其PGB和资源也被释放。

    3.2.2 调度程序

      进程会在各种调度队列之间迁移,操作系统wield调度必须按一定方式从这些队列中选择进程。进程选择通过适当调度器或调度程序来执行。

      通常,对于批处理系统,提交的进程多于可以立即执行的进程,这些进程会被保存到大容量存储设备(通常为磁盘)的缓冲池中,以便执行。长期调度程序从该池中你那个选择程序,加到内存,以便执行。短期调度程序或CPU调度程序从准备执行的进程中选择进程,并分配CPU。

      这两种调度程序的主要区别是执行频率。

        短期调度进程必须经常为CPU选择新的进程。

        长期调度进程执行并不频繁。长期调度程序控制多道程序程度(内存中的进程数量)。长期调度程序进行认真的选择,应该选择I/O密集型和CPU密集型的合理进程组合。

      有的操作系统如分时操作系统可能引入一个额外的中期调度程序。思想是可将进程从内存中换入换出。

    3.2.3 上下文切换

      当中断发生时,系统需要保存当前运行在CPU上的进程的上下文,以便在处理后能够恢复上下文,即先挂起进程,再恢复进程。进程上下文采用PGB表示。

      切换CPU到另一个进程需要保存当前进程状态和恢复另一个进程的状态,这个任务称为上下文切换。

    3.3 进程运行

      大多数系统的进程能够并发执行,它们可以动态地创建和删除,因此操作系统必须提供机制,以创建进程和终止进程。

    3.3.1 进程创建

      进程(父进程)在执行的过程可以创建多个子进程,从而形成进程树。

      大多数的操作系统对进程的识别采用的是唯一的进程识别符pid,通常是一个整数。

      进程创建新进程时,父进程可以与子进程并发执行;父进程等待子进程部分或全部子进程执行完。

    3.4 进程间的通信

      操作系统的并发执行的程序可以是独立的也可以是协作的,与其他进程共享数据的是协作进程。允许进程协助的理由:信息共享、计算加速、模块化、方便。

      协助进程需要一种进程间的通信机制,以允许进程相互交换数据和信息。进程间通信有两种基本模型:共享内存和消息传递。

        共享内存模型会建立一块供协作进程共享的内存区域,进程提供向此共享区域读出或写入数据来交换信息。

        消息传递模型提供在协作进程间交换消息来通信。

      消息传递对交换较少的数据很有用,因为无需避免冲突。对于多核系统,消息传递的性能要优于共享内存。共享内存会有高速缓存一致性问题。

  • 相关阅读:
    html和css简介;
    包装函数,面向切面的函数实现;
    RegExp
    javascript基础语法&5
    用Pyinstaller把Python3.7程序打包成可执行文件exe
    Idea下安装Lombok插件
    Moco框架jar下载地址
    安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的
    如何使用Git命令将项目从github或者服务器上克隆下来
    github怎么创建一个项目,怎么添加一个ssh-key的客户
  • 原文地址:https://www.cnblogs.com/astonc/p/12150702.html
Copyright © 2020-2023  润新知