进程的创建
在启动进程时(好像会创建一个空转进程),通常会创建若干进程,其中包括前台进程(负责与用户交互)和后台进程(与特定用户没有关系,完成专门的功能,比如电子邮件接收等)。
当然,除了上述创建进程的过程外,一个进程还可以由另外一个进程创建。在交互式系统中,用户可以点击图标创建进程。而在批处理系统中,用户提交批处理作业,OS认为有资源可以运行时,会创建一个进程。
在UNIX系统中,只有一个系统调用可以用来创建新进程:fork。两个进程关系为父子关系,子进程和父进程拥有东西几乎一样但都拥有自己独立的地址空间,进程ID不一样。
可写的内存是不可以共享的,但是,对于一个新创建的进程而言,确实又可能共享其创建者的其它资源,如打开的文件等。在windows中从一开始父进程的地址空间和子进程的地址就是不同的,unix好像不是吧。
进程的终止
分为以下四种情况:
正常退出(自愿)
出错退出(自愿)
严重错误(非自愿)
被其他进程杀死(非自愿 kill)
多数情况下,进程都是自动完成任务后退出的,UNIX返回exit(0)。第二种情况,若是进程执行时遇到非法指令会通知操作系统,想要自行解决,正常终止。第三种情况是进程遇到严重错误,例如在编译时出错。第四种就不解释了。
进程的层次结构
进程只有一个父进程,但可以有多个子进程。,在UNIX中,这将会是一个进程组,,当用户从键盘发出一个信号时,该进程组中的所有成员都可以分别捕捉,忽略该信号或者被该信号杀死。,相反windows系统中没有该概念,所有进程地位相同,可能会有类似的作用是当一个进程拥有令牌时可以控制其它进程,但是该令牌可以送给其它进程,这样就不存在进程层次了。
进程的状态
进程的实现
OS维护着一张进程表,每个进程都占用一个表项(包括程序计数器,堆栈指针,内存分配状况,所打开文件状态,账号,调度信息,以及状态转换时必须要保存的寄存器信息等),进程切换时,就会发生压栈操作,即用户态转向内核态,数据压入内核空间。
审核编辑:刘清
-
计数器
+关注
关注
32文章
2256浏览量
94476 -
Unix系统
+关注
关注
0文章
15浏览量
9642 -
堆栈指针
+关注
关注
0文章
5浏览量
2906
发布评论请先 登录
相关推荐
评论