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文件定位错误

    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度