一、(20分,每小题5分)简答题
(1)通过多任务共享实现的虚拟化CPU与通常虚拟机(VMware等)里所使用的虚拟化技术有什么不一样?
多任务共享实现的虚拟化CPU通常指的是在操作系统层面,通过时间片轮转等技术,使得多个程序或任务在单个物理CPU上交替执行,从而模拟出多CPU并行的效果。然而,这种虚拟化主要是在操作系统内部实现,每个任务或程序仍然运行在同一个操作系统实例上,它们共享操作系统的资源,但彼此之间是隔离的。
而通常虚拟机(如VMware等)里所使用的虚拟化技术则更为复杂和全面。它涉及到硬件级别的虚拟化,包括CPU、内存、磁盘、网络等资源的虚拟化。虚拟机通过虚拟化技术,可以在一个物理服务器上创建多个虚拟服务器,每个虚拟服务器都有自己的操作系统、应用程序和数据,彼此之间是完全隔离的。这种虚拟化技术允许在一个物理服务器上同时运行多个不同的操作系统和应用程序,从而显著提高了服务器的利用率和灵活性。
(源自文心一言3.5)
(2)试描述进程的所有状态,其中进程在哪些状态只出现一次,哪些会出现多次?
答:
1. 进程的所有状态包括:创建态、终止态、运行态、阻塞态、就绪态
2. 创建态和终止态只出现一次;运行态、阻塞态、就绪态会出现多次
(3)创建新进程的系统调用fork()和exec()有什么区别?
答:
1. 系统调用fork()用于创建子进程,得到两个返回值。新创建的子进程直接从fork()系统调用返回。父进程和子进程代码和数据段相同,但pid和内存空间不同。
2. 系统调用exec()并没有创建新进程,而是直接将当前运行的程序替换为不同的程序。并且,对exec()的成功调用永远不会返回。
(4)简述周转时间和响应时间的定义,并解释它们在不同调度算法(FIFO,SJF,RR)中的表现。
答:
1. 周转时间 = 完成时间 - 到达时间
响应时间 = 首次运行时间 - 到达时间
2. 一般来说,FIFO的周转时间较长,响应时间较长;SJF的周转时间较短,响应时间较长;RR的周转时间较长,响应时间较短
二、(20分)
给出图a图b所示代码的输出,函数fork,getpid,getppid的返回值可以是给定的任意正整形值,但要注意在上下文中保持一致。
#include<stdio.h>
#include<unistd.h>int main(int argc, char**argv)
{pid_t pid;int count = 0;pid = fork();if (pid < 0)perror("fork error!");else if (pid == 0) {printf("the pid of son is %d\n", getpid());count++;}else {printf("the pid of parent is %d\n",getpid());count++;}printf("count = %d\n", count);return 0;
}
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>int main(int argc, char** argv)
{int i = 0;for (i = 0;i < 2; i++){pid_t rpid = fork();if(rpid == 0)printf("%d son %4d %4d %4d\n", i, getppid(), getpid(),rpid);elseprintf("%d father %4d %4d %4d\n", i, getppid(), getpid(),rpid);}sleep(1);return 0;
}
答:
三、(20分)
(1)在给定三个作业A、B、C按次序到达,运行长度分别为300、200、100,计算在使用SJF和FIFO调度策略时的响应时间、周转时间、等待时间(10分)
答:
1. SJF调度:
平均响应时间为400/3,平均周转时间为1000/3,平均等待时间为400/3
2. FIFO调度:
平均响应时间为800/3,平均周转时间为1400/3,平均等待时间为800/3
(2)某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1μs。在T时刻就绪队列中有3个进程P1、P2和P3,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。(2018年408统考真题)
进程 | 等待时间 | 需要的CPU时间 | 优先权 |
P1 | 30μs | 12μs | 10 |
P2 | 15μs | 24μs | 30 |
P3 | 18μs | 36μs | 20 |
若优先权值大的进程优先获得CPU,从T时刻起系统开始进程调度,计算系统的平均周转时间。(10分)
答:
四、(20分)
分析多级反馈队列中五条规则的作用。
答:
规则1.如果A的优先级 > B的优先级,运行A(不运行B)
规则2.如果A的优先级 = B的优先级,轮转运行A和B
规则3.工作进入系统时,放在最高优先级(最上层队列)
规则4.一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)
规则5.经过一段时间S,就将系统中所有工作重新加入最高优先级队列
五、(20分)
(1)给定3个进程(A、B、C)的步长(stride)值分别是80、160、40,初始行程值都是0,当存在几个进程有相同的行程值时,按顺序选择进程执行。使用步长调度算法画出调度程序的行为,直到当所有行程值再次相等。
答:
行程值(A)步长=80 行程值(B)步长=160 行程值(C)步长=40 谁运行 0 0 0 A 80 0 0 B 80 160 0 C 80 160 40 C 80 160 80 A
160 160 80 C 160 160 120 C 160 160 160 ……
(2)为什么彩票调度算法和步长调度算法并没有作为CPU调度程序被广泛使用?解释其主要原因。(8分)
答:
原因1:这两种方式都不能很好地适合I/O
原因2:彩票调度的票数分配问题并没有确定的解决方式