探讨一下进程的创建与终止

描述

进程的创建

在启动进程时(好像会创建一个空转进程),通常会创建若干进程,其中包括前台进程(负责与用户交互)和后台进程(与特定用户没有关系,完成专门的功能,比如电子邮件接收等)。

当然,除了上述创建进程的过程外,一个进程还可以由另外一个进程创建。在交互式系统中,用户可以点击图标创建进程。而在批处理系统中,用户提交批处理作业,OS认为有资源可以运行时,会创建一个进程。

在UNIX系统中,只有一个系统调用可以用来创建新进程:fork。两个进程关系为父子关系,子进程和父进程拥有东西几乎一样但都拥有自己独立的地址空间,进程ID不一样。

可写的内存是不可以共享的,但是,对于一个新创建的进程而言,确实又可能共享其创建者的其它资源,如打开的文件等。在windows中从一开始父进程的地址空间和子进程的地址就是不同的,unix好像不是吧。

进程的终止

分为以下四种情况:

正常退出(自愿)

出错退出(自愿)

严重错误(非自愿)

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

多数情况下,进程都是自动完成任务后退出的,UNIX返回exit(0)。第二种情况,若是进程执行时遇到非法指令会通知操作系统,想要自行解决,正常终止。第三种情况是进程遇到严重错误,例如在编译时出错。第四种就不解释了。

进程的层次结构

进程只有一个父进程,但可以有多个子进程。,在UNIX中,这将会是一个进程组,,当用户从键盘发出一个信号时,该进程组中的所有成员都可以分别捕捉,忽略该信号或者被该信号杀死。,相反windows系统中没有该概念,所有进程地位相同,可能会有类似的作用是当一个进程拥有令牌时可以控制其它进程,但是该令牌可以送给其它进程,这样就不存在进程层次了。

进程的状态
        

堆栈指针

进程的实现

OS维护着一张进程表,每个进程都占用一个表项(包括程序计数器,堆栈指针,内存分配状况,所打开文件状态,账号,调度信息,以及状态转换时必须要保存的寄存器信息等),进程切换时,就会发生压栈操作,即用户态转向内核态,数据压入内核空间。


审核编辑:刘清
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分