发新话题
打印

关于用PV原语写出磁盘SCAN调度算法的伪码

关于用PV原语写出磁盘SCAN调度算法的伪码

请教:

用PV原语写出磁盘SCAN调度算法的伪码.

不知谁有正确的官方答案. 谢谢!

世界就是0和1的组合, 1代表存在, 0代表无限 主页:http://www.aimm.cn/

TOP

My godness,it's so difficult.

Maybe some time is needed.

[em01]
多多交流.多多关照.

TOP

On this question,you may look up it from the Dos operaton system by Tang ziying.

[em01]
多多交流.多多关照.

TOP

不会吧!!!这书到哪里去找?

版主能不能写出个大概思路出来...

世界就是0和1的组合, 1代表存在, 0代表无限 主页:http://www.aimm.cn/

TOP

对SSTF算法略加修改后所形成的SCAN算法的基本思想如下:

既考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向.

如:当磁头正在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的.这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向,自外向里移动.这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,且距离最近者,这样,磁头又是逐步地向里移动,直至再无更里面一些的磁道访问,从而避免了饥饿现象的出现.

[em06]
多多交流.多多关照.

TOP

//用信号量实现磁盘调度SCAN算法

#define N 100 typedef int semaphore; semaphore s = 0; //互斥信号量 int headpos = 0; //磁盘磁头当前位置 int headmax = 256; //磁盘磁头最大位置 int direction = 1; //1为up,0为down. int i = 0; struct pos { int pos; semaphore s; }a[N];

main() { cobegin move(); //磁盘移动进程 access(); //磁盘数据存取进程 coend }

access() { int t; 获得磁盘访问位置"position";

p(s); t = i; //使结构数组中磁盘位置和信号量同步所设置的临时变量 a[i++].pos = position; //进程所需要访问的磁盘位置为临界资源,将此位置存入临界区 v(s);

p(a[t].s); 访问"position"所指示的磁盘区; //磁盘一次只能访问一个磁盘位置,属于临界区 }

move() { p(s); 对所有访问磁盘的进程位置由小到大进行排序; //为防止排序时有新的进程进入队列而设立的临界区 v(s); int j; if (direction == up) //如果方向向上 { for (j = 0; headpos>=a[j].pos || headpos>=headmax; j++) { if (headpos == a[j-1].pos) v(a[j-1].pos); //进程可以访问当前磁盘位置的数据 headpos++; //磁头向上(前)运行. } } else //如果方向向下 { for (j = 0; headpos<=a[j].pos || headpos<=0; j++) { if (headpos == a[j-1].pos) v(a[j-1].pos); //进程可以访问当前磁盘位置的数据 headpos--; //磁头向下(后)运行. } } }

我们老师的讲义上的

很想混的好点,所以想考研!!!QQ9369387

TOP

楼上的答案很不错

谢把这么标准的官方答案带来本版来

因本算法比较难得,加为精华收藏

[em01]
多多交流.多多关照.

TOP

good!
我能考上!

TOP

不如把精华顶上来看
版主

TOP

发新话题