急求 程序代码 c/c++ 操作系统中的 处理机调度算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求 程序代码 c/c++ 操作系统中的 处理机调度算法相关的知识,希望对你有一定的参考价值。

实现 先来先服务、短作业优先、时间片轮转 三种算法
课题一、处理机调度模拟程序:选择一个调度算法,实现处理机调度。
设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。
设计要求:
1)进程调度算法包括:时间片轮转法,短作业优先算法,先来先服务算法。
2)可选择进程数量
3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。

参考技术A #include <iostream>

#include <stdio.h>

#include <string>

//#include <windows.h>

using namespace std;

//hyugtyftydrtdtrdrrtrdrt

struct Node



string name;//进程(作业)名称

int arriveTime;//到达时间

int ServerTime;//服务时间

int leftTime;//the left time

Node *link;//指向下一个节点的指针

;

class CProcess



public:

CProcess();//构造函数

~CProcess();//析构函数

const CProcess &operator =(const CProcess& p);//重载赋值操作符

void insertNode(string &na,int& at,int& st);//插入新元素(at由小到大)到链表合适的位置

void sort();//按照服务时间由大到小排序

bool isEmpty();//判断是否为空

void destroy();//销毁

int length();//求出链表长度

void print();//打印出元素

void FCFS();//先到先服务

void SJF();//短进程(作业)优先

void RR(int& q);//时间片轮转

void priority();//优先权调度

protected:

Node *first;

Node *last;

;

const CProcess& CProcess::operator=(const CProcess& p)



Node *newNode;

Node *Current;

if(this!=&p)//避免自己给自己赋值



if(first!=NULL)//如果链表不为空

destroy();

if(p.first==NULL)

//如果要拷贝的对象为空

this->first = NULL;

this->last = NULL;



else



Current = p.first;

first= new Node;

first->name=Current->name;//

first->arriveTime=Current->arriveTime;

first->ServerTime=Current->ServerTime;

first->link =NULL;

last =first;

Current = Current->link;

while(Current!=NULL)



newNode = new Node;

newNode->name=Current->name;

newNode->arriveTime=Current->arriveTime;

newNode->ServerTime=Current->ServerTime;

newNode->link=NULL;

last->link=newNode;

last=newNode;

Current = Current->link;







return *this;



CProcess::CProcess()

//构造函数

first=NULL;

last=NULL;



CProcess::~CProcess()



Node *temp;

while(first!=NULL)



temp=first;

first=first->link;

delete temp;



last=NULL;



void CProcess::insertNode(string &na,int& at,int& st)

//按照到达时间升序排序

Node *Current;

Node *trailCurrent;//指向Current的前一个节点

Node *newNode;

bool found;

newNode = new Node;//建立一个新节点

newNode->name=na;

newNode->arriveTime=at;

newNode->ServerTime=st;

newNode->link=NULL;//

if(first==NULL)//如果第一个节点为空(如果是第一次插入元素)

first=newNode;//将新节点赋给第一个节点

else

//如果不是第一次

Current =first;

found = false;

while(Current!=NULL && !found)



if(Current->arriveTime >= at)

found = true;

else



trailCurrent = Current;

Current = Current->link;





if(Current==first)



newNode->link = first;

first = newNode;



else



trailCurrent->link = newNode;

newNode->link = Current;







int CProcess::length()



int count =0;//声明变量,并初始化为0(用来记录长度)

Node *Current;

Current = first;

while(Current!=NULL)//当前节点不为空,记录值自加,一直向后遍历,



count++;

Current = Current->link;



return count;//返回长度



void CProcess::sort()//按照服务时间,升序排列

//冒泡排序

string sname;

int at;

int st;

Node *Current;//指向当前节点

Node *trailCurrent;//指向当前节点的前一个节点

for(trailCurrent=first->link;trailCurrent!=NULL;trailCurrent=trailCurrent->link)//控制条件有问题



for(Current=trailCurrent->link;Current!=NULL;Current=Current->link)//控制条件有问题



if(trailCurrent->ServerTime > Current->ServerTime)



sname=trailCurrent->name;

at=trailCurrent->arriveTime;

st=trailCurrent->ServerTime;

trailCurrent->name=Current->name;

trailCurrent->arriveTime=Current->arriveTime;

trailCurrent->ServerTime=Current->ServerTime;

Current->name=sname;

Current->arriveTime=at;

Current->ServerTime=st;









bool CProcess::isEmpty()//判断是否为空



return (first==NULL);//如果第一个节点为空,返回值



void CProcess::print()



Node *Current;

Current = first->link;//头节点赋给当前节点

while(Current!=NULL)//当前节点不为空,一直向后遍历打印



cout<<Current->name<<" ";

cout<<Current->arriveTime<<" ";

cout<<Current->ServerTime<<"\n";

Current = Current->link;





void CProcess::destroy()



Node *temp;//定义一个临时指针变量

while(first!=NULL)



temp=first;

first=first->link;

delete temp;



last=NULL;



void CProcess::FCFS()//先到先服务



Node *Current;

int T0=0;//完成时间

int T1=0;//周转时间

Current = first->link;//头节点赋给当前节点

while(Current!=NULL)



if(T0 < Current->arriveTime)



T0=Current->arriveTime+Current->ServerTime;

T1=T0-Current->arriveTime;

cout<<Current->name<<"\t";//打印出进程名

cout<<T0<<"\t";//打印出完成时间

cout<<T1<<"\n";//打印出周转时间

Current = Current->link;



else



T0=Current->ServerTime+T0;

T1=T0-Current->arriveTime;//周转时间等于,完成时间 - 到达时间

cout<<Current->name<<"\t";//打印出进程名

cout<<T0<<"\t";//打印出完成时间

cout<<T1<<"\n";//打印出周转时间

Current = Current->link;







void CProcess::SJF()//短进程(作业)优先



//首先执行第一个到达的作业

Node *Current;

int T0=0;//完成时间

int T1=0;//周转时间

T0=first->link->ServerTime+T0;

T1=T0-first->link->arriveTime;

cout<<first->link->name<<"\t";

cout<<T0<<"\t";//打印出完成时间

cout<<T1<<"\n";//打印出周转时间

first->link=first->link->link;//删除

//执行剩下的

sort();//对剩下的排序

Current = first->link;//头节点赋给当前节点

while(Current!=NULL)



if(T0 < Current->arriveTime)



T0=Current->arriveTime+Current->ServerTime;

T1=T0-Current->arriveTime;

cout<<Current->name<<"\t";//打印出进程名

cout<<T0<<"\t";//打印出完成时间

cout<<T1<<"\n";//打印出周转时间

Current = Current->link;



else



T0=Current->ServerTime+T0;

T1=T0-Current->arriveTime;//周转时间等于,完成时间 - 到达时间

cout<<Current->name<<"\t";//打印出进程名

cout<<T0<<"\t";//打印出完成时间

cout<<T1<<"\n";//打印出周转时间

Current = Current->link;







void CProcess::RR(int& q)//时间片轮转



cout<<"时间片轮转操作完成!\n";



void CProcess::priority()//优先权调度



cout<<"优先权操作完成!\n";



void main()



CProcess p0,p1,p2,p3,p4;

int at,st;

string na;

int judge=1;//控制退出程序

int choice;//控制选择操作

while(judge)



cout<<"********************************************************\n";

cout<<"****** 说明:本程序适用于单道进程(作业) ******\n";

cout<<"******** 请选择您的操作 ***************\n";

cout<<"*********输入相应的数字,按下(Enter)键!**************\n";

cout<<"************* 5.录入信息 ************\n";

cout<<"************* 1.先到先服务 ************\n";

cout<<"************* 2.短进程(作业)优先 ************\n";

cout<<"************* 3.时间片轮转 ************\n";

cout<<"************* 4.优先权(静态)调度 ************\n";

cout<<"************* 0.退出程序 ************\n";

cout<<"********************************************************\n";

cin>>choice;

switch(choice)



case 0:

judge=0;

break;

case 5:

cout<<"请输入信息以“end”结束输入!\n";

cout<<"进程名 到达时间 服务时间"<<endl;

while(na.compare("end"))//如果相等则会返回0



p0.insertNode(na,at,st);

cin>>na>>at>>st;



cout<<"录入成功,目前的信息为:\n";

cout<<"进程名 到达时间 服务时间"<<endl;

p0.print();

break;

case 1://先到先服务

p1=p0;//拷贝一份

if(p1.isEmpty())



cout<<"请先录入信息\n";

break;



else



cout<<"先到先服务\n";

cout<<"进程名 完成时间 周转时间\n";

p1.FCFS();

break;



case 2://短作业优先

p2=p0;//拷贝一份

//p2.sort();

//p2.print();

if(p2.isEmpty())



cout<<"请先录入信息\n";

break;



else



cout<<"短作业优先\n";

cout<<"进程名 完成时间 周转时间\n";

p2.SJF();

break;



case 3://时间片轮转

p3=p0;//拷贝一份

int q;

if(p3.isEmpty())



cout<<"请先录入信息\n";

break;



else



cout<<"请输入时间片大小";

cin>>q;

cout<<"时间片轮转\n";

cout<<"进程名 完成时间 周转时间\n";

p3.RR(q);

break;



case 4://优先权

p4=p0;//拷贝一份

if(p4.isEmpty())



cout<<"请先录入信息\n";

break;



else



cout<<"时间片轮转\n";

cout<<"进程名 完成时间 周转时间\n";

p4.priority();

break;



default:

cout<<"请选择目录中的选项!\n";

break;





return;

急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在

急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在的字符串,计算第二个字符串在第一个字符串中出现的次数。好评

你好!给你一个程序,这个程序可以统计含有空格的字符串

    

完整的代码:

#include <stdio.h>
#include <string.h>

int find(char * str1, char * str2) 
 
int i,j; 
int str1len=strlen(str1),str2len=strlen(str2); 
int count=0; 
for(i=0;i<str1len-str2len+1;i++)
  
   for(j=0;j<str2len;j++)    
    
     if(str2[j]!=str1[i+j]) 
   break;    
    
   if(j==str2len)
     count++;    
 
 return count;

   
int main()

char a[200],b[200],*g;
int c=0;
printf("请输入主串:");
gets(a);
printf("请输入子串:");
gets(b);

    c=find(a,b);

printf("出现的次数:%d\\n",c);
return 0;

参考技术A #include <stdio.h>
#include <string.h>
void main()

    char str1[20], str2[20], *p1, *p2;
    int sum=0;
    printf("Please enter two strings\\n");
    scanf("%s%s", str1, str2);
    p1=str1;
    p2=str2;
    while(*p1 != '\\0')
    
        if(*p1 == *p2)
        
            while(*p1 == *p2 && *p2 != '\\0')
            
                p1++;
                p2++;
            
        
        else
            p1++;
        if(*p2 == '\\0')
            sum++;
        p2=str2;
    
    printf("%d", sum);
    getchar();

希望这个能帮到你。。加油吧少年

    请放心使用,有问题的话请追问

    满意请及时采纳,谢谢,采纳后你将获得5财富值。

    你的采纳将是我继续努力帮助他人的最强动力!

本回答被提问者和网友采纳
参考技术B int countsubstr(char *str ,char * substr)

int count=0;
int nowindex=0;
for(int i=0;i<strlen(str);i++)

char isOK=1;
for(int j=0;j<strlen(substr);j++)

if(str[i+j]=='\0')return count;

if(str[i+j]!=substr[j]) isOK=0;
break;

if(isOK==1)

count++;
i+=strlen(substr)-1;



return count;
参考技术C AT("子字符串")追问

AT是什么?我要C实现的,麻烦你帮我写一个

追答

?AT("百度","百度知道")

不对,不对 这是求字符串位置

以上是关于急求 程序代码 c/c++ 操作系统中的 处理机调度算法的主要内容,如果未能解决你的问题,请参考以下文章

急求!1急求!!用c语言实现类似网页验证码的算法。拜托啦!!!

SQL急求!!!!

急求C语言编译的小游戏(如扫雷),附带源代码和注释。

急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在

C++或C中怎么通过代码执行mongodb中的命令行,把执行结果带回。

急求51单片机控制舵机C语言程序,舵机可以根据设定旋转任意角度!急求啊,大神帮帮忙!非常感谢!