博客
关于我
操作系统(二):进程的管理
阅读量:371 次
发布时间:2019-03-05

本文共 2829 字,大约阅读时间需要 9 分钟。

进程与调度

1. 进程的基本概念

程序是静态的,存在磁盘中的可执行文件,是一系列指令的集合。而进程是动态的,是程序的一次执行过程。进程可以看作是程序在运行时的具体实例,随着时间的推移,进程会不断改变它的状态。

进程的组成

进程由几个部分组成:

  • PCB(进程控制块):操作系统使用的部分,记录进程的状态、任务等信息。
  • 数据段:进程使用的内存区域,包含进程的全局变量等。
  • 程序段:进程执行的指令集合,通常存储在可执行文件中。

PCB是操作系统内部使用的,而数据段和程序段则与进程的运行逻辑密切相关。

进程的特征

进程具有以下几个显著特征:

  • 动态性:进程的状态会随着时间不断变化。
  • 并发性:多个进程可以在同一时间段内并发执行。
  • 独立性:进程之间具有资源隔离性,互不影响。
  • 异步性:进程的执行具有不确定性,无法保证各进程按照预期顺序完成任务。
  • 结构性:进程是执行某个程序的基本单元,具有明确的结构。

2. 进程的状态

2.1 进程状态的变化

进程在运行过程中会经历多个状态。这些状态的变化通常由操作系统的调度机制决定。以下是常见的进程状态变化:

  • 初始状态(无状态):进程被创建,但尚未分配资源。
  • 创建态:进程被成功创建,资源被初始化。
  • 就绪态:进程获得CPU资源,准备执行。
  • 阻塞态:进程因等待某一事件(如I/O操作完成)而暂时停止执行。
  • 终止态:进程正常结束或因错误无法继续执行。
  • 2.2 进程的组织

    进程的组织方式主要有两种:

    • 链接方式:将PCB按照进程状态分为多个队列,操作系统通过队列指针来管理进程。
    • 索引方式:根据进程状态的不同,建立多个索引表,操作系统通过索引表快速定位进程。

    2.3 进程控制

    进程状态的转换需要通过原语实现。原语是一种特殊的内核程序,执行时不会被中断。进程状态的转换通常包括以下步骤:

  • 更新PCB中的相关信息。
  • 将PCB插入适当的队列中。
  • 分配或回收资源(如果有的话)。
  • 3. 进程通信

    3.1 共享存储

    进程间的通信可以通过共享存储实现,主要有两种方式:

    • 基于数据结构的共享存储:速度较慢,适用于简单的交换机制。
    • 基于存储区的共享存储:速度较快,资源分配较灵活。

    在使用共享存储时,各进程必须通过互斥机制确保访问一致性。

    3.2 管道通信

    管道是一种半双工通信机制,特点是:

    • 同时只能单向传输。
    • 管道访问必须是互斥的。
    • 写满时会阻塞等待读,读空时会阻塞等待写。

    管道通信可以分为直接通讯和间接通讯两种方式,通过发送原语和接收原语实现。

    3.3 消息传递

    消息传递是进程间通信的一种高效方式,主要方式包括:

    • 直接通讯:消息直接挂到接收进程的消息缓冲队列上。
    • 间接通讯:消息通过信箱(信道)传递,由操作系统完成分发。

    4. 线程

    4.1 线程的基本概念

    线程是进程内部并发执行的基本单元,主要用于同时执行多个任务。线程具有以下特点:

    • 线程是CPU执行的基本单元。
    • 同一进程内的不同线程共享进程资源。
    • 线程间的通信不需要操作系统的干预。

    4.2 线程的实现方式

    线程的实现方式主要有两种:

    • 用户级线程:由用户级线程库实现,操作系统不可见。
    • 内核级线程:由操作系统内核实现,需要进行用户态和内核态的切换。

    4.3 多线程模型

    多线程模型主要包括以下几种:

    • 一对一模型:一个用户级线程映射到一个内核级线程。
    • 多对一模型:多个用户级线程映射到一个内核级线程。
    • 多对多模型:多个用户级线程映射到多个内核级线程。

    5. 调度

    5.1 三层调度

    调度是操作系统对进程的资源分配和调度,主要分为以下三层:

  • 高级调度(作业调度):决定哪些作业进入内存,创建进程。
  • 中级调度(内存调度):将进程的数据调回内存。
  • 低级调度(进程调度):为进程分配CPU资源。
  • 5.2 进程调度

    进程调度的时机包括:

    • 进程正常终止。
    • 进程运行过程中发生异常。
    • 进程主动请求阻塞(如I/O请求)。
    • 时间片用完。
    • 发生中断。
    • 有优先级更高的进程进入就绪队列。

    进程调度的方式主要有两种:

    • 非剥夺调度:当前运行的进程完成CPU资源后,立即调度下一个进程。
    • 剥夺调度:当前运行的进程被更高优先级的进程抢占CPU。

    5.3 调度算法评价指标

    调度算法的评价通常基于以下指标:

    • CPU利用率。
    • 系统吞吐量。
    • 平均周转时间。
    • 带权周转时间。
    • 平均等待时间。

    5.4 调度算法

    常见的调度算法包括:

    • 先来先服务算法(FCFS):非抢占式,公平。
    • 短作业优先算法(SJF):针对短作业优先调度。
    • 高响应比优先算法(HRRN):综合考虑等待时间和运行时间。
    • 时间片轮转算法(RR):每个进程轮流执行固定时间。
    • 优先级调度算法:根据进程优先级进行调度。
    • 多级反馈队列调度算法:通过多级队列和时间片轮转来优化调度。

    6. 进程的同步与互斥

    6.1 进程同步

    进程同步是确保多个进程能够按照预定顺序执行的机制。常见的同步机制包括信号量和管程。

    6.2 进程互斥

    进程互斥是保证多个进程对共享资源的访问互不干扰。临界资源的访问需要遵循以下原则:

    • 空闲让进:空闲的进程优先访问临界资源。
    • 忙则等待:忙的进程不能中断当前的操作。
    • 有限等待:进程在有限时间内获取临界资源。
    • 让权等待:进程主动让出CPU资源,等待其他进程访问。

    6.3 进程互斥的实现方法

    进程互斥的实现方法主要有以下几种:

    • 单标志法:通过一个标志变量来控制临界区的访问权限。
    • 双标志法:通过两个标志变量来协调进程的进入和退出。
    • Peterson算法:结合了单标志法和双标志法,提高了互斥的效率。
    • 硬件实现:通过TestAndSet指令和swap指令实现互斥。

    6.4 信号量机制

    信号量是一种用于表示系统资源剩余数量的变量。通过wait和signal原语对信号量进行操作,wait表示等待信号量,signal表示释放信号量。信号量可以分为整型信号量和记录型信号量两种。

    7. 管程

    管程是一种高级同步机制,主要用于共享数据结构的访问和操作。管程的特点是:

    • 每次只允许一个进程在管程内执行一个过程。
    • 只能通过过程访问共享数据结构。

    8. 死锁

    死锁是并发环境下由于资源竞争导致的相互等待状态。四个必要条件:

  • 互斥条件:只有一个进程能同时持有资源。
  • 不剥夺条件:进程在持有资源时不能被剥夺。
  • 请求和保持条件:进程在请求资源时必须持有所有需要的资源。
  • 循环等待条件:进程在等待资源时,进入一个无限循环。
  • 防止死锁的方法包括:

    • 安全序列:按照特定顺序分配资源,确保进程能顺利执行。
    • 资源剥夺法:挂起当前进程,抢占其资源。
    • 进程回退法:让进程退回之前的状态。

    9. 死锁的检测与解除

    死锁的检测和解除需要采取以下措施:

    • 检测:通过数据结构记录资源的请求和分配信息,检测是否进入死锁状态。
    • 解除:通过资源剥夺法、终止进程法或进程回退法来打破死锁。

    通过以上内容可以看出,进程与调度是操作系统的核心内容之一。理解这些概念对于掌握操作系统的整体架构至关重要。

    转载地址:http://aztg.baihongyu.com/

    你可能感兴趣的文章
    NuttX 构建系统
    查看>>
    NutUI:京东风格的轻量级 Vue 组件库
    查看>>
    NutzCodeInsight 2.0.7 发布,为 nutz-sqltpl 提供友好的 ide 支持
    查看>>
    NutzWk 5.1.5 发布,Java 微服务分布式开发框架
    查看>>
    NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
    查看>>
    Nuxt Time 使用指南
    查看>>
    NuxtJS 接口转发详解:Nitro 的用法与注意事项
    查看>>
    NVelocity标签使用详解
    查看>>
    NVelocity标签设置缓存的解决方案
    查看>>
    Nvidia Cudatoolkit 与 Conda Cudatoolkit
    查看>>
    NVIDIA GPU 的状态信息输出,由 `nvidia-smi` 命令生成
    查看>>
    NVIDIA-cuda-cudnn下载地址
    查看>>
    nvidia-htop 使用教程
    查看>>
    nvidia-smi 参数详解
    查看>>
    Nvidia驱动失效,采用官方的方法重装更快
    查看>>
    nvmw安装node-v4.0.0之后版本的临时解决办法
    查看>>
    nvm切换node版本
    查看>>
    nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
    查看>>
    ny540 奇怪的排序 简单题
    查看>>
    NYOJ 1066 CO-PRIME(数论)
    查看>>