进程/线程模型

来源:互联网 发布:淘宝露天拍卖代购 编辑:程序博客网 时间:2024/05/16 10:41

1)进程模型

a)进程的基本概念

多道程序设计:允许多个程序同时进入内存并运行,其目的是为了提高CPU利用率

并发环境:一段时间间隔内,单处理器上有两个或两个以上的程序同时处于开始执行但尚未结束的状态,并且次序不是事先确定的

并发程序:在并发环境下执行的程序

进程:(资源的拥有者,CPU的调度单位)是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位

程序的一次执行过程,是正在运行程序的抽象,将一个CPU变换成多个虚拟CPU

系统资源以进程为单位分配,如文件、内存等,每个进程具有独立的地址空间

操作系统将CPU调度给需要的进程

进程是异步的:每个进程都以其相对对立的、不可预知的速度向前推进

进程控制块PCB(Process Control Block):操作系统用于管理控制进程的一个专门的数据结构

记录进程的各种属性,描述进程动态变化过程

PCB是系统感知进程存在的唯一标志,与进程一一对应

PCB的多少表示了操作系统的并发度

进程表:所有进程的PCB集合

PCB含有:进程描述信息(进程标识符(process ID),唯一通常是一个整数;进程名,通常基于可执行文件名,不唯一;用户标识符(user ID);进程组关系)

进程控制信息:当前状态;优先级(priority);代码执行入口地址;程序的磁盘地址;运行统计信息(执行时间、页面调度);进程间同步和通信;进程的队列指针;进程的消息队列指针

所拥有的资源和使用情况:虚拟地址空间的状况;打开文件列表

CPU现场信息(进程不运行时):寄存器值(通用寄存器、程序计数器、PSW、栈指针);指向该进程页表的指针

b)进程状态及状态转化

进程的三种基本状态:运行态,就绪态,等待态(因等待某一事件而暂时不能运行)

就绪-->运行:调度程序选择一个新的进程运行

运行-->就绪:运行进程用完了时间片;一个高优先级进程进入就绪状态,抢占正在运行的进程

运行-->等待:当一个进程等待某个事件发生时(比如请求OS服务,对资源的访问尚不能进行……)

等待-->就绪:所等待的事件发生了

进程的其他状态:

创建态(new):已完成创建一进程所必要的工作—PID,PCB;但尚未同意执行该进程--因为资源有限

终止态(Terminated):终止执行后,进程进入该状态;可完成一些数据统计工作;资源回收

挂起态(suspend):用于调节负载;进程不占用内存空间,其进程映像交换到磁盘上

进程队列:操作系统为每一类进程建立一个或多个队列;队列元素为PCB;伴随进程状态的改变,其PCB从一个队列进入另一个队列

c)进程控制

进程控制操作完成进程各状态之间的转换,由具有特定功能的原语完成

原语:完成某种特定功能的一段程序,具有不可分割性或不可中断性

进程的创建:给新进程分配一个唯一标识及进程控制块;为进程分配地址空间;初始化进程控制块;设置相应的队列指针;(UNIX:fork/exec;WINDOWS:CreateProcess)

进程的撤消:结束进程,收回进程所占用的资源;撤消该进程的PCB(UNIX:exit;WINDOWS:TerminateProcess)

进程的阻塞:由进程自己执行阻塞原语,使自己由运行态变为阻塞态(NNIX:wait;WINDOWS:WaitForSingleObject)

UNIX的几个进程控制操作:(系统调用)

fork():通过复制调用进程来建立新的进程,是最基本的进程建立过程

exec():包括一系列系统调用,它们都是通过用一段新的代码程序覆盖原来的地址空间,实现进程执行代码的转换

wait():提供初级进程同步操作,能使一个进程等待另一个进程的结束

exit():用来终止一个进程的运行

UNIX的fork()实现(花费时间较长):为子进程分配一个空闲的进程描述符 ,proc结构;分配给子进程唯一标识pid;以一次一页的方式复制父进程的地址空间;从父进程处继承共享资源如打开的文件和当前和工作目录;将子进程的状态设为就绪,插入到就绪队列;对子进程返回标识符0;向父进程返回子进程的pid

Linux采用了写时复制技术COW加快进程创建进程Copy-On-Write

d)关于进程的讨论

进程的分类:系统进程(优先级较高),用户进程;前台进程,后台进程;CPU密集型进程,I/O密集型进程

进程层次结构:UNIX进程家族树:init为根;Windows:地位相同

进程与程序的区别:进程更能准确地刻画并发,而程序不能;程序是静态的,而进程是动态的;进程是有生命周期的,而程序是相对长久的;一个程序可对应多个进程;进程具有创建其他进程的功能

进程地址空间:操作系统给每一个进程分配了一个地址空间——相对地址,逻辑地址

进程映像:(程序+数据+栈(用户栈、内核栈)+PCB)对进程执行活动全过程的静态描述

{跟用户相关:进程地址空间(包括代码段、数据段、堆和栈、共享库……)

寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值

内核相关:静态部分(PCB及各种资源数据结构)动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)}

上下文(CONTEXT)切换:将CPU硬件状态从一个进程换到另一个进程的过程

进程运行时,其硬件状态保存在CPU上的寄存器中;

进程不运行时,这些寄存器的值保存在进程控制块PCB中;

当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中

2)线程模型

a)构造服务器的三种方法:多线程模型,有并发、阻塞系统调用;单线程进程模型,无并发、阻塞系统调用;

有限状态机模型(进程自己模拟并发工作),有并发、非阻塞系统调用、中断

b)线程的的基本概念:线程是进程中的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程

线程的属性:有标识符ID;有状态及状态转换:需要提供一些操作;不运行时需要保存上下文,有上下文环境:程序计数器等寄存器;有自己的栈和栈指针;共享所在进程的地址空间和其他资源;可以创建、撤消另一个线程,程序的开始是以一个单线程方式运行的

线程之间相互通信无须调用内核(同一进程内的线程共享内存和文件)

可再入程序(可重入):

可被多个进程同时调用的程序,具有下列性质:它是纯代码的,即在执行过程中自身不能改变;调用它的进程应该提供数据区

c)线程机制的实现:

用户级线程:在用户空间建立线程库:提供一组管理线程的过程;运行时系统:完成线程的管理(操作、线程表)内核管理还是进程,不知道线程的存在;线程切换不需要内核态的特权;例子:UNIX

优点:线程切换快;调度算法是应用程序特定的;用户级线程可运行在任何操作系统上(只需要实现线程库)

缺点:内核只将处理器分配给进程,同一进程中的两个线程不能同时运用于两个处理器上;大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞

核心级线程:内核管理所有线程,并向应用程序提供API接口;内核维护进程和线程的上下文;线程的切换需要内核支持;

以线程为基础进行调度;例子:Windows

混合模型:线程创建在用户空间;线程的调度等在核心态完成;例子:Solaris

多个用户线程多路复用,多个内核级线程

0 0
原创粉丝点击