我们以三个用户进程(str1、str2、str3)为例,来看看多个进程是如何运行的,他们又是如何切换的。
进程的源代码如下,str1、str2、str3三者代码一样。
#include <stdio.h>
int foo(int n)
{
char text[2048];
if(n==0)
return 0;
else
{
int i = 0;
for(i; i<2048; i++)
text[i] = '\0';
sleep(5);
foo(n - 1);
}
}
int main(int argc, char **argc)
{
foo(6);
return 0;
}
1、假设现在创建(fork)了三个进程,并执行(execve)对应的程序,他们的进程号是5、6、7,它们的线性地址空间的位置应该依次是4*64 ~ 5*64MB,5*64 ~ 6*64MB,6*64 ~ 7*64MB。假设三个进程此时都处于就绪态,也就是如下图: