/*姓名:白悦辉
班级:三班
学号:2014011642
先来先服务
*/
#include<stdio.h>
#
include<malloc.h>
typedef struct work {
int  Num;//作业号
int  InTime;//进入系统时间
int  RunTime;//运行时间
int  StartTime;//开始时间
int  FinishTime;//完成时间
int  TurnAroundTime;//周转时间
double  WeightTurnAroundTime;//带权周转时间
int flag;
}work;
void input(work **list, int len);

void process(work *list, int len);
float cal(work *list, int len);

int main(void)
{
work *pt;
input(&pt, 4);
process(pt, 4);
printf("%f", cal(pt, 4));
return 0;
}
void input(work **list, int len)
{
*list = (work *)malloc(len * sizeof(work));
int i = 0;
while (i<len)
{
printf("请输入第%d个作业的进入时间、预计执行时间", i + 1);
scanf_s("%d%d", &(*list)[i].InTime, &(*list)[i].RunTime);
(*list)[i].Num = i + 1;
(*list)[i].flag = 0;
i++;
}
}

void process(work *list, int len)
{
int min = 0;
int currentTime = 0;
int i = 0;
while (i<len)
{
int j = 0;
int k = 0;
while (list[k].flag == 1)
k++;
min = k;
while (j<len)
{
if (list[j].InTime <= currentTime&&list[j].flag == 0)
if (list[j].InTime <= list[min].InTime)
min = j;
j++;
}
list[min].StartTime = currentTime;
list[min].FinishTime = currentTime + list[min].RunTime;
list[min].flag = 1;
i++;
currentTime += list[min].RunTime;
}
}

float cal(work *list, int len)
{
int min = 0;
int Time = 0;
int i = 0;
while (i<len)
{

list[i].TurnAroundTime = list[i].FinishTime - list[i].InTime;
Time += list[i].TurnAroundTime;
i++;
}
return Time / (float)len;
}


/*姓名:白悦辉
班级:三班
学号:2014011642
短作业优先
*/

#include<stdio.h>
#
include<malloc.h>
#include<stdlib.h>
typedef struct work {
int  Num;//作业号
int  InTime;//进入系统时间
int  RunTime;//运行时间
int  StartTime;//开始时间
int  FinishTime;//完成时间
int  TurnAroundTime;//周转时间
double  WeightTurnAroundTime;//带权周转时间
int flag;
}work;
void input(work **list, int len);
void process(work *list, int len);
float cal(work *list, int len);

int main(void)
{
work *pt;
input(&pt, 4);
process(pt, 4);
printf("%f", cal(pt, 4));
system("pause");
return 0;
}
void input(work **list, int len)
{
*list = (work *)malloc(len * sizeof(work));
int i = 0;
while (i<len)
{
printf("请输入第%d个作业的进入时间、预计执行时间", i + 1);
scanf_s("%d%d", &(*list)[i].InTime, &(*list)[i].RunTime);
(*list)[i].Num = i + 1;
(*list)[i].flag = 0;
i++;
}
}

void process(work *list, int len)
{
int CurrentTime = 0;//当前系统时间
int min_owner = 0;//短作业标号
int j = 0;
for (int i = 0; i < len; i++)
{
int min = _CRT_INT_MAX;//最短运行时间的
for (int j = 0; j < len; j++)
{
int k = 0;
if (list[j].InTime <= CurrentTime&&list[j].RunTime < min&&list[j].flag!=1)
{
min = list[j].RunTime;
min_owner = j;
}
}
list[min_owner].StartTime = CurrentTime;
CurrentTime += list[min_owner].RunTime;
list[min_owner].FinishTime = CurrentTime;
list[min_owner].flag = 1;
}
}

float cal(work *list, int len)//计算带权周转时间
{
int min = 0;
int Time = 0;
int i = 0;
while (i<len)
{
list[i].TurnAroundTime = list[i].FinishTime - list[i].InTime;
Time += list[i].TurnAroundTime;
i++;
}
return Time / (float)len;
}


#计算机操作系统#指派了新任务. 实验三:动态分区式存储管理
实验目的 1)深入了解动态分区存储管理的实现原理。 2)掌握动态分区式存储管理方式的内存分配和回收的实现。 实验预备知识 动态分区管理方式 实验内容 编写程序模拟完成动态分区存储管理方式的内存分配...
#计算机操作系统#指派了新任务. 实验二 死锁避免的模拟
实验目的 1)深入了解死锁的原因和必要条件。 2)掌握死锁的处理方式。 3)实现死锁避免的模拟 实验预备知识 1)系统安全状态 2)银行家算法 实验内容 验证银行家算法避免...
#计算机操作系统#指派了新任务. 实验一: 作业调度的模拟
实验目的 1)加深对作业概念的理解。 2)深入了解批处理系统如何组织作业、管理作业和调度作业。 3)掌握采用银行家算法避免系统死锁的方法。 实验预备知识 1)批处理系统的概念 2)作业调度算法 ...

要经历高级调度,低级调度,中级调度

高级调度又称长程调度或作业调度,它的调度对象是作业。其主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要的资源,并将它们放入就绪队列。高级调度主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度。


低级调度又称为进程调度或短程调度,其所调度的对象是进程(或内核级线程)。其主要功能是,根据某种算法,决定就绪队列中的哪个进程应获得处理机,并有分配程序将处理及分配给被选中的进程。进程调度是最基本的一种调度,在多道批处理、分时和实时三种类型的os中,都必须配置这级调度。

中级调度又称内存调度,主要目的是提高内存的利用率和系统吞吐量,把那些暂时不能运行的进程调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当他们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改其状态为就绪状态,在就绪队列等待。中级调度实际上就是存储器管理中的对换功能。
#计算机操作系统#指派了新任务. 银行家算法
设系统中有3种类型的资源(A,B,C)和5个进程P1、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5, C资源的数量为20。在T0时刻系统状态见下表所示。系统采用银行家算法实施死锁避免策略。 (1)T0时刻是否为安全状态?若是,请给出...
#计算机操作系统#指派了新任务. 死锁概念
简述产生死锁的原因及必要条件。
#计算机操作系统#指派了新任务. 处理机调度计算
假如有四道作业,它们的进入时间和运行时间由下表给出,在单道程序环境下,分别填写先来先服务和短作业优先情况的完成时间和周转时间。  
#计算机操作系统#指派了新任务. 处理机调度概念理解
一个批处理型作业,从进入系统并驻留在外存的后备队列上开始,直至作业运行完毕,可能要经历哪几级的调度,并对每级调度进行概述。
semaphore mutex = 1 //互斥信号量 semaphore empty = 10 //空座位数 semaphore full = 0 //已占座位数 semaphore service = 0 //等待叫号 

semaphore empty=10;//空座位的数量,初始为10;

semaphore mutex=1//互斥使用取号机

semaphore full=0;//已占用的座位数量;

semaphore service=0;//等待叫号

cobegin

{

Process 顾客i

    {

        p(empty);//等空位

        p(mutex);//申请使用取号机

        //取号

        v(mutex);//取号完毕

        v(full);//通知营业员有新顾客

        p(service);//等待营业员叫号

        //接受服务

    }

Process 营业员

    while(1){

        P(full);//没有顾客则休息

        V(empty);//离开座位

        V(service);//叫号

        //进行服务

}

}coend


#计算机操作系统#指派了新任务. 进程同步作业
某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下: cobgin { ...
@蕾蕾 @资资 我是5班的刘力伟 麻烦帮我接收一下申请
已完成
#计算机操作系统#指派了新任务. 第一个任务
请加入雪梨网站同步课的同学尽快将昵称改为 “班级-姓名” 的格式,本周会对没有名称格式不正确的账号进行清理 例如:1班-张三           2班-李四 ...
已完成
已完成
#计算机操作系统#指派了新任务. 信号量(前驱关系控制)
举例说明:如何用记录型信号量控制进程间的前驱关系。
#计算机操作系统#指派了新任务. 进程状态
画出进程在三种基本状态之间的转化图,并说明这些转换的原因。
#计算机操作系统#指派了新任务. 第一个任务
请加入雪梨网站同步课的同学尽快将昵称改为 “班级-姓名” 的格式,本周会对没有名称格式不正确的账号进行清理 例如:1班-张三           2班-李四 ...
课程学员
3班-王占健
5班-韩雪雪
3班-白悦辉
3班-张潇洁
2班-李帅
3班-马星
7班-刘莹
4班-冯鑫
4班-李江