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

📄 作业1.cpp

📁 操作系统第二个实验的源码
💻 CPP
字号:
#include <iostream.h>
typedef struct node
{
  int data;
  struct node *next;
}ListNode;
typedef ListNode * LinkList;
/*-------------------------------------*/

LinkList CreateList(int Num)
{
    int i;
    LinkList head = new ListNode();
    ListNode *s,*r;
    r=head;
    for(i=0;i<Num;i++)
    {
	   s=new ListNode();
	   r->next=s;
	   r=s;
    }
    r->next = NULL;
    return head;
}
/*-------------------------------------*/

/*-------------------------------------*/
void ShowList(LinkList head)
{
    head = head->next;
    while(head!=NULL)
    {
	 cout<<"  "<<head->data;
	 head=head->next;
    }
}
/*-------------------------------------*/
int  main()
{
	char cmd;
    int Name,flag=0;
    LinkList FreeP;
    LinkList ReadyP;
    LinkList ExeP;
    LinkList BlockP;
    cout<<"******************************"<<endl;
	cout<<"  欢迎使用此系统——进程控制"<<endl;
	cout<<"******************************"<<endl;
    FreeP=CreateList(10);
    ReadyP=CreateList(0);
    ExeP=CreateList(0);
    BlockP=CreateList(0);
    cout<<"请输入你的command:"<<endl;
    cout<<">";
    cin>>cmd;
    while(1)
    {
	  switch(cmd)
	  {
	   case 'c':
	   case 'C':
		cout<<"请输入一个进程名:"<<endl;
		cin>>Name;
		if(ExeP->next==NULL)
		{
			flag=0;
		}
        if(flag==0)
		{
		   ListNode t;
		   t.data=Name;
		   t.next = NULL;
		   ExeP->next=&t;
		   flag=1;
		   cout<<"创建进程"<<Name<<"成功"<<endl;
		}
		else
		{
	       if(FreeP->next != NULL)
		   {
		      LinkList p,q;
              p=FreeP->next;
              FreeP->next=p->next;
              p->data=Name;
              q=ReadyP;
              while(q->next != NULL)
                    q=q->next;
              q->next=p;
              p->next=NULL;
              cout<<"创建进程"<<Name<<"成功"<<endl;
		   }
		   else
		      cout<<"错误:不能创建进程,已经没有资源!"<<endl;  
		}
	    break;
	   case 'e':
	   case 'E':
	    if(ExeP->next!=NULL)
	    {
		  LinkList p,q,r;
		  p=new ListNode();
          Name=ExeP->next->data;
		  p->data=ExeP->next->data;
		  p->next=NULL;
		  q=FreeP;
          while(q->next != NULL)
                q=q->next;
          q->next=p;
		  cout<<"结束进程"<<Name<<"成功!"<<endl;
          if(ReadyP->next!=NULL)
		  {
			  r=ReadyP->next;
		      ReadyP->next=r->next;
              ExeP->next->data=r->data;
	  	      ExeP->next->next=NULL;
		  }
		  else
		  {
              ExeP->next=NULL;
			  cout<<"没有就绪进程,不能再执行!"<<endl;
		  }
		  
	    }
	    else
	    {
		    cout<<"没有在执行的进程!"<<endl;
	    }
	    break;
  	   case 'b':
	   case 'B':
	    if(ExeP->next!=NULL)
	    {
		   LinkList p,q;
		   q=new ListNode();
		   Name=ExeP->next->data;
		   q->data=ExeP->next->data;
		   q->next=NULL;
           p=BlockP;
           while(p->next!=NULL)
                 p=p->next;
           p->next=q;
		   cout<<"阻塞进程"<<Name<<"成功!"<<endl;
		   if(ReadyP->next!=NULL)
		   {
			 p=ReadyP->next;
		     ReadyP->next=p->next;
             ExeP->next->data=p->data;
	  	     ExeP->next->next=NULL;
		   }
		   else
		   {
              ExeP->next=NULL;
			  cout<<"没有就绪进程,不能再执行!"<<endl;
		   }
	    }
	    else
	    {
		   cout<<"没有在执行的进程,不能进行阻塞!"<<endl;
	    }
	    break;
	   case 'w':
	   case 'W':
	    if(BlockP->next!=NULL)
	    {
		    LinkList p,q;
			p=BlockP->next;
			Name=p->data;
		    BlockP->next=p->next;
			if(ExeP->next==NULL)
			{
               ExeP->next=new ListNode();
			   ExeP->next->data=p->data;
			   ExeP->next->next=NULL;
			}
            else
			{
				q=ReadyP;
                while(q->next!=NULL)
                      q=q->next;
                q->next=p;
                p->next=NULL;
			}
            cout<<"唤醒进程"<<Name<<"成功!"<<endl;
	    }
	    else
	    {
		  cout<<"没有阻塞进程,不能进行唤醒!"<<endl;
	    }
	    break;
	   case 't':
	   case 'T':
	    if(ExeP->next!=NULL)
	    {
		   LinkList p,q,r;
		   p=new ListNode();
           Name=ExeP->next->data;
		   p->data=ExeP->next->data;
		   p->next=NULL;
		   q=ReadyP;
           while(q->next!=NULL)
                 q=q->next;
           q->next=p;
		   cout<<"正在执行的进程"<<Name<<"时间片到!"<<endl;
		   r=ReadyP->next;
		   ReadyP->next=r->next;
           ExeP->next->data=r->data;
		   ExeP->next->next=NULL;
	    }
	    else
	    {
		  cout<<"没有正在执行的进程!"<<endl;
	    }
	    break;
	   case 'h':
	   case 'H':
	    cout<<"\t帮助:    Command list:"<<endl;
	    cout<<"\tC :  创建进程."<<endl;
	    cout<<"\tE :  结束进程."<<endl;
	    cout<<"\tB :  阻塞进程."<<endl;
	    cout<<"\tW :  唤醒进程."<<endl;
	    cout<<"\tT :  时间片到."<<endl;
	    cout<<"\tS :  展示所有进程名."<<endl;
	    cout<<"\tH :  帮助."<<endl;
	    cout<<"\t# ;  退出工程."<<endl;
	    break;
	   case '#':
	    return 0;
	   case 's':
	   case 'S':
	    cout<<"就绪进程:";
	    ShowList(ReadyP);
	    cout<<endl<<"执行进程:";
	    ShowList(ExeP);
	    cout<<endl<<"阻塞进程:";
	    ShowList(BlockP);
	    cout<<endl;
	    break;
	   default: cout<<"代码错误!"<<endl;break;
      }
	  cout<<">";
	  cin>>cmd;
    }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -