⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 磁盘调度算法模拟.txt

📁 这是一个往上拉来的OS酸法模拟程序!觉得不错大家参考参考!
💻 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 + -