要是继续学习就绕不开进程 进程是操作系统里面的核心概念了,在讲到进程的产生调度或者是运行的时候 把它指为运动的程序来解释比较方便
当然这和我之前的说法有些打脸 没办法学习怎么好理解怎么来,那么怎么来解释呢 进程是操作系统对一个正在运行的程序的一种抽象 为什么这么
说呢 用户认为开了一个进程在CPU上进行操作,直至程序结束。当然这样是不可能的 在一个系统中可以同时运行多个进程,而每一个进程好像
独占的使用资源 这里就很好的解释正在运行的程序的一种抽象。
也有定义说 多个程序同时加载到计算机中并发执行,这些同时存在计算机内存中的程序称为进程 进程的概念让每一个用户感觉独享CPU 进程
就是为了在CPU上实现多道编程而出现的概念
从上面的两段来看 之前简单的认为 进程就是一个运动的程序就不能很好的解释了 之前有个学长说 一个概念你刚刚接触时的理解和你认真学习
之后的理解是不一样的 就算你的总结是同一句话 但你想表达的意思是不一样的 仔细看上面的一段话进程是一种抽象 就是说它并不是那样 他只是
看上去那样 。
可能有一个基本的概念了 要解释进程不可能用一篇博客就能清楚的解释 那就按一些点来理解
进程的产生和消亡 产生: 系统初始化
执行进程创立程序
用户请求创立新进程
消亡:进程运行完成而退出 寿终 正常退出
进程因为错误而自行退出 自杀 出错退出 这两个消亡方式都是自愿的
进程因为其他进程而终止 他杀 被其他进程杀死
进程因为异常而被强性终止 处决 严重错误 这两个消亡方式都是非自愿的
上面的有一些很好理解 主要是讨论进程消亡时 的后两种情况 关于进程的他杀 这是比较严重的时间毕竟谁也不希望进程无端的消失 被其他进程杀死
可以分为几种情况 如一个父进程可以发出命令终止一个子进程,用户也可以选择杀死自己的进程 但是用户不能杀死别人的进程 还有一种情况 就是
超级用户(具有系统管理员权限)则可以杀死任何进程 而进程因为异常而强制性终止 在一个进程在进行某种非法操作时 如访问出界或者除0后发生
而这种非法操作将被系统捕捉,操作系统捕捉到这种异常后将终结造成异常的进程
解释一下进程的创建步骤 分配进程控制块
初始化机器寄存器
初始化分页表
将程序代码从磁盘读进内存
将处理器状态设置为“用户态“
跳转到程序起始地址 (设置程序计数器)
××跳转指令是内核态指令 而上一步指令已经将处理器状态改为用户态 但是用户态下不能执行内核态指令 所以后两步是一起执行的
当一个进程产生时操作系统为其创造记录 用于维护进程记录的就是进程控制块 这是核心数据结构 这些主要包括了线性表 链表 也可能是树或图
进程表保持在操作系统所在的内核空间
上面大概解释了几种典情况下的各种进程产生和消亡 那么考虑到进程的层次结构 一个进程在执行过程中可以通过系统调用创建新进程 那么这个之前
的进程称为父进程 而通过系统调用产生的进程称为子进程 而事实上所创建的子进程也具备进程的基本能力 子进程也可以创建子进程 这就是所谓的进程树
而进程的重要地方就是进程控制块PCB(process control block) 这个主要表示进程状态 是操作系统核心中的一种数据结构 PCB 记载进程相关节点
进程状态 可以是 new.ready
程序计数器 存着要运行登指令地
cpu暂存器 如累加器 变址寄存器 堆栈指针以及一般用途的暂存器 状况代码等 主要的用途是中断暂停时存储数据 以便调用时即使恢复现场
cpu排班法 优先级 排班队列等 还有指针和其他参数
存储器管理 如标签和页表等等
会计信息 如CPU与实际时间或使用数量时限账号工作或进程号码
输入输出状态 配置进程使用I/O设备
进程表所包含的进程记录信息
进程基本信息指针(进程ID 创建用户ID 创建时间等)
进程家族树指针 (子进程 父进程 孙子进程 祖父进程)
进程资源信息指针(寄存器 栈指针 当前持有句柄)
信号支持
进程状态信息指针(程序寄存器 状态字 优先级)
时间统计信息(所占CPU时间 子进程所占CPU时间)
其他 所需的信息指针
而考虑清楚了进程控制块到底是什么东西 那就来探讨一下它的作用 在一次中断中 一个进程的状态记录在某一个地方(进程控制块)
这样当排程序器 要回到这个进程时 可以重建进程状态且进行运算 之前也提到进程是操作系统对一个正在运行的程序的抽象 因为事实上进程
都是交替执行的 操作系统实现这种交错执行的机制叫上下文切换 任何时候处理器只能执行一个进程 操作系统决定把控制权从当前进程转移
到某一个新进程时 就会上下文切换 即保存当前进程上下文 恢复新进程上下文
用户代码(中断)内核代码 用户代码(中断) 内核代码 用户代码
A进程 (上下文切换) B进程 (上下文切换) A进程 时间线依次推进
进程调度过程 更换进程的操作:将当前的进程状态给予保护以便将来能重新执行 然后将选中的进程环境布置好 包括设置寄存器 栈指针
状态字等操作 最后跳转选中的进程 也就是恢复其程序计数器
这里为下面的内容铺垫 就是调度异常之优先级倒挂
一个低优先级任务持有一个被高优先级所需要的共享资源
进程的内容当然不止这么多 也就是找一些比较重要 易混淆的知识 只有认清了 上下文切换和进程调度 才能好好的理解锁