赞
踩
进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。
在三态模型中,进程状态分为 运行态,就绪态,阻塞态。
在五态模型中,进程状态分为 新建态、终止态,运行态,就绪态,阻塞态。
在七态模型中,进程状态分为 挂起就绪态、挂起等待态、新建态、终止态,运行态,就绪态,阻塞态。
在普遍的操作系统中,我们所遇到的进程状态有:运行、新建、就绪、挂起、阻塞、停止、挂机、死亡…等等,但是我们并不懂它们(学了等于没学),因为这是操作系统层面的说法,它的理论放到哪个操作系统中都对。所以我们要学习一个具体的操作系统来理解进程状态,而这里我们使用的当然就是Linux!
进程的状态有多种,本质都是为了满足不同的运行场景!
常见的外设有键盘、显示器、网卡、磁盘…等,操作系统也要对这些外设进行管理。那操作系统怎么管理呢?
答案是:先描述,再管理。所以,在操作系统内都包含了每一个硬件的 struct 结构体,这里比如 struct div_keybord… 等,这些结构体都包含了该硬件的所有属性,这些属性可以找到驱动上该硬件的所有匹配的方法,然后操作系统可以对硬件进行各种操作。
根据冯诺依曼体系结构,所有的数据结构和内部属性数据都在内存当中,因为操作系统开机就被加载到了内存中。
假设磁盘中有一个 bin.exe 文件要运行,它先被加载到内存里,操作系统要对该进程进行管理,要管理就要先描述,这里PCB假设是 struct task_struct {};这个进程想要在 CPU 上运行起来,就必须加入到 运行队列(runqueue) 中,这个运行队列是 CPU 为管理进程而产生的,是内核给 CPU 准备的。为什么进程运行要进行排队?因为 CPU 的资源是有限的。
这里假设只有单核的 CPU (一个CPU),不考虑多核的情况,一个 CPU 只有一个运行队列,进程想要运行就必须加入到运行队列中,这里的运行队列假设是 struct runqueue{},这个运行队列包括了 struct task_struct head* 和 其他属性。
让进程入队列,本质是:将该进程的 task_struct 结构体对象放入到运行队列中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。