📄 磁盘调度算法模拟.txt
字号:
#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--; //磁头向下(后)运行.
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -