进程

一.什么是进程

①有以下几个定义
1.正在执行的程序
2.正在计算机执行的程序的实例
3.能分配给处理器并有处理器执行的实体
4.具有以下特征的活动单元:一组指令序列的执行,一个当前状态和相关系统资源集。(重点理解)
比如我们打开Windows的任务管理器,可以看到有好多进程正在执行。


②进程控制块
进程的2个基本元素是程序代码和与程序代码相关的数据集
有个叫进程控制块的东西,存放的有关进程的一些信息
这些信息包括
1.标识符:跟这个进程相关的唯一标识符,用来区别其他进程。
2.状态:下面会说
3.优先级:相对与其他进程的优先级。
4.程序计数器:程序中即将被执行的下一条指令的地址。
5.内存指针:包括程序代码和进程相关的数据的指针,还和其他进程共享内存的块的指针。
6.上下文数据:进程执行时,处理器的寄存器中的数据。
7.记账信息:包括处理器时间总和,使用时钟数总和,时间限制,记账号等
进程控制块由操作系统创建和管理。
比较有意义一点的是,进程控制块中包含了进程充分的信息。如果中断一个进程的执行,后恢复执行进程时,就好像进程从来没有被中断过。当进程被中断时,操作系统会把CPU中的程序计数器和一些寄存器(上下文信息)保存到进程控制块中的相应位置,进程的状态也改变为其他的,例如阻塞态和就绪态(后面会说),现在操作系统就可以把其他进程设置为运行态,把其他进程控制块中的一些信息加载到CPU的寄存器中,这样其他进程就可以执行了。


二.进程的创建

当一个新的进程加到那些正在被管理的的进程集合中去时,操作系统需要建立用于管理该进程的数据结构(下面会说),并在内存中为他分配地址空间,这些行为构成了一个新进程的创建。


三.进程的状态

①两状态进程模型(简单的模型)
顾名思义就是两种状态的进程:一种是运行态,一种是未运行态
当操作系统创建一个进程时,它将以未运行态加入到操作系统中,操作系统知道这个进程时存在的,并且等待机会执行它,当正在运行的进程被中断时,操作系统将选择一个新的进程运行,前一个进程就被转换成未运行态,另一个进程将会转换成运行态。
从这个简单的模型可以意识到操作系统的一些设计元素。必须要用某种方式表示每个进程,使操作系统能够跟踪他,也就是说,必须有一些与进程相关的信息,包括进程在内存中的位置和状态,这些信息都存在进程控制块中。处于未运行状态的进程必须保存某种类型的队列(先进先出first-in-first-out)中,并且等待他们执行。
对于一个单处理器的计算机,只有一个进程处于运行态
2.五状态模型
1.两状态模型的不足:
#存在一些处于未运行状态就已经准备就绪执行的进程(就绪态)。一个等待I/O结束的进程,I/O结束后的状态。
#存在另外的一些处于阻塞状态的等待I/O操作结束的进程(阻塞态)比如一个进程等待I/O结束时的状态。
因此使用单个队列的分派器不能只考虑选择队列中最老的进程,相反它应该扫描这个队列,查找那些未被阻塞且在队列中时间最长的进程(就绪态)。
2.解决方法
一种比较自然的解决方法是将非运行态分为两种状态:就绪态和阻塞态,此外还应该增加两个状态新建态和退出态
3.五状态模型
#运行态:对于一个单处理器的计算机,只有一个进程处于运行态
#就绪态:进程做好了准备,只要一有机会就执行。
#阻塞态:进程在某些事件发生前不能执行。如I/O操作完;
#新建态:刚刚创建的进程,操作系统还没把他加入到可执行进程组中。通常进程控制块已经创建但是还没把他加载到内存中。
#退出态:操作系统从可执行进程组中释放进程。
由次可以得出有以下可能的进程状态转换事件类型
*空——新建——1
*新建——就绪—-2
*就绪——运行—-3
*运行——就绪—-4
*运行——阻塞—-5
*运行——退出—-6
*阻塞——就绪—-7
*就绪——退出—-8
*阻塞——退出—-9
3被挂起的线程
由于I/O的活动比计算机慢很多,如果内存中所有进程都在等待I/O,那么这中情况时处理器仍然处于空闲状态。
有两种解决方法,一种是扩大内存
另一种解决方法是交换,把内存中某个进程的一部分或全部移到磁盘中,当内存中没有就绪状态的进程时,操作系统就把被阻塞的进程换到磁盘中的“挂起队列”,这是暂时保存从内存中被“驱逐”出的进程队列,或者说是被挂起的队列
为了描述上述的交换,可以新增加一个状态——挂起态,当内存中所有的进程都处于阻塞状态时,操作系统可以将其中的一个进程置于挂起态,并将它转移到磁盘中,内存中释放的空间可以给被到调入的另外的一个进程使用。
但是这时候又出现一个问题,所有已经被挂起的进程都处于阻塞态,显然这时候把被阻塞的进程加载到内存没有任何意义,因为他仍然没有准备好执行。
因此我们需要重新考虑设计方案,可以把挂起态分为两种:阻塞/挂起态就绪/挂起态
这时进程状态转换事件类型可以分为
1. 阻塞——阻塞/挂起
2.阻塞/挂起——就绪/挂起
3. 就绪/挂起——就绪
4.就绪——就绪/挂起:如果释放内存的唯一方法是挂起一个进程,操作系统可能会选择挂起一个低优先级的就绪状态的进程,而不是一个高优先级的阻塞状态的进程。
5. 新建——就绪
6.阻塞/挂起——阻塞:阻塞/挂起队列中的一个进程比就绪/挂起队列中任何进程的优先级都要高,并且操作系统相信阻事件很快就会发生,那么,把一个阻塞/挂起状态的进程而不是就绪挂起的状态的进程加入到内存中是合理的。
7. 运行——就绪
8. 运行——阻塞
9.运行——就绪/挂起:(解释下)通常分配个一个进程的时间期满时,它将转换成就绪态,但是如果一个处于就绪/挂起态队列的进程具有较高的优先级,那么操作系统将会抢占这个进程,那么这个运行进程可能会被转换成就绪/挂起态,并释放一些内存。
10.各种状态——退出

四.进程的描述

1.操作系统的控制结构
操作系统为了管理进程和资源,必须掌握关于每个进程的和资源当前状态的信息。普遍使用的方法是:操作系统构造并维护他所管理的每个实体的信息表。操作系统中维护着4种不同类型的表:内存表,I/O表,文件表,进程表
2.进程的控制结构
进程必须包括一个或一组被执行的程序,与这些程序相关联的是局部变量(栈中),全局变量(全局区),和任何定义常量的数据单元(文字常量区),因此一个进程必须包括足够的内存空间,来存放成程序和数据;此外程序的执行通常涉及到用于跟踪过程调用和过程间参数的传递的栈,最后与每个进程相关联的还有操作系统的用于控制进程的许多属性,这些属性的集合为“进程控制块”,程序,数据,栈和进程控制块的集合称为进程的映像
3.进程的位置
对于最简单的情况,进程映像保存在邻近的或连续的存储块中。该存储块位于外存中(通常是磁盘),因此操作系统要管理进程,其进程映像至少有一部分必须位于内存中,为执行该进程,整个进程映像必须在载入到内存中或者至少是虚拟内存中,操作系统要知道每个进程在磁盘中的地址,并且内存中每个进程,要知道它在内存中的地址。
有一个主进程表,每个进程在表中都有一个表项,每一项至少包含一个指向进程映像的指针。

五.进程的控制

1.执行模式
大多数处理器至少支持两种执行模式,一种是特权态,也叫系统态,内核态,控制态;另一种是非特权态,也叫用户态。使用这两种模式可以保护操作系统和重要的操作系统表(如进程控制块),不受到用户程序的干涉
那么产生了两个问题:处理器如何知道它正在什么模式下执行以及如何改变这一模式。
程序状态字中有有一位表示执行模式,这一位应某些事件的要求而改变。在典型的情况下,当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式被设置为内核态,当从系统服务返回到用户进程时,执行模式被设置为用户态。
2.进程的创建
创建一个进程的具体步骤
1.给新进程分配一个唯一的进程标志符。
2.给进程分配空间
3.初始化进程控制块
4.设置正确的连接
5.创建或 扩充其他数据结构
3.进程的切换
在某一个时刻一个正在运行的进程被中断,操作系统指定另一个进程为运行态,并将控制权交给这个进程。
何时切换进程?
1.中断
2.陷阱
3.系统调用
完整的进程切换的步骤如下
1.从用户态转换成内核态
2.保存处理器上下文环境,包括程序计数器和其他寄存器
3.更新当前处于运行状态的进程控制块
3.将进程控制块移到相应的队列
4.选择另一个进程执行
5.更新所选择的进程的进程控制块,包括将进程控制块中的进程变为运行态
6.更新内存管理数据结构
7.将运行态的上下文环境载入到处理器中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值