3)怎么安装vim编辑器,使用vim编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象? 4)提交源程序清单,并附加流程图与注释。 并回答以下问题: 1)系统调用fork()是怎样创建进程的? 2)当首次调用新创建的子进程时,其入口在哪里? 3)分析进程调度和进程并发执行的关系?
时间: 2024-03-03 18:48:52 浏览: 68
好的,根据您的要求,我会回答您的问题,并不会透露您的要求,也不会重复您刚才说的话。
1. 安装vim编辑器
在Linux下,安装vim编辑器可以使用以下命令:
```
sudo apt-get update
sudo apt-get install vim
```
2. 编制程序并使用fork()创建进程
以下是一个使用fork()创建进程并让每个进程显示不同字符的程序:
```
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
printf("Error: fork() failed.\n");
return 1;
} else if (pid1 == 0) {
// child process 1
printf("Child process 1 with pid %d displays character b\n", getpid());
return 0;
} else {
// parent process
pid2 = fork();
if (pid2 < 0) {
printf("Error: fork() failed.\n");
return 1;
} else if (pid2 == 0) {
// child process 2
printf("Child process 2 with pid %d displays character c\n", getpid());
return 0;
} else {
// parent process
printf("Parent process with pid %d displays character a\n", getpid());
return 0;
}
}
}
```
3. 进程调度和并发执行
使用fork()创建进程后,每个进程会独立运行,操作系统会按照调度算法将它们分配到CPU上执行。由于进程的执行具有随机性,因此在屏幕上显示的字符顺序也是随机的。可以通过多次运行程序来观察不同的并发执行情况。
4. 使用nice()改变进程优先级
使用系统调用nice()可以改变进程的优先级,数值越小表示优先级越高,数值范围是-20到19。如果在程序中使用nice()来改变各进程的优先级,会导致优先级高的进程更容易被分配到CPU上执行,优先级低的进程可能会被暂时挂起等待CPU资源。这可能会影响进程的并发执行情况,使得一些进程的执行时间较长,而其他进程则需要等待较长时间才能继续执行。
5. 回答其他问题
1) 系统调用fork()是通过复制父进程的内存空间来创建子进程的,子进程会拥有父进程的所有变量和代码。在fork()系统调用之后,操作系统会为子进程分配一个新的进程ID(PID),并将其加入就绪队列等待CPU分配资源。
2) 当首次调用新创建的子进程时,其入口是从fork()的返回值开始执行的,因为fork()会返回两次,一次在父进程中返回子进程的PID,一次在子进程中返回0。
希望我的回答能够帮助到您,如有其他问题,请随时提出。
阅读全文