操作系统:进程管理和IO控制

一、进程管理


进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容。

(一)进程控制

进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段。操作系统通过进程控制块(PCB)管理进程。每一个PCB唯一标示一个进程。它存储进程的PID,UID,当前状态等信息,以及进程执行某一时刻的寄存器值,并且指向进程的数据段和程序段。OS把所有PCB链接为一个链表。

进程在刚刚被创建时出于new状态。OS负责申请一块存储空间作为该进程的PCB,在其中填上进程的信息,标示为ready,链接到PCB队列和就绪队列中,此时进程进入"就绪"态。进程调度程序在未来某一时刻将其分配给处理机执行,该进程出于"执行"态,OS将根据PCB中的内容初始化处理机的各个寄存器值,之后进入用户态执行;进程请求I/O或系统调用时将放弃处理机,进入"活动阻塞"态,进程调度程序将当前处理机各寄存器值压栈(存入PCB中,或存入核心栈),将该进程PCB运行队列中移入阻塞队列;当系统调用或I/O完成时被唤醒再次进入活动就绪态,即PCB由阻塞队列链入就绪队列(操作系统如何实现唤醒进程??)。如果在系统调用完成之前,进程被换到外存,相应内存空间被释放,则进程进入"静止阻塞态",这里中级调度程序将和磁盘驱动程序一起,把相应内容拷贝到对换空间,同时释放内存;系统调用完成时若仍在外存中而为未被换入,则出于"静止就绪"态,之后被换入内存可直接进入执行态,或动态就绪态。进程执行完毕后进入"僵死"态,系统将释放内存空间,回收所有资源。

UNIX系统中提供的系统调用中,fork产生一个与父进程完全相同的子进程,在子进程的地址空间中运行;spawn则从文件中装入一个文件作为子进程,在其地址空间运行;exec则从文件中装一个进程到当前进程地址空间,覆盖当前进程执行。

(二)进程调度

这里说的进程调度主要指低级调度,即由调度程序负责完成的,在内存和处理机之间的调度。在文件和内存之间的调度成为高级调度,又叫作业调度,在内存和对换空间的调度称为中级调度,又称对换。低级调度算法主要有:先来先服务FIFO;.短作业优先SJF;.时间片轮转Round
Robin;静态优先级调度;多级队列反馈轮转调度。UNIX系统中采用的动态优先级+多级队列反馈轮转调度。具体内容可参见前面的文章。

(三)进程通信

进程通信有直接通信和间接通信,直接通信是两进程直接交换数据或发送信息,间接通信则是把信息发送到一个中间实体中。根据同步方式,可分为:1.发送进程阻塞,接受进程不阻塞;2.发送进程不阻塞,接受进程阻塞;3.发送进程和接收进程都阻塞。

进程通信也分为高级通信和低级通信。

高级通信通常传输数据量较大,包括:消息机制,共享存储区,管道。

1、消息机制:

  在消息机制里值得注意的是消息缓冲队列方式。发送进程首先申请一块缓冲区,把消息内容和消息首部填入其中,之后调用send系统调用。send将把该进程的消息内容拷贝到消息缓冲队列中;接受进程首先申请接受缓冲区,之后调用receive系统调用,OS负责把消息缓冲队列中的消息拷贝到该进程空间的缓冲区中。

2、管道通信:

  相当于一个队列形式的一个进程在管道尾写,另一个进程在管道头取,管道分为无名管道和有名管道。无名管道是用pipe函数创建的,只能用于子进程之间的通信,有名管道用mkfifo函数创建用于任意两个进程之间通信,对管道的操作相当于对文件的操作比如open函数打开管道close函数关闭管道等。

低级通信包括同步和互斥两种,通过信号量实现,主要针对临界区问题。临界区的互斥访问要遵循4个原则:空闲让进,忙则等待,有限等待,让权等待。主要信号量分为0/1信号量,整型信号量,记录型信号量,AND型信号量和信号量集。经典同步问题有生产者-消费者问题,读者-写者问题,哲学家进餐问题。

信号量:信号量是操作系统提供的管理公有资源的手段,即PV操作。对于独享设备有驱动程序做PV操作。

p操作的过程是:s=s-1;if(s<0){进入等待队列,自己阻塞进程}

v操作的过程是:s=s+1;if(s<0){从等待队列取一个进程;取出的进程进入就绪队列,当前进程该干嘛干嘛}

pv原语不能次序错误,而且必须成对出现。信号量的定义是semaphore
mutex;经典同步问题有生产者-消费者问题;读者-写者问题;哲学家进餐问题。

(四)死锁控制

由于进程竞争资源或推进顺序非法,可能会造成进程死锁。死锁有四个必要条件:互斥访问,请求保持,非剥夺,环路等待。打破其中任何一个都可以不出现死锁。对于死锁的处理有三类方法:

1.死锁预防:主要是打破死锁必要条件中的一个。打破请求保持条件,则要求进程在执行之前一次性请求到所有资源才可以执行;打破非剥夺条件,要求进程执行过程中因为缺少资源无法执行时,剥夺所有资源,将其阻塞;打破环路等待条件,则给资源编号,要求进程请求资源的顺序依照编号由高到低进行。

2.死锁避免:指Dijkstra的银行家算法;

3.死锁检测消除:指在发生死锁时检测资源分配图中是否有子环,然后将一个或多个进程挂起,消除死锁;检测算法是NP完全问题,CPU代价较大。

二、输入输出(I/O)管理


 (一)   I/O管理概述


1.  I/O管理功能


(1)   动态的纪录各种设备的状态

(2)   设备分配与回收

(3)   实施设备驱动和中段处理的工作

 2.  I/O应用接口

(1)  设备和设备控制器的接口:设备和cpu之间不是直接通信的而是夹着一个设备控制器,设备与设备控制器是靠三根线相连的,数据信号线,控制信号线和状态信号线,数据信号线用于在设备和设备控制器之间传送数据信号,控制信号线传送由设备控制器向I/O设备发送控制信号,状态信号线用于传送设备当前状态的信号。

(2)
 设备控制器:控制一个或多个I/O设备,其基本功能有接收和识别(cpu发的)命令,数据交换(与cpu或与设备数据交换),标示和报告设备的状态(给cpu发)地址识别,数据缓冲,差错控制。

(3)
 设备控制器由三部分组成:设备控制器与处理器的接口(由数据线连接DMR和控制状态寄存器,控制线,和地址线组成),设备控制器与设备的接口(多个设备接口,每个设备接口由数据控制和状态三种信号),I/O逻辑(当cpu启动一个设备时,将启动命令发给I/O逻辑同时通过地址线给I/O逻辑由它进行译码。。译出命令后对所选设备进行控制。所以地址线和控制线是直接跟I/O逻辑相连的。

 3.  I/O通道


I/O通道是特殊的处理机。它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作,它的指令单一主要与I/O操作相关的指令,通道没有自己的内存,它和CPU共享内存。通道又分为字节多路通道,数组选择通道,和数组多路通道。

(1)  数组选择通道:又称告诉通道,在物理上可以连接多个设备,但某一段时间内通道只能选择一个设备进行工作

(2)
 数组多路通道:当某设备进行数据传送时,通道只为该设备服务,当设备在执行寻址等控制性动作时,通道挂起该设备的通道程序,去为其他设备服务。

(3)
 字节多路通道:用于大量低速设备,与设备之间数据传送的基本单位是字节,为一个设备传送一个字节后,又可以为另个设备传送一个字节。数组多路通道传输的基本单位是块。而且一次只能有一个设备在传输数据。

 4.  I/O控制方式


(1)  程序I/O方式:忙等方式。

(2)
 中段驱动I/O方式:当某进程要启动某个I/O设备工作时,便由cpu向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务,此时,CPU和
I/O设备并行操作。以字节为单位进行I/O。

(3)  DMA
I/O方式:直接存储器访问方式数据传输的单位是块,数据之间在设备和内存中进行交换,仅块传输的开始和结束时才需要CPU干预。(替代了设备控制
器)。DMA控制器中有四类寄存器:命令寄存器(存cpu发的控制命令或设备的状态),内存地址寄存器,数据寄存器(缓冲数据作用),数据计数器(存本次要读的字节数)。

(4)
 I/O通道控制方式:通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。通道指令格式为命令

1)操作码:规定了指令所执行的操作。

2)内存地址:标明读操作和写操作时的内存首址

3)计数:表示本条占领所要读或写数据的字节数

4)通道程序结束位P:用于表示通道程序是否结束

5)记录结束标志R。

三、设备管理


设备管理包括:缓冲管理,设备分配和设备处理三个内容。

进程I/O一共有四种方式:程序查询方式,程序中断方式,DMA方式,通道控制方式。通道处理器也是一个处理机,但是与CPU相比,它指令较为单一,没有独立的存储空间(使用内存空间)。通道分为字节多路通道,数组多路通道和数组选择通道。

(一)缓冲管理

缓冲管理包括单缓冲,双缓冲,循环缓冲和缓冲池。这里需要注意的是缓冲池。它包括输入队列,输出队列和空闲队列,有四种工作方式:

1.收容输入方式:进程请求向缓冲区输入,从空闲缓冲队列中申请一个缓冲区输入,将之链接在输入队列尾;

2.提取输入方式:进程要从缓冲区中提取输入,则从输入队列尾部缓冲区中拷贝信息,同时释放空间,将之重新链入空闲队列中;

3.收入输出方式:进程要想缓冲区输出,从空闲缓冲区队列中申请一个缓冲区输出,将之链接在输出队列尾;

4.提取输出方式:进程要想缓冲区提取输出,则从输出队列尾部缓冲区中拷贝信息,同时释放空间,将之重新链入空闲队列中。

(二)设备分配

操作系统为实现设备分配需要配备的数据结构有:设备使用表,控制器使用表,通道使用表,系统设备表。利用设备独立性的思想分配设备。所谓设备独立性,是指使用逻辑设备名称来请求某种设备,而系统通过某种名称转换方式将其转换成物理设备名称进行分配。实现设备独立性需要再驱动程序之上再增加一层设备独立性软件,负责实现名称和地址的转换,这种转换信息使用逻辑设备表LUT实现,每一个表项存储逻辑设备名,物理设备名,驱动程序入口地址。使用设备独立性方法实现设备分配,具有灵活性和易于设备重定向。

SPOOLing是设备分配的一个重要例子。它实现了独占设备的共享。SPOOLing系统包括输入井,输出井,输入缓冲,输出缓冲,输入进程和输出进程。进程在请求独占设备输出时,OS要求它先把要输出的内容输入到输入缓冲,之后有输入进程将其输入到输入井中,此时如果处理机要处理这些数据,则从输入井中取数据;独占设备要输出时,由输出进程将输出井中的信息送至输出缓冲,由输出设备输出。这种方式实现了独占设备的共享,如网络打印机。

(三)设备处理

设备处理指的是一系列驱动程序。它们是OS与外设的接口,把OS进程发来的抽象的要求转化为对硬件的具体的控制命令,如设置命令控制字,读取设备状态信息,启动设备等。它们对操作系统提供统一的接口,方便用户调用。

Reference:

操作系统复习总结:理论总结- -


操作系统理论学习笔记


操作系统:进程管理和IO控制,布布扣,bubuko.com

时间: 2024-11-24 05:50:06

操作系统:进程管理和IO控制的相关文章

1.0进程的描述和控制

1.什么是进程 在计算机中,进程就是一段程序的执行. 进程包括: 1)执行这段程序所需要的代码 2)执行程序所需要的相关数据 3)操作系统管理进程所需要的信息——进程控制块 ok了解了进程的基本概念,接下来就要去了解进程的具体组成结构和操作系统如何去控制进程 2.进程的状态 在看进程的状态之前,先复习一下,进程在系统中如何运作. 操作系统通过一种分时机制实现多进程的并发执行.这里用到了并发这个词而不是并行,是因为针对单处理器的计算机来说,从来就不会有并行状态发生,一个处理器同一时间内只能处理一段

操作系统——进程

为了实现程序的并发执行,才引入进程 程序的顺序执行: (顺序性,封闭性,可再现性) 程序的并行执行,提高CPU的效率和系统吞吐率:(间断性,失去封闭性,不可再现性) 引入进程解决程序并发的问题,进程的特征: ① 结构特性,为使程序能够独立运行,应为之配置一进程控制块,即PCB(Process Control Block).而程序段.相关的数据段和PCB三部分构成进程实体.所谓创建进程,实质上是创建进程实体中的PCB,撤销进程也是撤销进程中的PCB. ② 动态性,进行的实质是进程实体的一次执行过程

进程的基础 操作系统 进程的理论

进程的基础 进程的基础 程序 ? 一堆静态的代码文件 进程 ? 一个正在运行的程序进程, 抽象的概念 ? 由操作系统操控调用交于CPU运行 被CPU运行 操作系统 操作系统的基础 ? 管理控制协调计算机中硬件与软件的关系 操作系统的作用 ? 将一些对硬件操作的复杂丑陋的接口, 变成简单美丽的接口 ? 多个进程抢占一个(CPU)资源时, 从操作系统会将你的执行变得合理有序 tip: ? 阻塞: input read write sleep recv accept sendto recvfrom 操

openstack 调用API 实现云主机的IO 控制,CGroup 策略

# vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright (c) 2011 X.commerce, a business unit of eBay Inc. # Copyright 2010 United States Government as represented by the # Administrator of the National Aeronautics and Space Administration. # All Righ

运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

运维经验分享(五)-- 改进的java进程管理的服务控制脚本

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

centos6下jbd2进程占用大量IO处理

刚在尝试重现一个bug时,好像在killed mysql一段时间之后,io一直很高,如下: 12:40:01 PM CPU %user %nice %system %iowait %steal %idle 12:50:01 PM all 12.86 0.00 14.40 1.58 0.00 71.16 01:00:01 PM all 13.38 0.00 15.34 1.50 0.00 69.79 01:10:01 PM all 34.34 0.00 21.24 2.13 0.00 42.29

win/linux 下使用 psutil 获取进程 CPU / memory / IO 占用信息

psutil - A cross-platform process and system utilities module for Python 1. 安装 pip 安装即可. windows 下需要安装 vs2008,否则报错: Unable to find vcvarsall.bat 如果已经安装 vs2010 / vs2012 则需要设置环境变量,VS90COMNTOOLS 指向已有的 vs 变量. vs2010 设置如下: VS90COMNTOOLS = %VS100COMNTOOLS%

无线plc,无线开关量,无线io模块,wifi开关量,io控制卡,无线数据采集RTU模块

标题: 基于lora及wifi无线通信的无线PLC在物联网远程IO控制场合中的应用 标签: 无线plc,无线开关量,无线io模块,wifi开关量,io控制卡 文档介绍: 本文档描述lora和wifi无线通信方式在远程开关量模拟量控制场合中的应用,无线开关量采集传输,无线模拟量采集读取以及0~5V,4-20ma,0~10V,0-20ma电压电流信号的采集传输, ZKD-8I8SO-WIFI是一款无线WIFI通信控制的光耦隔离大电流晶体管IO开关量输入输出控制设备. 主要用于: ?  通过无线WIF