操作系统笔记---进程的描述与控制

来源:互联网 发布:js urlencoder.encode 编辑:程序博客网 时间:2024/05/10 13:37

进程:系统资源分配和独立运行的基本单位 

在20世纪60年代中期来说,但20世纪90年代后,线程才是作为调度和分派的基本单位

把资源调度与分配和拥有资源两个属性分开,进程作为分配资源的基本单位,线程作为调度分派的基本单位

前趋图概念:一个有向无循环图

  • 直接前驱

  • 直接后继

程序执行:

  1. 顺序执行:特征

    1. 顺序性

    2. 封闭性(独占全部资源,不受外界因素影响)

    3. 可再现性(同一输入同一输出)

  2. 并发执行:(多道程序技术,提高了系统吞吐量和资源利用率)

    1. 间断性

    2. 失去封闭性

    3. 若无进程同步则,不可再现性


进程的定义和特征

进程控制块:为了使参与并发执行的每个程序含数据都能独立运行,在操作系统中必须为之分配一个专门的数据结构,称为进程控制块(PCB)。

PCB记录了操作系统所需的,用于描述进程当前情况以及管理进程运行的全部信息

进程实体:由程序段,相关数据段和PCB三部分构成、

进程特征:

  1. 动态性

  2. 并发性

  3. 独立性

  4. 异步性


进程的基本状态和转换:

进程的三种基本状态:

  1. 就绪状态(进程已处于准备好运行的状态,获得出CPU以外的所有必要资源)

  2. 执行状态(进程获得CPU)

  3. 阻塞状态(正在执行的进程由于发生某时间,暂时无法继续执行)

    1. 阻塞队列:通常系统将处于阻塞状态的进程排成一个或按阻塞原因分成多个队列。


具有创建,终止,挂起状态的进程状态图

  1. 创建

  2. 终止

  3. 活动就绪---->被挂起--->静止就绪---->被激活---->活动就绪

  4. 静止就绪       

  5. 静止阻塞

  6. 活动阻塞---->被挂起---->静止阻塞---->释放(阻塞完毕)--->静止就绪------>被激活----->活动就绪

  7. 执行



进程管理块中的数据结构:PCB记录了操作系统所需的,用于描述进程当前情况以及管理进程运行的全部信息

进程PCB的作用:使一个在多道程序环境下不能独立运行的程序含数据,变为一个能独立的基本单位,一个能与其它进程并发执行的进程

  1. 作为独立运行基本单位的标识

  2. 能实现间断性运行方式

  3. 提供进程管理所需要的信息

  4. 提供进程调度所需要的信息

  5. 实现与其它进程的同步与通信

进程控制块中的信息:

  1. 进程标识符(1.外部标识符  2.内部标识符)

  2. 处理机状态:主要是由处理机的各种寄存器中的内容组成的

    1. 通用寄存器

    2. 指令计数器(程序计数器)(存放要访问的下一条指令地址)

    3. 程序状态字PSW(包含状态信息,如条件吗,执行方式,中断屏蔽标识等)

    4. 用户栈指针

  3. 进程调度信息:在OS进行调度时,必须了解进程的状态以及有关进程的调度信息

    1. 进程状态

    2. 进程优先级

    3. 进程调度所需要的其他信息,与所采用的进程调度算法有关

    4. 事件:阻塞原因

  4. 进程控制信息:指进程控制所必须的信息

    1. 程序和数据的地址

    2. 进程同步和通信机制:这是实现进程同步和进程通信时所必须的机制,入消息队列指针,信号量等

    3. 资源清单

    4. 链接指针


进程控制块PCB的组织方式:

  1. 线性方式

  2. 链接方式

  3. 索引方式





进程控制:进程控制是进程管理中最基本的功能,主要包括创建新进程,终止已完成的进程,将引发异常情况无法继续运行的进程置于阻塞状态,负责进程运行中的状态转换等功能

操作系统内核:内核模块通常位于硬件的软件层次,常驻内存原因:

  1. 便于对这些软件进行保护

  2. 提高OS的运行效率

处理机执行状态分为:

  • 系统态:(管态,内核态)具有较高特权,执行一切指令,访问所有寄存器和存储区

  • 用户态:(目态)较低权限的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区

大多数内核都包含以下两大功能:

  1. 支撑功能:提供给OS其他众多模块所需要的基本功能, 其中三种最基本如下

    1. 中断处理

    2. 时钟管理

    3. 原语操作

  2. 资源管理功能

    1. 进程管理

    2. 存储器管理

    3. 设备管理


进程创建:

  1. 申请空白PCB:为新进程申请获得唯一的数字标识符,并从PCB集合中获取一个空白的PCB

  2. 为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存,文件,I/O设备和CPU时间等

  3. 初始化进程控制块(PCB)

    1. 初始化标识信息,将系统分配的标识符和父进程的标识符填入新的PCB中;

    2. 初始化处理机状态信息,使程序计数器指向程序入口地址,使栈指针指向栈顶

    3. 初始化处理机控制信息,将进程的状态设置为就绪状态或者静止就绪状态,默认设置为最低优先级,除非用户显示指定优先级

    4. 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列



进程终止:

  1. 正常结束

  2. 异常结束

    1. 越界错

    2. 保护错

    3. 非法指令

    4. 特权指令错

    5. 运行超时

    6. 等待超时

    7. 算术运算错

    8. I/O故障


  3. 外界干预

    1. 操作员或操作系统干预

    2. 父进程请求

    3. 因父进程终止而终止


进程终止过程:

  1. 根据被终止进程的标识,从PCB集合中检索出该进程的PCB,从中读取该进程的状态

  2. 终止进程,并置调度标志为真

  3. 如还有子孙进程,终止他们

  4. 归还所有资源给父进程或者归还给系统

  5. 将被终止进程(PCB)从所在队列中移除,等待其他程序来收集信息


进程阻塞:(原因)

  1. 向系统请求共享资源失败

  2. 等待某种操作完成

  3. 新数据尚未到达

  4. 等待新任务的到达


进程阻塞:(过程)

  1. 阻塞是进程本身的一种主动行为,先把进程控制块中的现行状态由”执行“改为”阻塞“

  2. 将PCB插入阻塞队列,如果系统中设置了不同阻塞队列,则进入相对应的阻塞队列

  3. 切换进程:转调度程序进行重新调度,将处理机分配给另一个就绪进程,保留被阻塞进程的处理机状态,按新进程PCB中的处理机状态设置成CPU环境


进程唤醒:(过程)

  1. 将被唤醒过程从阻塞队列中移除

  2. 设置PCB中的状态由阻塞改为就绪

  3. 将该PCB插入就绪队列


进程挂起:(过程)

  1. 首先检查被挂起进程状态,若为活动就绪状态,则改为静止就绪,若为阻塞,则改为静止阻塞

  2. 为了方便用户或父进程考察该进程运行情况,把该进程的PCB复制到某指定的内存区域

  3. 若被挂起的进程正在执行,则转向该调度程序重新调度


进程激活:(过程

  1. 重置进程PCB状态,静止就绪改为活动就绪,静止阻塞改为活动阻塞

  2. 若采用抢占调度策略,进程被激活插入就绪队列时,由调度程序判断当前运行进程与被激活进程的优先级,若被激活进程优先级高,立即终止当前进程运行,把处理机分配给该进程,否则不必重新调度



进程同步:对多个相关进程在执行次序上进行协调,使并发执行的进程之间能按照一定的规则或时序共享系统资源,并能很好的相互合作,从而使程序的执行具有可再现性。

两种形式的制约关系:

  1. 间接相互制约关系:由进程提出申请资源,由系统实施统一分配,而不允许用户进程直接使用资源

  2. 直接相互制约关系:进程间的相互制约关系就是源于他们之间的相互合作


临界资源:许多硬件资源如打印机,磁带机等都属于临界资源,进程们应该采取互斥方式,实现对这种资源的共享

临界区:人们把每个进程中访问临界资源的那段代码称为临界区


同步机制应该遵循的机制:

  1. 空闲让进

  2. 忙着等待

  3. 有限等待

  4. 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入盲等状态


进程同步机制:

1. 硬件同步机制:虽然可以利用软件方法解决进程们互斥进入临界区的问题,但存在很大局限性,因而现在已很少采用

  • 关中断:缺点

    • 滥用关中断权利可能导致严重后果    

    • 关中断时间过长,会影响系统效率

    • 关中断方法不适合多CPU系统,因为在一个处理器上关中断并不能防止进程在其他处理器上执行相同的临界段代码

  • 利用Test-and-Set指令实现互斥

  • 利用Swap指令实现进程互斥

2. 信号量机制:信号量表示资源剩余量(缺点:进程自备同步操作,给系统管理带来麻烦,若同步操作不当,容易导致系统死锁)

  • 整型信号量:缺点:不遵循”让权等待“,进入盲等

  • 记录型信号量:数据结构包含两个属性,1.剩余资源量  2.等待列表, 遵循让权等待原则

  • AND型信号量:把所需资源一次性划分,缺一不可。

  • 信号量集

3. 管程机制:代表共享资源的数据结构以及由对该共享资源数据结构实施操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块

管程特性:

  • 模块化

  • 抽象数据类型(包含条件变量)

  • 信息掩蔽:管程中的数据结构只能被管程中的过程访问,private

管程与进程的不同之处:

  1. 管程定义的是公共数据结构,进程定义的是私有数据结构PCB

  2. 二者都存在对各自数据结构上的操作,管程主要是进行同步操作和初始化操作,而进程是由顺序程序执行有关操作

  3. 管程的设置是为了解决资源共享的互斥使用问题,进程是实现系统的并发性

  4. 管程是被动工作方式,进程是主动工作方式,进程调用管程中的过程对共享数据结构实行操作

  5. 进程能并发执行,而管程则不能与其它调用者并发

  6. 进程具有动态性,而管程则是操作系统的一个资源管理模块,供进程调用




进程通信:
进程通信类型(高级通信机制四大类):

  1. 共享存储器系统

    1. 基于共享数据结构的通信方式

    2. 基于共享存储区的通信方式

  2. 管道通信系统:管道指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件

  3. 消息传递系统:以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令,在进程间传递消息,完成进程间得到数据交换

    1. 直接通信系统

    2. 间接通信系统:指发送和接受进程都通过共享中间实体(称为邮箱)的方式进行消息传递

  4. 客户机-服务器系统:在网络环境的各种应用领域已成为当前主流通信实现机制

    1. 套接字:一个通信标识类型的数据结构,包含通信目的地址,端口号,传输层协议,进程所在网络地址,以及针对客户或服务器程序提供的不同系统调用API等。

      1. 基于文件型:本地通信环境,通信双方通过对一个特殊文件的读写实现通信,原理类型管道通信

      2. 基于网络型

    2. 远程过程调用

    3. 远程方式调用



线程的基本概念:由进程产生,作为调度和分派的基本单位,但不作为资源分派的基本单位,仅拥有必不可少的,能保证独立运行的资源。因此切换代价远低于进程。

线程与进程的比较:

  1. 调度的基本单位:线程切换代价比进程少。

  2. 并发性:都能并发

  3. 拥有资源:进程可以拥有资源,而线程不拥有系统资源,而是仅有一点必不可少的,能保证独立运行的资源。比如线程控制块TCB,用于指示被执行指令序列的程序计数器,保留局部变量,少数状态参数和返回地址等一组寄存器和堆栈

  4. 独立性:线程独立性低,共享进程的资源和内存地址空间

  5. 系统开销:线程系统开销小

  6. 支持多处理机系统:


线程控制块TCB:

  • 线程标识符

  • 一组寄存器

  • 线程运行状态

  • 优先级

  • 线程专有存储区

  • 信号屏蔽

  • 堆栈指针


多线程OS中的进程属性:

  1. 进程是一个可拥有资源的基本单位

  2. 多个线程可并发

  3. 进程已不是可执行的实体:线程才是独立运行的基本单位,所谓进程在运行,是指该进程中的某个线程还在运行



线程的实现:

  • 内核支持线程KST(优点):调度以线程为单位进行

    1. 在多处理器系统中跟,内核能够同时调度同一进程中的多个线程并行执行

    2. 如果进程中的一个线程被阻塞了,内核可以调度改进程中的其他线程占有处理器运行,也可以运行其他进程中的线程

    3. 内核支持线程具有很小的数据结构和堆栈,线程切换快,开销小

    4. 内核本身也可以采用多线程技术,提高系统执行速度和效率

    (缺点)

    1. 对于用户的线程切换而言,其模式切换开销较大,在同一个进程中,从一个线程切换到另一个线程是,需要从用户态转到核心态进行,这是因为用户进程的线程在用户太进行,而线程调度和管理在内核实现

  • 用户级线程ULT:调度仍以进程为单位进行(优点)

    1. 线程奇幻不需要转换到内核空间,节省模式切换的开销

    2. 调度算法可以是进程专用,不同进程可以根据自身需要选择调度算法,管理线程

    3. 用户级线程的实现与OS平台无关

    (缺点)

    1. 系统调用阻塞问题,一个线程阻塞,整个进程阻塞

    2. 同一个进程中的多个线程无法利用多处理机进行并行

  • 组合方式:把用户级线程和内核支持线程组合,克服各自不足:用户级线程通过时分多路复用内核支持线程

    • 多对一模型:将多个用户线程银蛇到一个内核控制线程

    • 一对一模型

    • 多对多模型


线程的实现:

  • 内核支持线程的实现

    1. 当进程要创建一个线程是,为新线程分配一个TCB,将有关信息填入TCB,并为之分配必要的资源

    2. 内核支持线程的调度和切换与进程类似,分抢占式和非抢占式。在调度算法上,可采用时间片轮转法,优先权算法

  • 用户级线程的实现:用户级线程具有相同的结构,运行在一个中间系统上

    • 运行时系统:实质上是用于管理和控制线程的函数集合,作为用户线程与内核之间的接口

    • 内核控制线程:又称轻型进程LWP,其概念也类似接口。


























































0 0
原创粉丝点击