Linux 使用vim编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象?
时间: 2024-03-31 16:34:20 浏览: 59
好的,您的问题是关于在Linux下使用vim编写一个程序,使用系统调用fork()创建两个子进程,在程序执行时会有一个父进程和两个子进程同时运行,每个进程都在屏幕上打印一个字符。父进程打印字符a,两个子进程分别打印字符b和字符c。请分析进程调度和并发执行的情况。另外,如果在程序中使用系统调用nice()来改变进程的优先级,会发生什么?
在这个程序中,当父进程调用fork()创建子进程时,操作系统会将父进程的所有资源都复制一份给子进程,包括程序计数器、寄存器、内存管理信息等等。因此,父进程和两个子进程都会同时运行,而且它们的执行顺序是不确定的。由于操作系统采用抢占式调度,所以当多个进程同时运行时,操作系统会根据各个进程的优先级、剩余时间片、等待时间等因素来决定进程的调度顺序。
如果在程序中使用系统调用nice()来改变各进程的优先级,会出现以下现象:
- 如果将父进程的优先级提高,那么父进程的执行频率会增加,它会更频繁地打印字符a,而两个子进程的执行频率会降低,它们打印字符b和字符c的次数会减少。
- 如果将子进程的优先级提高,那么子进程的执行频率会增加,它们会更频繁地打印字符b和字符c,而父进程的执行频率会降低,它打印字符a的次数会减少。
- 如果将所有进程的优先级都提高,那么它们的执行频率都会增加,但是它们之间的相对执行频率不会改变,因此各个进程打印字符的次数仍然保持原来的比例。
综上所述,使用nice()系统调用来改变进程的优先级可以影响进程的调度顺序和执行频率,但是需要注意调整优先级的时候要平衡进程之间的相对执行频率。
阅读全文