四种主要的事件导致进程的创建:
在所有的情形中,新进程都是由于一个以存在的进程执行了一个用与创建进程的系统调用而创建的。
Unix 进程的创建:
fork(系统调用)--> 创建一个与系统调用相同的副本 --> 子进程执行execve或一个类似的系统调用 --> 修改其存储映像并运行一个新的程序。 在调用fork后,父进程和子进程拥有相同的存储映像,同样的环境字符串,同样的打开文件。例如,当用户在shell中输入一个sort命令时,shell就创建一个子进程执行sort,之所以安排两步建立进程,是为了在fork之后但在execve之前允许该子进程处理其文件描述符,这样可以完成对标准输入,标准输出和标准出错的重定向。
Windows 进程的创建:
win32函数调用CreateProcess即处理进程的创建,也负责把正确的程序装入新的进程。该调用有10个参数,其中包括要执行的程序,输入给该程序的命令行参数,各种安全属性,有关打开的文件是否继承的控制位,优先级信息,为该进程所需要创建的窗口规格以及指向一个结构的指针,在该结构中新创建进程的信息被返回给调用者。处了CreateProcess win32中大约有100多个其他的函数用于处理进程的管理,同步以及相关的事物。
进程的终止通常由下列条件引起:
进程的三种状态:
状态的切换:
为了实现进程模型,操作系统维护者一张表格即进程表。每个进程占用一个进程表项,该表型包含了进程状态的重要信息。包括程序计数器,堆栈指针,内存分配状况,所打开文件的状态,账号和调度信息,以及其他进程由运行状态转到就绪或阻塞状态时必须保存的信息。进程表项的一些字段:
在某一时刻,一个正在运行的进程被中断,操作系统指定另一个进程为运行态,并把控制权交给这个进程。进程切换可以在操作系统从当前正在运行的进程中获得控制权的任何时刻发生。那么什么时候进行进程切换?由三种类型进程中断机制:
实际上,大多数操作系统区分两种类型的系统中断。一种称为中断,另一种称为陷阱。前者与当前正在运行的进程无关的某种类型的外部事件相关,如完成一次I/O 操作;后者与当前正在运行的进程所产生的错误或异常条件相关,如非法的文件访问。对于普通中断,控制首先转移给中断处理器,它做一些基本的辅助工作,然后转到与已经发生的特定类型的中断相关的操作系统例程。
中断
陷阱
操作系统确定错误或异常条件是否是致命的。如果是,当前正在运行的进程被转换到退出态,并发生进程切换;如果不是,操作系统的动作取决于错误的种类和操作系统的设计,其行为可以是试图恢复或通知用户,操作系统可能会进行一次进程切换或者继续执行当前正在运行的进程。
系统调用
操作系统可能被来自正在执行的程序的系统调用激活。例如,一个用户进程正在运行,并且正在执行一条请求I/O 操作的指令,如打开文件,这个调用导致转移到作为操作系统代码一部分的一个例程上执行。通常,使用系统调用会导致把用户进程置为阻塞态。
From: http://blog.csdn.net/liufei_learning/article/details/27229589
原文地址:http://blog.csdn.net/liufei_learning/article/details/27229589