c语言模拟pcb调度

I_love_program_2011 2011-10-29 12:04:32
这样的错误如何修改
都出现这样的错误:e:\os\funtion.cpp(89) : error C2440: '=' : cannot convert from 'const int' to 'char [50]'
There are no conversions to array types, although there are conversions to references or pointers to arrays.

#define MaxSize 50
typedef char ElemType;
typedef struct lNode /*定义pcd结点类型*/
{
int id; /*进程id*/
ElemType pcb_name[MaxSize]; /*进程名称*/
ElemType status[MaxSize]; /*进程状态*/
struct lNode *next; /*指向同一状态的下一个pcb地址*/
struct lNode *all_q_next;/*指向总链的下一个pcb地址*/
int start_addr;/*程序开始地址*/
}pcb;
.
.
.
.
.
void initialize(pcb *&all_head,pcb *&ready_head,pcb *wait_head)
{
//总链队列头指针
all_head=(pcb *)malloc(sizeof(pcb));
all_head->id=0;
all_head->pcb_name=NULL; //有问题
all_head->status=NULL; //有问题

all_head->start_addr=0;
all_head->next=NULL;
all_head->all_q_next=NULL;
//就绪队列头指针
ready_head=(pcb *)malloc(sizeof(pcb));
ready_head->id=0;
ready_head->pcb_name=NULL; //有问题
ready_head->status=NULL; //有问题
ready_head->start_addr=0;
ready_head->next=NULL;
ready_head->all_q_next=NULL;
//等待队列头指针
wait_head=(pcb *)malloc(sizeof(pcb));
wait_head->id=0;
wait_head->pcb_name=NULL; //有问题
wait_head->status=NULL; //有问题

wait_head->start_addr=0;
wait_head->next=NULL;
wait_head->all_q_next=NULL;
}
...全文
141 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiuchang 2011-10-29
  • 打赏
  • 举报
回复
all_head->pcb_name=NULL; //有问题
all_head->status=NULL; //有问题

这两个成员是数组了,不能这样赋值。应该如下:
memset(all_head->pcb_name, 0, sizeof(all_head->pcb_name));
在采用多道系统的设计程序中,往往有若干进程同时处于就绪状态。当就绪状态进程数大于处理机数时,就必须按照某种策略来决定哪些进程优先占用处理机。本实验用C语言模拟在单处理机情况下处理机调度,包括优先数法和时间片轮转法。 一、优先调度算法实现处理机的调度: 设计思路: 1、每个进程用一个进程控制块PCB来代表,进程控制块包括进程名(进程的标识)、指针(按优先数的大小把进程连成队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针为"0")、要求运行时间、优先数、状态(就绪、结束); 2、每次运行处理机调度程序前,为每个进程确定它的"优先数"和"要求运行时间"; 3、把给定的进程按优先数的大小连成队列,用一单元指出队首进程; 4、每模拟执行一次进程,优先数减一,要求运行时间减一; 5、如果要求运行的时间>=0,再将它加入队列(按优先数的大小插入,重置队首标志);如果要求运行的时间=0,那么把它的状态修改为结束,且推出队列; 6、若就绪队列不为空,重复上述,直到所有的进程都结束; 7、程序有显示和打印语句,每次运行后显示变化。 二、按时间片轮转法实现处理机调度: 设计思路: 1、每个进程用一个进程控制块PCB来代表,进程控制块包括进程名(进程的标识)、指针(把进程连成循环队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址)、已运行时间、状态(就绪、结束); 2、每次运行处理机调度程序前,为每个进程确定它的"要求运行时间"; 3、用指针把给定的进程按顺序排成循环队列,用另一标志单元记录轮到的进程; 4、每模拟运行一次进程,已运行时间加一; 5、进程运行一次后,把该进程控制块的指针值送到标志单元,以指示下一个轮到的进程。若该进程要求运行时间≠已运行时间,未执行结束,待到下一轮再执行;若要求运行时间=已运行时间,状态改为结束,退出队列; 6、若就绪队列不为空,重复步骤四和五; 7、程序有显示和打印语句,每次运行后显示变化。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧