3)安装vim编辑器,使用vim编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象?
时间: 2024-03-18 19:41:58 浏览: 144
1. 安装vim编辑器:
在Ubuntu系统中,可以使用以下命令安装vim编辑器:
```
sudo apt-get install vim
```
2. 编写程序:
使用vim创建一个源文件,例如test.c,将以下代码复制到文件中:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
printf("fork error!\n");
exit(1);
} else if (pid1 == 0) {
printf("child process 1 (pid = %d) is running, print b.\n", getpid());
printf("b\n");
exit(0);
} else {
pid2 = fork();
if (pid2 < 0) {
printf("fork error!\n");
exit(1);
} else if (pid2 == 0) {
printf("child process 2 (pid = %d) is running, print c.\n", getpid());
printf("c\n");
exit(0);
} else {
printf("parent process (pid = %d) is running, print a.\n", getpid());
printf("a\n");
wait(NULL);
wait(NULL);
exit(0);
}
}
}
```
3. 编译运行程序:
使用以下命令编译程序:
```
gcc test.c -o test
```
然后运行程序:
```
./test
```
4. 分析结果:
运行程序后,屏幕上会不断地输出a、b和c,这表明三个进程在并发执行。由于进程调度是由操作系统完成的,因此进程的执行顺序是不确定的,可能会出现各种不同的执行顺序。
当使用nice()系统调用来改变各进程的优先级时,可以观察到进程的执行顺序会发生一定的变化。如果将父进程的优先级设置为最高,子进程的优先级设置为较低,则父进程会更容易获得CPU资源,因此它的输出会更加频繁。反之,如果将子进程的优先级设置为最高,父进程的优先级设置为较低,则子进程会更容易获得CPU资源,因此它的输出会更加频繁。
阅读全文