云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 操作系统实验指导书新 - 图文

操作系统实验指导书新 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/30 13:24:43

}while(n<0 || n>4); return(n); }

void enter(int q) {

int qq;

struct pcb *inf,*bc( ); if(q==1) {

inf=(struct pcb *)malloc(sizeof(stu)); /*开辟新结点*/ if(!inf){ printf(\ return; }

inputs(\请输入进程标识符(最多两位):\ inputs(\请输入进程优先数(最多两位):\ inputs(\请输入进程当前状态(一位):\ fir=bc(inf,fir); /*插入新结点*/ }

else

{for(qq=0;qq<4;qq++) /*结点初始化*/ {inf=(struct pcb *)malloc(sizeof(stu)); if(!inf){ printf(\ return; } strcpy(inf->name,str[qq*3]); strcpy(inf->number,str[qq*3+1]); strcpy(inf->status,str[qq*3+2]); fir=bc(inf,fir); } } }

inputs(sm,s,count) char *sm,*s; int count; {

char q[3]; do{

printf(sm); /*打印提示信息*/ gets(q);

if(strlen(q)>count) printf(\太长了!\\n\输入长度判断*/

43

}

while(strlen(q)>count);

strcpy(s,q); /*把输入内容放入结构中*/ }

struct pcb *bc(i,st) struct pcb *i; struct pcb *st; {

struct pcb *j,*k;

if(atoi(i->status)==0) /*判断进程状态是否就绪*/ {

if(back==NULL) /*链表为空时的插入*/ {

i->next=NULL; i->prior=NULL; back=i; return(i); }

j=st; /*令J指向链表的头*/ while(j)

{if(strcmp(j->name,i->name)==0) /*进程标识符要唯一*/ {printf(\该进程已存在就绪队列中。\\n\\n\ return(st); }

j=j->next; } j=st; k=NULL; while(j){

if(atoi(j->number)number)) /*判断进程优先数,找到要插入的位置*/ { k=j;

j=j->next; } else {

if(j->prior) /*判断J是否为头指针*/ {

j->prior->next=i; /*在链表的中间插入*/ i->next=j;

i->prior=j->prior; j->prior=i; return(st);

44

}

i->next=j; /*在链表的头插入*/ i->prior=NULL; j->prior=i; return(i); } }

k->next=i; /*在链表的尾插入*/ i->next=NULL; i->prior=k; back=i; return(st); }

printf(\该进程不是就绪状态,不能插入就绪队列中。\\n\\n\return(st); }

void delete( ) {

struct pcb *in; char s[2];

printf(\请输入进程标识符:\gets(s); in=fir; while(in){

if(strcmp(s,in->name)==0) break; /*寻找要删除的进程*/ else in=in->next; }

if(in==NULL)

printf(\未找到此进程!\\n\if(in){ /*找到进程*/

if(fir==in) /*该进程为链表头时*/ {

fir=in->next;

if(fir) fir->prior=NULL; /*该链表删除进程结点后不为空*/ else back=NULL; } else{

in->prior->next=in->next;

if(in!=back) /*该进程不在链表尾*/ in->next->prior=in->prior; else back=in->prior; }

free(in); /*释放进程空间*/

45

} }

void prin( ) {

struct pcb *j; j=fir;

while(j){ /*显示所有进程的信息*/ printf(\printf(\printf(\printf(\j=j->next; } }

四.设计实验 1.实验要求

1) 编程实现父进程和子进程通过信号实现异步合作。使用用户自定义信号SIGUSRl

由父进程发给子进程,SIGUSR2由子进程发给父进程。父进程和子进程各自从终端接收一个字符串(也可安排别的更有意义的操作),完成后用kill调用发送信号。接收到信号之后,显示对方的进程号及其字符串。利用信号方式(signal(SIGCHLD,SIG_IDN))使父进程不必等待子进程结束,且不产生“ZOMBIE”。

2) 使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:

child process 1 is sending a message! child process 2 is sending a message!

父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。

2. 程序源代码(学生自行设计)

46

搜索更多关于: 操作系统实验指导书新 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

}while(n4); return(n); } void enter(int q) { int qq; struct pcb *inf,*bc( ); if(q==1) { inf=(struct pcb *)malloc(sizeof(stu)); /*开辟新结点*/ if(!inf){ printf(\ return; } inputs(\请输入进程标识符(最多两位):\ inputs(\请输入进程优先数(最多两位):\ inputs(\请输入进程当前状态(一位):\ fir=bc(inf,fir); /*插入新结点*/ } else {for(qq=0;qq<4;qq++) /*结点初始化*/

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com