内容发布更新时间 : 2024/11/17 16:50:10星期一 下面是文章的全部内容请认真阅读。
参考答案
1 简答进程的概念?结合进程控制块PCB对内核在两个进程间进行上下文切换过程进行描述,画出进程的状态图,并就状态图中可能发生CPU调度决策的四种情况进行说明。 进程的概念(略)
进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。 状态图(略)
CPU调度决策可以如下四种情况下发生 ? 当一个进程从运行状态切换到等待状态 ? 当一个进程从运行状态切换到就绪状态 ? 当一个进程从等待状态切换到就绪状态 ? 当一个进程终止时。
2 进程间的通信机制主要有哪两种?这些通信模型的特点各自是什么?生产者和消费者问题是进程协作的经典问题,请对以下有限缓冲的生产者和消费者进程的代码进行改写,使得允许缓冲的最大项数为BUFFER_SIZE. 参考示例:
在共享数据中增加一个计数器count=0,用以统计缓冲中尚未被消费的已生产的item总数 生产者进程
item nextProduced; while (1) { while ((in % BUFFER_SIZE) == out && count== BUFFER_SIZE) ; /* do nothing */ buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; }
消费者进程
item nextConsumed; while (1) { while (in == out && count== 0) ; /* do nothing */ nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; }
3 线程通常可分为用户线程和内核线程,请回答两种上述两种线程之间的区别,并就两者之间的关系对多线程模型及其优缺点进行简要说明
用户线程受内核支持,无需内核管理,使用用户级的线程库完成线程的管理,对用户线程的支持通常处于内核之上,通过一个用户级线程库(thread library)实现。线程库提供了对线程的创建、调度和管理的支持,这无需来自内核的支持。因为内核并不知道用户级线程的存在,所有的线程创建和调度工作都在用户空间完成,而且整个过程不受内核的干涉。 内核线程由操作系统直接支持:内核在内核空间内实现了线程的创建、调度和管理。 常见的多线程模型包括以下三种
多对一 优点线程管理由线程库在用户空间进行,效率较高,缺点一旦某个线程执行了阻塞,则整个进程也会被阻塞
一对一 允许线程并发的执行并且运行在多处理器系统上,不会导致单一线程阻塞进程的情况,缺点用户线程和内核线程一一对应,开销较大,限制了系统线程的数量。
多对多 多路复用了许多用户级线程到同样数量或更小数量的内核线程上,允许OS创建足够数量的内核线程,且在某个线程发生阻塞时,可调度其他线程执行。
4 如下所示程序使用Pthread API实现,请将空白部分补充完整,并说明LINE C和LINE P将会输出的结果。 ? &attr
? pthread_create ? pthread.join ? *runner
? 0 ? 5
5有5个待运行的作业A、B、C、D、E,它们的运行时间分别为10、6、2、4和8分钟,其提交时间完全相同,其优先级别分别为3、5、2、1、4,其中5级为最高优先级。对于下列进程调度算法,试计算其平均周转时间。 1)、优先级调度; 2)、先来先服务(按ABCDE顺序进行)
答:1)、优先级调度;
按BEACD顺序进行调度 A、B、C、D、E的周转时间分别为24、6、26、30、14 平均周转时间=(24+6+26+30+14)/5=20分 2)、先来先服务 A、B、C、D、E的周转时间分别为10、16、18、22、30
平均周转时间=(10+16+18+22+30)/5=19.2分