Pain的鸭子 2015-11-02 11:27 采纳率: 0%
浏览 1495

linux终端vim操作系统模拟问题

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

int main( void )
{
        struct process{
                char pname[3];
                char *next;
                int act;
                int runt;
                char sta;
        };
        int a[5];
        int i,j=0,m,n,u=1,o;
        int current;
        struct process s[5];
        strcpy(s[1].pname,"Q1");
        strcpy(s[2].pname,"Q2");
        strcpy(s[3].pname,"Q3");
        strcpy(s[4].pname,"Q4");
        strcpy(s[5].pname,"Q5");
        s[1].runt = 0;
        s[2].runt = 0;
        s[3].runt = 0;
        s[4].runt = 0;
        s[5].runt = 0;
        s[1].sta='R';
        s[2].sta='R';
        s[3].sta='R';
        s[4].sta='R';
        s[5].sta='R';
        srand(time(NULL));
        for(i=1;i<6;i++)
        {
                s[i].act = rand()%8+1;
        }
                for(m=1;m<10;m++)
                        for(n=1;n<6;n++)
                        {
                                if(s[n].sta == 'E') continue;
                                printf("\nRonud%d:\n",u);
                                u++;
                                current = n;
                                s[n].runt = s[n].runt + 1;
                                sleep(1);
                                if(s[n].runt == s[n].act)
                                {
                                        s[n].sta = 'E';
                                        a[j] = n;
                                        j++;
                                }
                                printf("RunningProcess:s%d\tPlanTime:%d\tRunTime:%d\tstate:%c",current,s[n].act,s[n].runt,s[n].sta);
                                printf("\nThe Order Of Running Process:\n");
                                for(o=1;o<6;o++)
                                {
                                        if(s[o].sta == 'E') continue;
                                        else 
                                        {
                                                printf("s%d\t",o);
                                        }
                                }
                                printf("\nThe Order Of Block Process:\n");
                                for(o=1;o<6;o++)
                                {
                                        if(s[o].sta == 'E') printf("s%d\t",o);
                                        else continue;
                                }
                                printf("\n*******************************************************************\n");
                        }
        printf("The Order of The end Process:\n");
        for(i=0;i<5;i++)
        {
                printf("The %d of th end Process is s%d\n",i+1,a[i]);
        }
        return 0;
}

老师布置的一道操作系统作业题,要求在linux终端下使用c语言模拟操作系统调用进程,代码已经摸索出= =,但是运行结果不尽如人意,最后出现——段错误(核心已转储),不知道出现原理以及解决办法,求大神帮帮忙,谢谢啦!

  • 写回答

2条回答 默认 最新

  • ztenv 博客专家认证 2015-11-12 08:25
    关注

    用gdb调试一下core文件定位错误

    评论

报告相同问题?

悬赏问题

  • ¥20 怎么在stm32门禁成品上增加记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app