0 00:00:00,000 --> 00:00:06,520 1 00:00:06,600 --> 00:00:10,440 下面我们来介绍三状态进程模型 2 00:00:10,480 --> 00:00:13,280 在前面我们介绍的进程状态当中 3 00:00:13,360 --> 00:00:14,360 我们已经说到了 4 00:00:14,400 --> 00:00:16,360 进程主要的几种状态 5 00:00:16,400 --> 00:00:17,960 实际上这时候呢主要的 6 00:00:18,000 --> 00:00:22,120 这个就绪运行阻塞或者叫等待 7 00:00:22,160 --> 00:00:24,760 这三种状态搁在里头呢就构成了 8 00:00:24,800 --> 00:00:27,080 我们这里的三状态进程模型 9 00:00:27,120 --> 00:00:29,000 那如果大家看这个图的话 10 00:00:29,040 --> 00:00:30,440 那这个图里呢不止三种 11 00:00:30,480 --> 00:00:32,360 还多了一个创建和退出 12 00:00:32,400 --> 00:00:33,960 但是从整个进程 13 00:00:34,000 --> 00:00:36,680 生命周期来讲核心的状态 14 00:00:36,720 --> 00:00:38,720 是这个就绪运行和等待 15 00:00:38,760 --> 00:00:40,640 那这三种状态呢是 16 00:00:40,680 --> 00:00:43,560 我们这个三状态进程模型里的核心 17 00:00:43,600 --> 00:00:45,600 这每种状态的含义是什么呢 18 00:00:45,640 --> 00:00:47,960 运行是指进程 19 00:00:48,000 --> 00:00:50,440 正在处理机上执行 20 00:00:50,480 --> 00:00:52,480 那这是第一种 21 00:00:52,520 --> 00:00:55,520 然后第二种状态呢是就绪 22 00:00:55,560 --> 00:00:57,000 就绪是指 23 00:00:57,040 --> 00:00:59,520 进程获取了除处理器以外资源 24 00:00:59,560 --> 00:01:04,840 等待得到处理机就可以开始运行了 25 00:01:04,880 --> 00:01:06,360 而等待呢 26 00:01:06,400 --> 00:01:09,400 是指进程在等待 27 00:01:09,440 --> 00:01:13,360 某一个事件的出现而暂停的状态 28 00:01:13,400 --> 00:01:15,280 那这三种状态之外呢 29 00:01:15,320 --> 00:01:17,200 再有两种辅助的状态 30 00:01:17,240 --> 00:01:19,000 一个是创建这个状态呢 31 00:01:19,040 --> 00:01:20,360 是一个过渡的状态 32 00:01:20,400 --> 00:01:22,200 进程正在被创建 33 00:01:22,240 --> 00:01:24,040 还没有完成 34 00:01:24,080 --> 00:01:25,400 这个创建的过程 35 00:01:25,440 --> 00:01:26,960 也就是它的分配资源 36 00:01:27,000 --> 00:01:29,040 分配资源和相应的数据结构 37 00:01:29,080 --> 00:01:30,200 完成初始化之后 38 00:01:30,240 --> 00:01:31,720 那它就放在就绪队列里 39 00:01:31,760 --> 00:01:33,960 这个创建的过程就结束了 40 00:01:34,000 --> 00:01:36,200 每个进程呢在整个生命周期当中 41 00:01:36,240 --> 00:01:39,560 它只会进来一次创建 42 00:01:39,600 --> 00:01:41,400 然后还有一个退出 43 00:01:41,440 --> 00:01:44,320 退出呢是指进程正从系统当中消失 44 00:01:44,360 --> 00:01:47,920 也就是说系统正在回收它的资源 45 00:01:47,960 --> 00:01:50,320 那在这个状态里头呢 46 00:01:50,360 --> 00:01:54,440 它会是进程结束的最后的这个阶段 47 00:01:54,480 --> 00:01:55,440 这五个状态呢是 48 00:01:55,480 --> 00:01:58,560 我们三状态进程模型里的状态 49 00:01:58,600 --> 00:02:00,440 在这个状态之外呢 50 00:02:00,480 --> 00:02:04,320 之间呢我们有相应的状态的变迁 51 00:02:04,360 --> 00:02:08,200 这里的变迁我们依次来介绍它的含义 52 00:02:08,240 --> 00:02:12,560 启动实际上是指我进入到创建状态的 53 00:02:12,600 --> 00:02:14,120 这是一个触发条件 54 00:02:14,160 --> 00:02:16,080 我一个新的进程被创建出来 55 00:02:16,120 --> 00:02:18,920 创建它的目的是为了执行一个程序 56 00:02:18,960 --> 00:02:21,760 好程序进程创建的过程 57 00:02:21,800 --> 00:02:22,800 创建完成了 58 00:02:22,840 --> 00:02:25,640 那这时候就导致一个状态的变迁 59 00:02:25,680 --> 00:02:29,520 那这就是由创建到就绪状态 60 00:02:29,560 --> 00:02:35,240 这个变迁呢是指你的创建工作已经结束 61 00:02:35,280 --> 00:02:36,760 就等待CPU的这个资源 62 00:02:36,800 --> 00:02:37,640 有了CPU这个资源之后 63 00:02:37,680 --> 00:02:41,720 它就可以开始运行了 64 00:02:41,760 --> 00:02:43,000 而被调度这个变迁呢 65 00:02:43,040 --> 00:02:45,160 是指我们在就绪队列里 66 00:02:45,200 --> 00:02:49,000 选择出某一个适合运行的进程 67 00:02:49,040 --> 00:02:52,080 然后分配给处理机然后 68 00:02:52,120 --> 00:02:54,040 它就可以开始运行了 69 00:02:54,080 --> 00:02:58,240 这是呢由就绪到运行的状态变迁 70 00:02:58,280 --> 00:03:02,280 再有一个是运行到结束 71 00:03:02,320 --> 00:03:03,920 这是指这个进程 72 00:03:03,960 --> 00:03:06,760 已经完成或者说出错 73 00:03:06,800 --> 00:03:09,120 那这时候呢由操作系统开始去 74 00:03:09,160 --> 00:03:15,160 回收它的资源的触发操作 75 00:03:15,200 --> 00:03:17,280 而从运行到就绪呢就是我们这里 76 00:03:17,320 --> 00:03:19,560 这里标的是时间片用完 77 00:03:19,600 --> 00:03:21,280 如果是被抢先的话 78 00:03:21,320 --> 00:03:23,560 也是这两者之间的一个变迁 79 00:03:23,600 --> 00:03:25,200 在这个变迁里头呢 80 00:03:25,240 --> 00:03:29,320 那进程的状态是由运行回到了就绪 81 00:03:29,360 --> 00:03:33,080 82 00:03:33,120 --> 00:03:34,400 运行到等待呢 83 00:03:34,440 --> 00:03:36,800 是指正在运行的进程 84 00:03:36,840 --> 00:03:39,960 要等待某一个资源 85 00:03:40,000 --> 00:03:41,920 而这个资源呢现在还没有 86 00:03:41,960 --> 00:03:43,440 那这时候由此而进入等待 87 00:03:43,480 --> 00:03:47,040 它无法正常运行 88 00:03:47,080 --> 00:03:50,200 最后一个等待到就绪 89 00:03:50,240 --> 00:03:53,240 进程要等待的事件出现了 90 00:03:53,280 --> 00:03:56,400 到达了那这时候呢他就有阻塞 91 00:03:56,440 --> 00:03:59,480 由等待变成了就绪状态 92 00:03:59,520 --> 00:04:00,920 那我们在说这些 93 00:04:00,960 --> 00:04:03,600 状态的变迁的时候呢 94 00:04:03,640 --> 00:04:05,200 如果说我们在操作系统 95 00:04:05,240 --> 00:04:06,720 你看它实际代码 96 00:04:06,760 --> 00:04:08,200 你主要需要看的就是 97 00:04:08,240 --> 00:04:10,840 这些状态的初始 98 00:04:10,880 --> 00:04:13,040 它是在什么时间出现的 99 00:04:13,080 --> 00:04:14,640 那你要找的关键代码呢就是 100 00:04:14,680 --> 00:04:16,840 这些状态的标识的出现 101 00:04:16,880 --> 00:04:19,400 比如说我们任何一个进程它开什么 102 00:04:19,440 --> 00:04:21,520 开始是指我给它分配一个 103 00:04:21,560 --> 00:04:23,200 唯一的进程标识 104 00:04:23,240 --> 00:04:24,520 那这时候你就找到它 105 00:04:24,560 --> 00:04:26,200 创建所在的位置了 106 00:04:26,240 --> 00:04:27,880 而一个进程结束呢 107 00:04:27,920 --> 00:04:30,200 是指它的进程ID PCB被回收 108 00:04:30,240 --> 00:04:32,600 那这时你找到它的结束状态 109 00:04:32,640 --> 00:04:34,480 而在中间呢 110 00:04:34,520 --> 00:04:36,640 我们在进程控制块里头 111 00:04:36,680 --> 00:04:39,000 都有一个成员叫做它的状态 112 00:04:39,040 --> 00:04:41,120 那么这时候你去看那个状态的赋值 113 00:04:41,160 --> 00:04:44,160 就能看到当前进程所在的状态 114 00:04:44,200 --> 00:04:46,800 而这些对应着的这些变迁 115 00:04:46,840 --> 00:04:48,280 你都应该能够在 116 00:04:48,320 --> 00:04:50,520 进程状态的变迁过程当中 117 00:04:50,560 --> 00:04:53,000 找到相应的关键代码来知道 118 00:04:53,040 --> 00:04:56,400 我这个变迁是在什么地方进行的 119 00:04:56,440 --> 00:04:57,920 好有了这些呢 120 00:04:57,960 --> 00:05:00,720 我们就讨论清楚了三状态进程模型 121 00:05:00,760 --> 00:05:01,560 122 00:05:01,600 --> 00:05:01,640