班级:三班
学号: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中,都必须配置这级调度。
中级调度又称内存调度,主要目的是提高内存的利用率和系统吞吐量,把那些暂时不能运行的进程调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当他们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改其状态为就绪状态,在就绪队列等待。中级调度实际上就是存储器管理中的对换功能。
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