进程切换(上下文切换):暂停当前运行状态,从运行状态变成其他状态;调度另一个进程从就绪状态变成运行状态。
进程切换的要求:切换前,保存进程上下文;切换后,恢复进程上下文;快速切换。寄存器、CPU、内存地址空间。
进程创建:windows进程创建API,CreateProcess;
Unix进程创建系统调用:fork/exec。Fork()把一个进程复制成二个进程(parent,child),exec()用程序来重写当前进程。Pid进程标志位。
Int pid=fork();//创建子进程,子进程的返回值是0,父进程返回是子进程的ID
If(pid==0){ //zhixing,dosomething…},子进程执行的程序,如果是父进程则跳过该程序,进入后面代码段。
Fork()创建一个继承的子进程:复制父进程所有变量和内存;复制父进程的所有CPU寄存器(有一个例外)。Fork()返回值:子进程返回0,父进程返回子进程的标识符,子进程可使用getpid()获取PID。对于循环的fork(),则总共为2n
Fork()开销昂贵,对子进程分配内存,复制父进程的内存和CPU寄存器到子进程。Fork()一般之后exec(),vfork()轻量级的fork(),Copy on Write(COW)技术。
系统调用exec()加载新进程。
进程加载和执行系统调用exec():允许进程加载一个完全不同的程序,允许进程加载时指定的参数,代码对、堆栈和对等完全重写。
Wait()系统调用用于父进程等待子进程的结束:子进程存活时,父进程进入等待状态,等待子进程的返回结果;当谋子进程调用exit()时,唤醒父进程,将exit()返回值作为父进程中wait()的返回值。
Exit()进程的有序终止,完成资源回收:并且检查父进程,若父进程活着,进入僵尸状态,否则释放所有数据结构。
优先级控制:nice()指定进程初始化优先级;Unix进程优先级会随着执行时间而衰减。
进程调试支持:ptrace()允许一个控制另一个进程的执行,断点,查看寄存器。
定时:sleep()