计算机操作系统磁道数,计算机操作系统作业及答案

《计算机操作系统作业及答案》由会员分享,可在线阅读,更多相关《计算机操作系统作业及答案(4页珍藏版)》请在人人文库网上搜索。

1、作业21. 若1页大小为4KB,计算机地址总线为32位,则页号共有多少位?逻辑地址空间最多包含多少页?逻辑地址60000在第几页?页内偏移是多少?若该页被装进物理块1280中,则物理地址是多少?解:4KB=41024=22210=210 所以页内偏移即页内地址占 12 位 页号占 32-12=20 位 逻辑地址空间最大页数为 220 页 60000=(EA60)16=(1110 1010 0110 0000)2 其中低 12 二进制位为页内偏移,即(A60)16=2656。 高 4 二进制位为页号,即(E)16=14。 物理块号 1280=(500)16 物理地址=(500A60)16=.2.。

2、 假定当前磁头位于100号磁道,进程对磁道的请求序列依次为57,61,39,20,88,161,139,38,175。当采用先来先服务和最短寻道时间优先算法时,总的移动的磁道数分别是多少?(请给出寻道次序和每步移动磁道数)解:先来先服务 最短寻道时间优先 43 +4+ 22+ 19+ 68+ 73+ 22+ 101 + 137 = 489 12 + 27 + 4 +18 + 1+ 18 + 119 + 22 + 14 = 235 。3. 设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如。

3、下表所示。系统采用银行家算法来避免死锁。请回答下列问题:(1)T0时刻是否为安全状态?若是,请给出安全序列。(2)若进程P4请求资源(2,0,1),能否实现资源分配?为什么?(3)在(2)的基础上,若进程P1请求资源(0,2,0),能否实现资源分配?为什么?T0时刻系统状态进程最大资源需求量已分配资源量系统剩余资源数量ABCABCABCP1559212233P2536402P34011405P4425204P5424314答:当前的系统状态描述为:(1)在T0时刻,由于V(2,3,3)大于等于(C-A)中P5所在行的向量(1,1,0),因此V能满足P5的运行,在P5运行后,系统的状态为:同样的。

4、,在P5运行后,V(5,4,7)也大于等于C-A中P4所在的行(2,2,1),则能满足P4的运行。P4运行后,系统的状态为:按照上述同样的方法,P4运行后,P3,P2,P1也能按顺序运行。(备注:考试时需要都写出来)。因此,在T0时刻,存在安全序列:P5、P4、P3、P2、P1。T0时刻是安全的。(2)A)P4申请(2,0,1)不超过C-A中P4所在行的向量(2,2,1)。B)V(2,3,3)大于等于P4的申请(2,0,1)C)对P4的申请(2,0,1)进行预分配,预分配后,系统的状态为:可用资源V(0,3,2)大于等于C-A中P4所在的行(0,2,0),因此可以满足P4的运行。P4运行后,系统的状态为:同样的方法(考试时需要列出),可计算出存在安全序列:P4,P5,P3,P2,P1。因此,预分配后系统的状态是安全状态。对于,P4请求资源(2,0,1),给予分配,分配后的系统新状态为:(3)进程P1请求资源(0,2,0)A)P1申请(0,2,0)不超过C-A中P1所在行的向量(3,4,7)。B)V(0,3,2)大于等于P1的申请(0,2,0)C)对P1的申请(0,2,0)进行预分配,预分配后,系统的状态为:V(0,1, 2)不大于等于P1到P5任一进程在C-A中的向量,因此系统进行预分配后处于不安全状态。对于P1申请资源(,),不给予分配。

这是一道涉及操作系统和磁盘调度算法的题目,需要使用C语言来进行编写。以下是简单的实现思路: 1. 定义一个组来表示磁道队列,每个元素表示一个磁道。 2. 随机生成一个起始磁道和一定量的请求磁道,存储到磁道队列中。 3. 实现FCFS算法:按照请求的顺序进行移动,计算总磁道和平均寻道长度。 4. 实现SSTF算法:选择最近的请求进行移动,计算总磁道和平均寻道长度。 5. 实现SCAN算法:按照请求的方向进行移动,当到达磁道队列的边界时改变方向,计算总磁道和平均寻道长度。 6. 实现CSCAN算法:类似于SCAN算法,但在边界处不改变方向,而是回到队列的另一端,计算总磁道和平均寻道长度。 7. 输出每种算法的结果。 下面是代码示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_TRACK 200 // 磁道 #define MAX_REQUEST 20 // 请求磁道 #define START_TRACK 50 // 起始磁道号 // 定义磁道队列 int track_queue[MAX_REQUEST]; // 随机生成请求磁道 void generate_requests() { int i; for (i = 0; i < MAX_REQUEST; i++) { track_queue[i] = rand() % MAX_TRACK; } } // FCFS算法 void fcfs() { int i, total_tracks = 0, current_track = START_TRACK; float avg_seek_length; for (i = 0; i < MAX_REQUEST; i++) { total_tracks += abs(current_track - track_queue[i]); current_track = track_queue[i]; } avg_seek_length = (float)total_tracks / (float)MAX_REQUEST; printf("\nFCFS algorithm:\n"); printf("Total tracks: %d\n", total_tracks); printf("Average seek length: %f\n", avg_seek_length); } // SSTF算法 void sstf() { int i, total_tracks = 0, current_track = START_TRACK, min_distance, min_index, j; for (i = 0; i < MAX_REQUEST; i++) { min_distance = MAX_TRACK; for (j = 0; j < MAX_REQUEST; j++) { if (abs(current_track - track_queue[j]) < min_distance) { min_distance = abs(current_track - track_queue[j]); min_index = j; } } total_tracks += min_distance; current_track = track_queue[min_index]; track_queue[min_index] = MAX_TRACK + 1; // 标记已访问 } float avg_seek_length = (float)total_tracks / (float)MAX_REQUEST; printf("\nSSTF algorithm:\n"); printf("Total tracks: %d\n", total_tracks); printf("Average seek length: %f\n", avg_seek_length); } // SCAN算法 void scan() { int i, total_tracks = 0, current_track = START_TRACK, direction = 1; // 排序请求队列 for (i = 0; i < MAX_REQUEST - 1; i++) { int j; for (j = i + 1; j < MAX_REQUEST; j++) { if (track_queue[i] > track_queue[j]) { int temp = track_queue[i]; track_queue[i] = track_queue[j]; track_queue[j] = temp; } } } for (i = 0; i < MAX_REQUEST; i++) { if (current_track < track_queue[i] && direction == 1) { total_tracks += track_queue[i] - current_track; current_track = track_queue[i]; } else if (current_track > track_queue[i] && direction == -1) { total_tracks += current_track - track_queue[i]; current_track = track_queue[i]; } } total_tracks += abs(current_track - (direction == 1 ? MAX_TRACK : 0)); float avg_seek_length = (float)total_tracks / (float)MAX_REQUEST; printf("\nSCAN algorithm:\n"); printf("Total tracks: %d\n", total_tracks); printf("Average seek length: %f\n", avg_seek_length); } // CSCAN算法 void cscan() { int i, total_tracks = 0, current_track = START_TRACK; // 排序请求队列 for (i = 0; i < MAX_REQUEST - 1; i++) { int j; for (j = i + 1; j < MAX_REQUEST; j++) { if (track_queue[i] > track_queue[j]) { int temp = track_queue[i]; track_queue[i] = track_queue[j]; track_queue[j] = temp; } } } for (i = 0; i < MAX_REQUEST; i++) { if (current_track < track_queue[i]) { total_tracks += track_queue[i] - current_track; current_track = track_queue[i]; } } total_tracks += MAX_TRACK - current_track; total_tracks += track_queue[0]; float avg_seek_length = (float)total_tracks / (float)MAX_REQUEST; printf("\nCSCAN algorithm:\n"); printf("Total tracks: %d\n", total_tracks); printf("Average seek length: %f\n", avg_seek_length); } int main() { srand(time(NULL)); generate_requests(); fcfs(); sstf(); scan(); cscan(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值