当前位置: 首页 > article >正文

操作系统之进程

概念

进程是程序的一次执行过程,是动态的。程序则是存放在磁盘上的可执行文件,属于静态。进程是程序的实体运行过程,是系统进行资源分配和调度的独立单位。

组成

  1. 进程控制块(PCB):

    • PID:进程标识符,用于唯一标识一个进程。
    • UID:用户标识符,标识创建该进程的用户。
    • 进程控制和管理信息:用于进程的管理信息。
    • 资源分配清单:记录当前进程所分配的资源。
    • 处理机相关信息:当前进程的CPU寄存器状态等信息。
  2. 程序段

    包含程序代码。
  3. 数据段

    进程运行过程中产生的数据。

特征

  • 动态性:进程在创建、运行和终止的过程中状态不断变化。
  • 并发性:多个进程可以并发执行。
  • 独立性:进程之间独立运行,互不干扰。
  • 异步性:进程的执行顺序不固定,可以通过调度机制进行控制。
  • 结构性:进程具有特定的结构,包含代码段、数据段等。

状态

  • 三种基本状态

    1. 运行状态:进程占有CPU并执行。
    2. 就绪状态:进程等待CPU分配。
    3. 阻塞状态:进程等待某些资源(如I/O操作)。
  • 创建状态:进程被创建,操作系统分配资源并初始化PCB。

  • 终止状态:进程执行结束,撤销PCB并回收资源。

状态转换

状态转换由PCB中的 state 字段表示。

状态转换详细描述
  • 创建 -> 就绪:进程被创建并准备好执行,但还未获得CPU时间。
  • 就绪 -> 运行:进程被调度到CPU上执行。
  • 运行 -> 阻塞:进程因等待某些资源(如I/O)进入阻塞状态。
  • 阻塞 -> 就绪:阻塞条件解除,进程重新回到就绪状态。
  • 运行 -> 就绪:进程被中断,返回到就绪状态等待下一次调度。
  • 就绪 -> 终止:进程正常结束或因异常退出,进入终止状态。

组织方式

  • 链接方式:通过指针形成队列。
  • 索引方式:使用索引表。

这两种方式都由操作系统进行管理。

进程控制

进程控制的主要功能是有效管理系统中的所有进程,提供创建、撤销、状态转换等功能。通过原语实现这些操作,包括:

  • 创建原语
  • 撤销原语
  • 阻塞原语
  • 唤醒原语
  • 切换原语

阻塞和唤醒原语是成对出现的,原语通过“关中断指令”和“开中断指令”实现原子性。

过程
  • 更新PCB中的信息。
  • 将PCB插入合适的队列。
  • 分配或回收资源。

进程通信(IPC)

  • 定义:进程间通信(Inter-Process Communication, IPC)是指两个进程之间的数据交互。
  • 原因:由于进程是资源分配的单位(包括内存地址空间),各个进程之间的内存空间若不独立访问,容易出现安全问题,因此进程间不能直接访问彼此的地址空间。

方式

  1. 共享存储

    • 基于数据结构的共享:低级通信方式。
    • 基于存储区的共享:高级通信方式。
  2. 信息传递

    • 直接通信方式:进程之间直接进行数据传输。
    • 间接通信方式:通过中介(如消息队列)来传输数据。
  3. 管道通信

    • 半双工通信:在某一时间段内只能单向传输数据。
    • 实现双向通信需要设置两个管道。
    • 管道写满时,写进程会阻塞;管道读空时,读进程会阻塞。

进程的调度策略

  • 先来先服务(FCFS):按照进程请求的顺序进行调度,简单但可能导致长进程阻塞短进程(即“吃豆腐”现象)。
  • 短作业优先(SJF):优先调度估计运行时间较短的进程,能提高系统吞吐量,但可能导致长进程饥饿。
  • 轮转调度(Round Robin):为每个进程分配固定的时间片,轮流执行,适合时间共享系统。
  • 优先级调度:根据进程的优先级来进行调度,高优先级进程优先执行,可能导致低优先级进程饥饿。

http://www.kler.cn/a/310138.html

相关文章:

  • Java面向对象编程进阶之包装类
  • 【学习】Fine-tuning知识汇总
  • 基于标签相关性的多标签学习
  • 前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)
  • qt QProcess详解
  • CommandLineParser 使用
  • 【iOS】引用计数
  • 【AI学习笔记】初学机器学习西瓜书概要记录(二)常用的机器学习方法篇
  • 基于Spark的电影推荐系统设计与实现(论文+源码)_kaic
  • Linux:进程(二)
  • AUTOSAR从入门到精通-RTOS调度器(二)
  • Java项目实战II基于Java+Spring Boot+MySQL的保密信息学科平台系统(源码+数据库+文档)
  • 程序设计题(49-56)
  • LeetCode[中等] 438. 找到字符串中所有字母异位词
  • 【嵌入式硬件】续流二极管
  • 前端常用的服务器推送技术
  • python 环境问题
  • 828华为云征文|云服务器Flexus X实例|Ubunt部署Vue项目
  • 使用python来保存键盘输入情况,可保存到sqlite3数据库
  • Nginx 负载均衡:优化网站性能与可扩展性的利器
  • 使用rust自制操作系统内核
  • 需要申请 TAC
  • 「C++系列」异常处理
  • Apache Spark — Repartition 与 Coalesce(调整数据集分区)
  • 【软件测试】压力测试的学习总结
  • 作业帮大数据面试题及参考答案