进程管理

操作系统对进程的管理方案

      操作系统为每一个进程分配一个数据结构,在该结构里面描述进程的资源和状态,为进程分配资源,使进程的资源不会被其他进程占用,实现进程同步。

  1. 操作系统交替执行多个程序,在一定的时间内提高 CPU 的使用率
  2. 操作系统按照一定的策略分配资源,避免死锁
  3. 支持进程间通信和用户创造进程

进程

      进程正在执行的程序,是一组有序指令 + 数据 + 资源的集合,可以分配给处理器并由处理器处理。Linux 中每一个进程由一个 task_struc t数据结构描述(进程控制块PCB)
     操作系统的基础任务就是任务管理。操作系统通过 PCB 跟踪进程的状态,管理进程及其状态,使之可以在多个程序间切换,提高 CPU 的使用率。

进程创建的原因
在这里插入图片描述

进程控制块

      进程控制块是操作系统支持多进程和多处理的工具。是一个存放进程的标识符、状态、优先级、程序计数器、内存指针、上下文数据、I/O 状态信息、审计信息等的数据结构,由操作系统创建和管理。进程被中断后,操作系统把程序计数器和处理器保存到进程控制块中的相应位置,进程状态变成其他的值,如阻塞抬或者就绪态,等再次运行的时候把运行状态变成执行,就像程序没有被中断一样。

进程的状态

在这里插入图片描述
初始态
就绪态
     执行 ./a.out 之后,程序在主存中并且有执行资格,做好了准备,只要抢到执行权就可以运行,没有抢到 cpu 时间碎片之前是就绪态
阻塞/挂起态
     进程在辅存中,没有执行资格,没有执行权,强制让当前的进程睡眠一定时间,此时,该程序不能执行,在等待进程条件满足后就能得到执行资格,变为就绪/挂起态
就绪/挂起态
     进程在辅存中,就绪态的程序被调用执行,变成运行态,系统从挂起/就绪态里面调用一个程序到就绪态。
运行态
     有执行资格有执行权
     抢到 cpu 时间碎片就是运行态
终止态
     进程本身停止或者因为某种原因取消

阻塞–》阻塞/挂起
     如果没有就绪态进程,则至少一个阻塞态进程被换出,为另一个没有阻塞的进程让出主存空间。如果操作系统确定当前正在运行的进程,或就绪态进程为了维护基本的性能要求而需要更多的内存空间,那么,即使有可用的就绪态进程也可能出现这种转换。
阻塞/挂起–》就绪/挂起
     如果进程等待的事情发生,就可以转换到就绪/挂起态
就绪/挂起–》就绪
     如果主存中没有就绪态进程,则操作系统需要调入一个进程继续执行。此外,当处于就绪/挂起态的进程优先级比处于就绪态的任何进程的优先级要高时,也可进行这种转换。有一种情况的产生是由于操作系统设计者规定,调入高优先级的进程比减少交换量更重要。
就绪–》就绪/挂起
     通常,操作系统更倾向于挂起阻塞态进程而不是就绪态进程,因为就绪态进程可以立即执行,而阻塞态进程占用了主存空间但不能执行。但如果释放主存以得到足够空间的惟一方法是挂起一个就绪态进程,那么这种转换也是必须的。并且,如果操作系统确信高优先级的阻塞态进程很快将会就绪,那么它可能选择挂起一个低优先级的就绪态进程,而不是一个高优先级的阻塞态进程。
新建–》就绪/挂起新建–》就绪
     当创建一个新进程时,该进程或者加入到就绪队列,或者加入到就绪/挂起队列。不论哪种情况,操作系统都必须建立一些表以管理进程,并为进程分配地址空间。操作系统可能更倾向于在初期执行这些辅助工作,这使得它可以维护大量的未阻塞进程。通过这个策略,主存中经常会没有足够的空间分配给新进程,因此使用了(新建–》就绪/挂起)转换。另一方面,我们可以证明创建进程的及时性原则,即尽可能迟地创建进程以减少操作系统的开销,并在系统被阻塞态进程所阻碍时操作系统再执行进程创建任务。
阻塞/挂起–》阻塞
     这种转换在设计中比较少见,如果一个进程没有准备好执行,并且不在主存中,调入它又有什么意义?但是考虑到下面的情况:一个进程终止,释放了一些主存空间,阻塞/挂起队列中有一个进程比就绪/挂起队列中的任何进程的优先级都要高,并且操作系统有理由相信阻塞进程的事件很快就会发生,这时把阻塞态进程而不是就绪态进程调入主存是合理的。
运行–》就绪/挂起
     通常当分配给一个运行进程的运行时间段满时,该进程将被转换到就绪态。但是,如果由于位于阻塞/挂起队列的具有较高优先级的进程变得不再被阻塞,操作系统抢占这个进程,也可以直接把这个运行进程转换到就绪/挂起队形中,并释放一些主存空间。
各种状态–》退出
     在典型情况下,一个进程在运行时终止,或者是因为它已经完成,或者是因为出现了一些错误条件。但是,在某些操作系统中,一个进程可以被创建它的进程终止,或当父进程终止时被终止。如果允许这样,则进程在任何状态时都可以转换到退出态。

进程的创建

  1. 给进程分配一个唯一的标识号
  2. 给进程分配空间
  3. 初始化进程控制块
  4. 设置正确的连接
  5. 创建或扩充其他数据结构

进程的创建与终止
     进程的创建:操作系统将进程的标识符关联到进程,分配和创建管理进程所需要的表。这代表系统完成创建但没有完成执行。进程在这个状态时,把自身的信息保存在进程表中,但是进程执行的代码还在磁盘上,没有被分配内存。
     进程的终止:进程的状态转换为退出态,不再执行。进程相关的表和其他信息被操作系统保留起来,为辅助程序提供提取信息的时间

进程的切换

中断

  1. 时钟中断:判断系统执行超过了最大允许时间段(时间片,即进程在被中断前可以执行的最大时间段),如果超过了,进程必须被切换到就绪态,然后调入另一个进程。
  2. I/O 中断:操作系统发生了 I/O 活动,并且 I/O 活动是一个或多个进程正在等待的事件,操作系统就把所有相应的阻塞态进程转换到就绪态(阻塞/挂起态进程转换到就绪/挂起态),操作系统必须决定是继续执行当前处于运行态的进程,还是让具有高优先级的就绪态进程抢占这个进程。
  3. 内存失效:处理器访问的虚拟内存不在主存中时,操作系统必须从辅存中把内存块(页或段)调入主存中。在发出调入内存块的 I/O 请求之后,操作系统可能会执行一个进程切换,以恢复另一个进程的执行,发生内存失效的进程被置为阻塞态,当想要的块调入内存中时,该进程被置为就绪态。
    陷阱
         操作系统查看进程的错误或异常条件是否致命,若致命,转为退出态;若不致命,根据错误的种类和系统设定进行状态转换。
    系统调用激活
         用户进程正在运行并且执行请求 I/O 操作的指令,打开文件,这个调用导致处理器转换到作为操作系统代码一部分的一个例程上执行,用户进程变为阻塞态。

进程切换

  1. 保存处理器上下文,包括程序计数器和其他寄存器。
  2. 更新当前处于运行态的进程的进程控制块,包括把进程的状态改变为另一状态。还必须更新其他相关域,包括离开运行态的原因和审计信息。
  3. 把进程的进程控制块移到相应的队列(就绪在事件i处阻塞、就绪/挂起)。
  4. 选择另一个进程执行。
  5. 更新所选择进程的进程控制块,包括把进程的状态变为运行态。
  6. 更新内存管理的数据结构,这取决于如何管理地址转换。
  7. 恢复处理器在被选择的进程最近一次切换出运行态时的上下文,这可以通过载入程序计数器和其他寄存器以前的值来实现。

进程的加载

     进程加载:以简单“分页”加载。为了消除由每次分配的空间不固定所产生的外部碎片,将内存分为可以被整除的很多页,每页 4k,每一次分配一页给进程。用页表记录位置等信息。
在这里插入图片描述
简单分页:
     将内存上的区间划分为很小的区块,称为帧。每个页帧的大小位 4k
页表:
     在每一个进程中,操作系统为每个进程维护了一个页表,页表记录了进程和页的对应关系。
程序的存储:
     程序在磁盘存储时,是把磁盘划分为 4k,程序每次在磁盘里面存储 4k,存储时,每一页可以分开存放,也可以连续存放。不连续存放时,通过页表查找下一块内存的地址。
进程加载:
     1、进程的加载以页为单位进行加载,每个进程都会维护一个页表,因此,操作系统有多少进程,就有多少页表,每个进程有 4G 的虚拟空间,但是进程本身物理内存并没有 4G 的大小,页表的大小是根据程序决定。
     2、先分布一个页表,加载一个页,就填出一个页的帧。执行程序时,通过页表找到程序的帧,根据帧号做实际偏移。

     程序的逻辑地址 = 偏移量
     程序的物理地址 = 页帧 * 4K + 偏移量

进程管理命令:

ps 仅仅显示与当前终端相关的进程 -e -f -L -a…只显示 ps 执行的那一时刻的信息
top windows任务管理器 q 退出
执行进程:前台执行:路径/可执行文件名
                  后台执行:路径/可执行文件名 &
终止进程:kill pid
挂起进程:kill -stop pid
强制结束进程:kill -9 pid
显示后台和挂起的进程任务:jobs
在后台运行进程:&
将挂起的任务放到后台执行:bg 任务号
将挂起或后台放到前台执行:fg 任务号
以树状图显示信息:pstree

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值