进程和线程
1 process和program
进程是一种活动,它有自己的程序,输入,输出和状态。如果一个程序执行两次,它就会有两个进程。
2 创建新进程
unix中创建新进程的系统调用是fork。它会创建一个跟调用进程一模一样的新进程,称为子进程。创建成功后,子进程和父进程拥有同样的memory image,同样的environment strings和同样的打开的文件。一般地,子进程会执行execve或者类似的系统调用来改变memory image以运行一个新的程序。新的进程创建后,创建者和新进程拥有不同的地址空间。
3 init进程
init进程位于unix的boot image中。它是系统运行的第一个进程,当它运行时,它先检查有多少终端,然后为每个终端创建一个新进程。这些进程就一直等待用户登录,一旦登录成功,这些进程就运行shell来等待用户输入命令。这些命令可能又会创建更多的新进程。这样所有的进程其实组成了一颗进程树,init是root。windows中的进程没有这种层次关系,所有的进程都是平等的。
4 进程状态
有三种状态:running ,指正运行在cpu中;ready,指准备好了,暂时没有运行,因为其他进程占用了cpu;blocked,指不能运行,由于需要等待一些外部特定事件发生。
5 进程表
操作系统维护着一张表,叫做进程表,每个进程都有一个自己的entry。这些entry含有进程相关信息,包括该进程的程序计数器,堆栈指针,内存分配,打开的文件的状态,accounting和scheduling信息等。当进程从running转向ready和blocked时,这些信息需要保存好,以便再次运行。