操作系统----进程管理(C语言)

一、进程管理

#include "conio.h"
#include "stdio.h"
#include "stdlib.h"

struct  PCB_type
{  
	int pid;      //进程名-----------------轮转时间片,当前队列指针
	int priority;    //进程优先数
	int cputime;   //进程所占用的CPU时间
	int state;     //进程的状态
};
struct PCB_type neicun[20],waicun[20];
int shumu=0,pid_l;

int create();
void run( );
void huanchu();
void kill( );
void clrscr();

void main()
{
    int n;
    char a;
    n=1;
    while(n==1)
    {
		clrscr();
		printf("\n********************************************");
		printf("\n*               进程演示系统               *");
		printf("\n********************************************");
		printf("\n     1.创建新的进程      2.查看运行进程     ");
		printf("\n     3.换出某个进程      4.杀死运行进程     ");
		printf("\n     5.退出系统                             ");
		printf("\n********************************************");
		printf("\n请选择(1~5)");
		a=getch();
		switch(a)
		{ case'1':
		create( );  /*自定义过程*/
		break;
	   		  case'2':
				  run( );  /* 自定义过程 */
				  break;
			  case'3':
				  huanchu();  /*自定义过程*/
				  break;
			  case'4':
				  kill( );   /*自定义过程*/
				  break;
			  case'5':
				  exit(0);  
			  default: n=0;
		}
	}
}
void clrscr()
{
	system("cls");
}

int create( )  /* 创建一个进程的示例(不完整的程序) */
{
	if(shumu>=20)
	{
		printf("\n内存已满,请先结束或换出进程\n");
	}
	else
	{
		printf("\n请输入新进程的pid\n");
		scanf("%d",&neicun[shumu+1].pid);
		printf("\n请输入新进程的优先级\n");
		scanf("%d",&neicun[shumu+1].priority);
		printf("\n请输入新进程的大小\n");
		scanf("%d",&neicun[shumu+1].cputime);
		neicun[shumu+1].state=1;
		shumu++;
	}
	return neicun[shumu].state;
}

void run( )/*查看运行进程*/
{         
	int rpid;
	printf("\n请输入进程的pid\n");
	scanf("%d",&rpid);  	
	if(rpid>0&&rpid<=20&&neicun[rpid].state==1)
    {
		printf("\n进程的pid是: %d\n",neicun[rpid].pid);
		printf("进程的优先级是: %d\n",neicun[rpid].priority);
		printf("进程的大小是:%d\n",neicun[rpid].cputime);
    }
	else
	{
		printf("\n所查看运行进程不存在\n");
	}
	printf("请按回车退出查看\n");
	rpid=getch();     //可避免运行结果快速显示消失
}
void huanchu()/*换出某个进程*/
{ 
	int pid1,pid2;
	char c;
	printf("\n请输入需要替换出的进程的pid\n");
	scanf("%d",&pid1);
	printf("\n请输入需要替换进的进程的pid\n");
	scanf("%d",&pid2);
	if(pid1>0&&pid1<=20&&neicun[pid1].state==1)
	{
		if(neicun[pid1].priority>neicun[pid2].priority)
		{
			waicun[20].pid=neicun[pid1].pid;
			waicun[20].priority=neicun[pid1].priority;
			waicun[20].cputime=neicun[pid1].cputime;
			
			neicun[pid1].pid=neicun[pid2].pid;
			neicun[pid1].priority=neicun[pid2].priority;
			neicun[pid1].cputime=neicun[pid2].cputime;
			
			neicun[pid2].pid=waicun[20].pid;
			neicun[pid2].priority=waicun[20].priority;
			neicun[pid2].cputime=waicun[20].cputime;
			
			
			printf("\n替换完成\n");
			printf("\n被替换进程的pid是: %d\n",waicun[20].pid);
			printf("被替换进程的优先级是: %d\n",waicun[20].priority);
			printf("被替换进程的大小是:%d\n",waicun[20].cputime);
		}
		else
		{
			printf("\n进程优先级较小");
		}
	}
	else
	{
		printf("所查看运行进程不存在\n");
	}
	printf("请按回车退出换出进程\n");
	c=getch();
	return;
}
void kill()/*杀死运行进程*/
{ 
    
	int kpid;
	printf("\n请输入进程的pid\n");
	scanf("%d",&kpid);
	if(kpid>0&&kpid<20&&neicun[kpid].state==1)
	{
		neicun[kpid].state=0;
	}
	return;
}
/*void tongxun( )//进程之间通信
{
int tpid1,tpid2;
int buffer;
char d;
printf("\n请输入通信源进程pid\n");
scanf("%d",&tpid1);
printf("\n请输入通信目的进程pid\n");
scanf("%d",&tpid2);
if(tpid1>0&&tpid1<20&&neicun[tpid1].live==1)
{
buffer=neicun[tpid1].msg;
neicun[tpid1].msg=neicun[tpid2].msg;
neicun[tpid2].msg=buffer;

		printf("\n源进程的消息是: %d\n",neicun[tpid1].msg);
		printf("\n目的进程的消息是: %d\n",neicun[tpid2].msg);
		}
		else
		{
		printf("\n所查看运行进程不存在\n");
		}
		printf("\n请按回车退出进程通信\n");
		d=getch();
		return;
}
*/
  • 3
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<iostream> #include <iomanip> using namespace std; typedef struct page { int num; int bl_num; int i; struct page *next; }p_list,*p_ptr; typedef struct memory { int data; struct memory *next; }m_list,*m_ptr; int wst[8][8]; int v,z,qy_f=0,qy_l=0,yh; void change_add(int bl_num,int me_s,int lo_ad) { int b,c; yh=lo_ad/me_s; b=lo_ad%me_s; c=bl_num*me_s+b; cout<<"页号和偏移量:"<<yh<<"---"<<b<<endl; cout<<"物理地址为:"<<hex<<c<<endl; } void init_page(p_ptr &l,m_ptr &k) { int m; m_ptr s,q; p_ptr r,p; k=new m_list; k->next=NULL; s=k; l=new p_list; l->next=NULL; r=l; for(m=0;m<v;m++) { p=new p_list; p->num=m; p->bl_num=-1; p->i=0; r->next=p; r=p; } r->next=NULL; for(m=0;m<z;m++) { q=new m_list; q->data=-1; s->next=q; s=q; } s->next=NULL; } void show_page(p_ptr l) { p_ptr r; r=l->next; cout<<"页号"<<" "<<"块号"<<" "<<"状态位"<<endl; while(r!=NULL) { cout<<" "<<r->num<<" "<<setw(2)<<r->bl_num<<" "<<r->i<<endl; r=r->next; } } void show_memory(m_ptr k) { m_ptr s; s=k->next; cout<<"主存"<<endl; while(s!=NULL) { cout<<s->data<<endl; s=s->next; } } void init_wst() { for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { wst[i][j]=rand()%2; } } } void print_wst() { for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { cout<<wst[i][j]<<" "; } cout<<endl; } } int rand_bl() { int bl_nu; for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { if(wst[i][j]==0) { wst[i][j]=1; bl_nu=8*i+j+1; return bl_nu; } } } return bl_nu; } int pdk(m_ptr k) { int i=0; m_ptr s; s=k->next; while(s!=NULL) { if(s->data==-1) { i++; s=s->next; } else { return i; } } return i; } int mzf(m_ptr k,int page_num) { int i=0; m_ptr s; s=k->next; while(s!=NULL) { if(s->data==page_num) { return 1; } else { s=s->next; } } return 0; } int FIFO(p_ptr &l,m_ptr &k,int page_num,int bl_nu) { int m; p_ptr r; m_ptr s,t,u; u=new m_list; s=k->next; r=l->next; while(r!=NULL) { if(r->num==page_num&&r->i!=0) { break; } if(r->num==page_num&&r->i==0) { r->i=1; r->bl_num=bl_nu; qy_f++; } r=r->next; } if(pdk(k)!=0&&pdk(k)==z) { while(s!=NULL) { if(s->data==page_num) { show_page(l); show_memory(k); return 0; } s=s->next; } s=k->next; for(m=0;m<z-1;m++) { s=s->next; } s->data=page_num; z--; show_page(l); show_memory(k); return 0; } if(pdk(k)==0) { if(mzf(k,page_num)==1) { show_page(l); show_memory(k); return 0; } if(mzf(k,page_num)==0) { while(s->next!=NULL) { t=s; s=s->next; } t->next=NULL; r=l->next; while(r!=NULL) { if(r->num==s->data) { r->bl_num=-1; r->i=0; } r=r->next; } delete s; u->data=page_num; u->next=k->next; k->next=u; show_page(l); show_memory(k); } } } /*int LRU(p_ptr &l,m_ptr &k,int page_num,int bl_nu) { int m; p_ptr r; m_ptr s,t,u; u=new m_list; s=k->next; r=l->next; while(r!=NULL) { if(r->num==page_num&&r->i!=0) { break; } if(r->num==page_num&&r->i==0) { r->i=1; r->bl_num=bl_nu; qy_l++; } r=r->next; } if(pdk(k)!=0&&pdk(k)==z) { while(s!=NULL) { if(s->data==page_num) { show_page(l); show_memory(k); return 0; } s=s->next; } s=k->next; for(m=0;m<z-1;m++) { s=s->next; } s->data=page_num; z--; show_page(l); show_memory(k); return 0; } if(pdk(k)==0) { if(mzf(k,page_num)==1) { while(s->next!=NULL) { t=s; if(s->data==page_num) { } } show_page(l); show_memory(k); return 0; } if(mzf(k,page_num)==0) { while(s->next!=NULL) { t=s; s=s->next; } t->next=NULL; r=l->next; while(r!=NULL) { if(r->num==s->data) { r->bl_num=-1; r->i=0; } r=r->next; } delete s; u->data=page_num; u->next=k->next; k->next=u; show_page(l); show_memory(k); } } }*/ void main() { int lo_ad,bl_nu,bl_sz,ra_bl; p_ptr page; m_ptr memory; cout<<"请输入页表长度:"<<endl; cin>>v; cout<<"请输入块数:"<<endl; cin>>z; cout<<"请输入块的长度(b):"<<endl; cin>>bl_sz; init_wst(); init_page(page,memory); show_page(page); show_memory(memory); while(lo_ad!=-1) { ra_bl=rand_bl(); cout<<"请输入逻辑地址:"<<endl; cin>>hex>>lo_ad; change_add(ra_bl,bl_sz,lo_ad); if(yh>v-1) { cout<<"error"<<endl; continue; } cout<<dec; cout<<"FIFO:"<<endl; FIFO(page,memory,yh,ra_bl); cout<<"缺页数:"<<qy_f<<endl; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值