zoukankan      html  css  js  c++  java
  • 第 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 进程间的通信

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

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

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

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

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

  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/astonc/p/12150702.html
Copyright © 2011-2022 走看看