操作系统原理离线作业已完成 - 图文 联系客服

发布时间 : 星期二 文章操作系统原理离线作业已完成 - 图文更新完毕开始阅读70ae0da39ec3d5bbfc0a7414

b.交互式:这种系统由许多短期交易构成,并且下一个交易的结果是无法预知的。从用户提交到等待结果的响应时间应该是比较短的,通常为1秒左右。

c.分时:这种系统使用CPU调度和多道程序来经济的提供一个系统的人机通信功能。CPU从一个用户快速切换到另一个用户。以每个程序从终端机中读取它的下一个控制卡,并且把输出的信息正确快速的输出到显示器上来替代用soopled card images定义的作业。

d.实时:经常用于专门的用途。这个系统从感应器上读取数据,而且必须在严格的时间内做出响应以保证正确的性能。

e.网络:提供给操作系统一个特征,使得其进入网络,比如;文件共享。

f.并行式:每一个处理器都运行同一个操作系统的拷贝。这些拷贝通过系统总线进行通信。 g.分布式:这种系统在几个物理处理器中分布式计算,处理器不共享内存或时钟。每个处理器都有它各自的本地存储器。它们通过各种通信线路在进行通信,比如:一条高速的总线或一个本地的网络。

h.集群式:集群系统是由多个计算机耦合成单一系统并分布于整个集群来完成计算任务。

i.手持式:一种可以完成像记事本,email和网页浏览等简单任务的小型计算机系统。手持系统与传统的台式机的区别是更小的内存和屏幕以及更慢的处理能力。

2.3讨论向操作系统传递参数的三个主要的方法。

1.通过寄存器来传递参数

2.寄存器传递参数块的首地址

3.参数通过程序存放或压进堆栈中,并通过操作系统弹出堆栈。

2.12采用微内核方法来设计系统的主要优点是什么?在微内核中如何使客户程序和系统服

务相互作用?微内核方法的缺点是什么?

优点主要包括以下几点:

a)增加一个新的服务不需要修改内核

b) 在用户模式中比在内核模式中更安全、更易操作

c) 一个简单的内核设计和功能一般导致一个更可靠的操作系统

用户程序和系统服务通过使用进程件的通信机制在微内核中相互作用,例如

发送消息。这些消息由操作系统运送。微内核最主要的缺点是与进程间通信的过度联系和为了保证用户程序和系统服务相互作用而频繁使用操作系统的消息传递功能。

3.2 问:描述一下内核在两个进程间进行上下文功换的动作.

总的来说,操作系统必须保存正在运行的进程的状态,恢复进程的状态。保存进程的状态主要包括CPU寄存器的值以及内存分配,上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。 (书中答案)进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存

管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。

3.4 如下所示的程序,说明LINE A可能会输出什么?

#include #include #include int value=8; int main() {

pid_t pid; /* fork a child process */ pid = fork();

if (pid == 0) { /* child process */ value +=15; } else { /* parent process */ /* parent will wait for the child to complete */ wait(NULL); printf(\ exit(0); } }

会输出:Parent :value=8。

4.4在多线程程序中,以下哪些程序状态组成是被线程共享的? a.寄存值 b.堆内存 c.全局变量 d.栈内存

答:一个线程程序的线程共享堆内存和全局变量,但每个线程都有属于自己的一组寄存

值和栈内存。

4.7由图4.11给出的程序使用了Pthread的应用程序编程接口(API),在程序的第c行和第

p行分别会输出什么? #include #include

int value=0;

void *runner(void *param); /* the thread */

int main(int argc, char *argv[]) {

int pid;

pthread_t tid;

pthread_attr_t attr;

pid = fork();

if (pid == 0) {/* child process */ pthread_attr_init(&attr);

pthread_create(&tid, &attr, runner, NULL); pthread_join(tid, NULL);

printf(“CHILD: value = %d”, value); /* LINE C*/ }

else if (pid > 0) {/* parent process */ wait(NULL);

printf(“PARENT: value = %d”, value); /* LINE P */ } }

void *runner(void *param) { value=10;

pthread_exit(0); }

答:c行会输出10,p行会输出0.

5.4考虑下列进程集,进程占用的CPU区间长度以毫秒来计算:

进程 区间时间 优先级 P1 10 3 P2 1 1 P3 2 3 P4 1 4 P5 5 2

假设在时刻0以进程P1,P2,P3,P4,P5的顺序到达。

a.画出4个Gantt图分别演示用FCFS、SJF、非抢占优先级(数字小代表优先级高)和RR(时间片=1)算法调度时进程的执行过程。 b.每个进程在每种调度算法下的周转时间是多少? c.每个进程在每种调度算法下的等待时间是多少?

d.哪一种调度算法的平均等待时间对所有进程而言最小? 答:a.甘特图 FCFS P1 1

2

3

4

5

6

7

8

9

10

P2 P3 11

12

13

P4 P5 14

15

16

17

18

19

SJF P2 P4 P3 P5 P1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Non-preemptive Priority P2 P5 1

2

3

4

5

6

P1 7

8

9

10

11

12

13

14

15

16

P3 17

18

P4 19

RR(quantum=1) P1 P2 P3 P4 P5 P1 P3 P5 P1 P5 P1 P5 P1 P5 P1 P1 P1 P1 P1 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

b. Turnaround Time Process P1 P2 P3 P4 P5 Average

c. Waiting Time Process P1 P2 P3 P4 P5 Average FCFS 0 10 11 13 14 9.6 SJF 9 0 2 1 4 3.2 NPP 6 0 16 18 1 8.2 RR(quantum=1) 9 1 5 3 9 5.4 FCFS 10 11 13 14 19 13.4 SJF 19 1 4 2 9 7.2 NPP 16 1 18 19 6 12 RR(quantum=1) 19 2 7 4 14 9.2 d.SJF

5.5下面哪些算法会引起饥饿

a.先来先服务

b.最短作业优先调度 c.轮转法调度 d.优先级调度

答:最短作业优先调度和优先级调度算法会引起饥饿

5.7考虑一个运行10个I/O约束(型)任务和一个CPU约束(型)任务的系统。假设,I/O约束任务每进行1毫秒的CPU计算发射一次I/O操作,但每个I/O操作的完成需要 10毫秒。同时,假设上下文切换要0.1毫秒,所有的进程都是长进程。对一个RR调度来说,以下情况时CPU的利用率是多少: a.时间片是1毫秒 b.时间片是10毫秒