热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

操作系统(一)处理器管理

进程控制并发控制环境中:创建进程,分配资源;撤销已结束的进程;控制正在进行的程序状态的改变。进程同步为了使进程有条不紊

进程控制

并发控制环境中:创建进程,分配资源;撤销已结束的进程;控制正在进行的程序状态的改变。


进程同步

为了使进程有条不紊的执行,程序设置进程同步机制,进程同步的主要任务就是对众多进行运行进行协调:

方式有两种,分别是

同步

相互合作的进程,由同步机构对它们的执行次序进行协调,前一个进程结束了,后一个进程才开始,前一个进程不结束,后一个进程就不能开始,在这种进程之间合作的执行关系叫同步。

进程同步实现的方法中 最常用的是 信号量机制

互斥

进程在对临界资源进行访问时,采用互斥方式,也就是当一个进程访问临界资源时,另一个要访问该资源的进程必须等待,当占用资源的进程释放资源后,其他进程才能获取临界资源,这种进程间的相互 制约方式叫做互斥。

进程互斥最常用的方法是设置锁,通过加锁、解锁实现互斥。


进程通信

多个进程需要相互配合来完成任务,所以进程间需要通信,进程通信的任务就是完成进程间的信息交换。

同一台计算机系统采用直接通信方式,源进程利用发送命令直接将消息发送到目标进程的消息队列上,然后由目标进程利用接收命令从消息队列里取出消息。

不在同一台计算机系统,由源进程利用发送命令到一个专门存放消息的中间实体中,然后目标进程利用接收命令从中间实体中取出消息。


处理器调度

高级调度(作业调度)将外存上处于后备队列中的那些作业调人内存,并为它们创建进程,分配资源,然后将创建的进程排在就绪队列上,准备在执行。

低级调度(进程调度)按照某种原则决定就绪队列中哪个进行应该获得处理机,在由分配程序执行处理机分配该进程的具动作。进程调度是操作系统中 最基本的调度。

中级调度,负责内外存之间的进程对换,以解决内存紧张的问题,提高内存的利用率和系统吞吐量

 


进程的描述

概念:一个数据结构以及能在其上进行操作的一个程序

或者说一个程序在一个数据集合上执行的过程,是操作系统资源分配和调度的一个独立单位。

一个程序在不同的数据集合上的运行,乃至一个程序在同一数据集合上的多次运行都是不同的进程。

进程的状态转换

就绪状态按照调度算法,获得处理器资源就会进入执行状态

运行状态时间片就会进入就绪状态,若是被I/O请求中断或者等待某一个资源就会进入阻塞状态

等待状态如果获得资源或者完成I/O操作就会进入就绪状态,等待下一次调度。

 

挂起(静止就绪状态)

未被挂起的称为活动就绪状态


进程控制

进程控制的主要任务

为作业程序创建进程、撤销已结束的进程以及控制进程在运行过程中的状态转换

进程控制块PCB

 存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。


进程控制块组成

进程标识信息(内部和外部标识)

进程名绘制序号

说明信息(进程调度信息)

进程状态

进程优先权

进程等待原因

……

现场信息(处理器状态信息)

 

通用寄存器内容

指令寄存器内容

……

管理信息(进程控制信息)

程序和数据的地址

队列指针

进程同步和通信机制

资源清单

链接指针

……

其他信息

……

进程的创建

只有进程才能得到执行,因此程序想要运行,必须为之创建进程,进程创建是操作系统执行程序的需要或者用户或进程要求创建一个新的进程。

引起创建进程的主要事件


  1. 用户登录:用户在终端键入登录命令,合法用户系统为之建立进程,放入就绪队列
  2. 作业调度:批处理系统,作业调度程序按照一定的算法调度某个作业时,便将该作业装入主存,为其分配资源,创建进程,放入就绪队列
  3. 提供服务:运行中用户提出某种请求,系统会专门创建进程为用户提供服务,如打印
  4. 应用请求:例如某程序需要不断从键盘读入数据,然后进行相应处理,处理结果以表格形式显示到屏幕,该进程会分别创建键盘输入进程、表格输入进程来完成相应地工作。

进程创建的处理过程:使用创建原语,按照以下步骤创建进程

为新进程分配唯一的进程标识符,从PCB队列申请一个空闲的PCB;

为新进程的程序和数据,以及用户栈分配相应地主存空间以及其他资源;

初始化PCB中的相应信息,如标识信息、处理信息、进程信息等;

如果就绪队列可以纳入新进程,便将新进程纳入到就绪队列中。

进程的撤销

引起进程撤销的事件: 


  1. 进程正常结束
  2. 进程异常结束,如越界错误、超时故障、非法指令、运行超时、等待超时、算数运算错误、I/O故障等。
  3. 进程应外界的请求而终止运行,例如操作或者操作系统要求父进程干预或者父进程结束等。

进程撤销的过程:调用进程终止原语,按照下列步骤终止进程


  1. 根据终止进程的标识符,从PCB集合中检索该进程的PCB,读出该进程的状态;
  2. 若该进程处于运行状态,则立即终止该进程的运行;
  3. 如果该进程有子孙进程,还要将子孙进程终止;
  4. 将该进程所 占用的资源回收,归还给父进程或者操作系统;
  5. 将终止进程的PCB从所在队列中移出,撤销该进程的PCB,并将其加入到空闲队列。

 

进程与线程的管理
1,进程完成指派工作,正常终止。 
2,由于出现错误,异常终止。 
2,父(或者祖先)进程的要求被终止。

进程的等待

引起进程等待的事件


  1. 请求系统服务:正在运行的程序,请求系统提供服务时,例如申请打印机,但申请的资源正在被其他资源占用,该进程只能处在等待状态;
  2. 新数据尚未到达:如果一个进程需要另外一个进程提供数据后才能继续运行,在所需数据到达之前,只能处于等待状态。
  3. 无新工作可做

处理过程:调用进程等待原语,按照以下步骤阻塞指定进程

立即停止执行该进程;


  1. 修改PCB中的相关信息,把PCB中运行状态又运行改为等待,并填入等待原因,以及进程的各种状态;
  2. 把PCB插入到等待队列,根据等待队列的组织方式,把等待进程的PCB插入到等待队列中;
  3. 转调度程序重新调度,运行就绪队列中其他进程。

进程的唤醒

引起进程唤醒的事件


  1. 请求系统服务得到满足
  2. 启动某种操作完成
  3. 新数据已到达
  4. 有新工作可做

进程唤醒的过程:调用进程唤醒原语按照下列步骤唤醒指定进程


  1. 从等待队列中找到该进程;
  2. 修改该进程PCB控制块中的相关内容,把等待状态改为运行状态,删除等待原语等;
  3. 把PCB插入到就绪队列中,按照就绪队列的组织方式,把唤醒的PCB插入到就绪队列中。

摘自《操作系统》李冬梅


推荐阅读
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文详细探讨了 HAProxy 的基本概念及其与 LVS(Linux Virtual Server)的比较,特别是在内核空间与用户空间的工作差异。文章还深入介绍了 HAProxy 独有的数据结构——弹性二叉树,以及其在高并发场景下的表现。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 本文探讨了如何利用数组来构建二叉树,并介绍了通过队列实现的二叉树层次遍历方法。通过具体的C++代码示例,详细说明了构建及打印二叉树的过程。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • HDFS数据读写流程详解
    本文详细解析了HDFS(Hadoop分布式文件系统)中的数据读写过程,包括从客户端发起请求到最终完成数据传输的每一个关键步骤。 ... [详细]
author-avatar
书友48058773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有