我是靠谱客的博主 傻傻棉花糖,最近开发中收集的这篇文章主要介绍《现代操作系统》学习总结-进程模型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

进程模型

在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器、和变量的当前值。从概念上讲,每个进程都拥有自己的虚拟cpu,不过实际上cpu只是轮流处理这些进程而已,只不过由于线程之间切换速度比较快,不容易发现,这种快速的切换进程执行,我们将其称为多道程序设计。

如上图,这四道程序被抽象为各自拥有自己的控制流程(即每个程序有自己的逻辑程序计数器),并且每个程序都独立的运行,不过实际上只有一个物理程序计数器,所以在每个程序运行时,它的逻辑程序计数器被装入实际的程序计数器中。

进程和程序的区别:进程是程序的一次执行

二.进程的创建

4种主要事件会导致进程的创建:

1)系统初始化:启动操作系统时,通常会创建若干进程,有些是前台进程,有些是后台进程(守护进程)

2)正在运行的程序执行了创建进程的系统调用

3)用户请求创建一个进程

4)一个批处理作业的初始化

三.进程的终止

进制终止的几种情况如下:

1)正常退出(程序执行完毕,自愿退出)

2)出错退出(自愿)

3)严重错误(非自愿)

4)被其他进程杀死(非自愿)

多数进程是由于完成了他们的工作而终止,比如当编译器完成了所给定程序的编译后,编译器执行一个系统调用,通知操作系统它的工作已经完成。

四.进程的层次结构

某些系统中,当进程创建了另一个进程后,父进程和子进程就以某种形式继续保持关联。子进程自身可以创建更多的进程,组成一个进程的层次结构,不过进程只能有一个父进程(但是可以有多个子进程,其实就是一个树形结构)。

在UNIX中,进程和它的所有子进程以及后裔共同组成一个进程组(一棵树)。当用户从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员,每个进程都可以捕获该信号,也可以忽略该信号。

当UNIX系统启动时,一个称为init的特殊进程出现在启动映像中,当它开始运行时,读入一个说明终端数量的文件,接着为每一个终端创建一个新进程,这些进程等待用户登录,如果有一个用户登录成功,该登录进程就执行一个shell准备接受命令,所接受的这些命令会启动更多的进程,以此类推,这样,在整个系统中,所有进程都属于以init为根的一棵树。

对于Windows操作系统来说,没有进程层次的概念,所有进程都是地位相同的,对于父进程来说,其持有一个句柄(令牌),可以用来控制子进程,但是它可以将该令牌传送给其他进程,所以还是不存在层次关系。

五.进程的状态

进程可以分为三个状态:

1)运行态(处于该状态的进程会占用CPU)

2)就绪态(可以运行,但因为没有获得CPU处理而暂时停止)

3)阻塞态(等待某个事件的发生,否则即使CPU空闲也不能运行)

如上图所示,进程三种状态之间有四种可能的转换关系,操作系统发现进程在等待某个事件发生,为避免浪费cpu,将该进程阻塞,当阻塞的进程等待的事件发生,该进程就会进入就绪状态,当CPU空闲或者之前执行的线程自愿或非自愿放弃cpu处理权利,该进程进入运行状态。

操作系统有一个进程调度程序来执行上述操作,如下图所示

六.进程的实现

为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表。每个进程占用了一个进程表项,该表项包含了进程状态的重要信息,包括程序计数器,堆栈指针,内存分配情况,所打开文件的状态,如下图所示:

现在了解的进程表及进程表项的概念,我们需要进一步通过中断向量来解释为什么我们的进程看起来似乎是并行执行。与每一I/O类关联的是一个称为中断向量的位置(靠近内存底部的区域),他包含中断服务程序的入口地址。假设当一个中断发送时,用户进程1正在运行,则中断硬件会将进程的程序计数器、程序状态字、有时还有一个或多个寄存器压入堆栈,计算机随机跳转到中断向量所指示的地址,这些是硬件完成的工作

 

最后

以上就是傻傻棉花糖为你收集整理的《现代操作系统》学习总结-进程模型的全部内容,希望文章能够帮你解决《现代操作系统》学习总结-进程模型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部