操作系统的实验,用到c语言/数据结构的链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统的实验,用到c语言/数据结构的链表相关的知识,希望对你有一定的参考价值。

老师已经盯上我了。。然而我一定都不会做 请求大神求助!
要求用 c语言的结构体 数据结构的链表
实验内容:
进程调度模拟程序:假设有10个进程需要在CPU上执行,用:
² 最短执行时间调度算法
确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:
Ø 当前执行进程;
Ø 就绪队列;
Ø 等待队列
实验要求:
1) 创建10个进程的PCB,每个PCB包括:进程名、进程状态、优先级(1~10)、需要在处理机上执行的时间(ms)、队列指针等;
2) 初始化10个PCB(产生随机数0或1,分别表示进程处于就绪态或等待态);
3) 根据调度算法选择一个就绪进程在CPU上执行;
4) 在进程执行过程中,产生随机数0或1,该随机数为1时,将等待队列中的第一个PCB加入就绪队列的对尾;
5) 在进程执行过程中,产生一个随机数,表示执行进程能在处理机上执行的时间,如果随机时间大于总需要的时间,则执行完成。如果小于,则从总时间中减去执行时间。
6) 如果执行进程没有执行完成。则产生随机数0或1,当该随机数为0时,将执行进程加入就绪队列对尾;否则,将执行进程加入等待队列对尾;
7) 一直到就绪队列为空,程序执行结束。
只要能按要求做出来 绝对会追加悬赏!

参考技术A 有时在处理数据的时候处理过程会失败。除非数据被持久化,否则将永远丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在被许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理过程明确的指出该消息已经被处理完毕,确保你的数据被安全的保存直到你使用完毕。 参考技术B 今晚我帮你写这部分代码,需要稍等一下!追问

谢谢!!!感激不尽!!!

追答

字数超过最大值,请继续追问,我好接着贴代码:

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

#include <assert.h>

/// 单位:毫秒 
#define MAX_TASK_TIME        (100)
#define MAX_TIME_SLICE        (20)

enum ProcessState

    PROCESS_STAT_READY        = 0, ///< 就绪态 
    PROCESS_STAT_WAITING    = 1, ///< 等待态 

    PROCESS_STAT_RUNNING,
;

struct ProcessCB

    char             name[64];    ///< 进程名称 
    ProcessState    state;        ///< 进程状态 
    unsigned char    priority;    ///< 进程优先级 

    int                taskTime;    ///< 任务执行所需的毫秒数

    struct ProcessCB *last; 
    struct ProcessCB *next; 
 *gReadyQue = 0,
    *gWaitingQue = 0;

ProcessCB *queTail(ProcessCB **pcbQue)

    ProcessCB *tail = 0;
    if (!pcbQue || !*pcbQue)
        return 0;

    tail = *pcbQue;
    while (tail->next)
        tail = tail->next;

    return tail;

追问

好的 昨天我没收到提醒!谢谢!

我一次追问好几个可以么。

😂

好像不能发送了。。

又可以了。。。

要不您看您能不能私信我复制过来 ?

追答

继续追问一下,我接着发,这个字数限制挺麻烦的:

void pushBack(ProcessCB **pcbQue, ProcessCB *p)

    ProcessCB *tail = 0;
    if (!p) return;

    if (!pcbQue || !*pcbQue)
    
        *pcbQue = p;
        return;
    

    tail = queTail(pcbQue);

    tail->next = p; 
    p->last = tail;


ProcessCB *popHead(ProcessCB **pcbQue)

    ProcessCB *head = 0;

    if (!pcbQue || !*pcbQue)
        return 0;

    head = *pcbQue;

    if (head->next)
    
        (*pcbQue) = head->next;
        (*pcbQue)->last = 0;
    
    else
    
        *pcbQue = 0;
    

    head->last = 0;
    head->next = 0;

    return head;


ProcessCB *popTail(ProcessCB **pcbQue)

    ProcessCB *tail = 0;

    if (!pcbQue || !*pcbQue) 
        return 0;

    tail = *pcbQue;
    while (tail->next)
        tail = tail->next;

    if (tail->last)
        tail->last->next = 0;
    else
        *pcbQue = 0;

    tail->last = 0;
    tail->next = 0;

    return tail;

追问

好把

辛苦啦

追答

建一个工程执行以下代码加我的群,以后有问题我都可以帮你解决,不用这么麻烦:

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

int main(int argc, char *argv[])

    ///---------邀请你加入----------
    unsigned char sz[] = 
        0xAB, 0xA5, 0xA5, 0xD2, 
        0xBC, 0xD4, 0xD4, 0x42, 
        0x44, 0x3E, 0x08, 0x37, 
        0x45, 0xC5, 0xDF, 0xCE, 
        0xCC, 0xCB, 0xC8, 0xCC, 
        0xCA, 0xC8, 0xC7, 0xC9,
        0x00
    ;
    int t = 0;
    int len = strlen((char*)sz);
    printf("\\n");
    for (t = 0; t < len; ++t)
        printf("%c", ~sz[t]);
    system("pause");
    ///---------邀请你加入------------
    
    return 0;

追问

怎么加呀。。

本回答被提问者采纳

什么是C语言设计模板结构?

最近遇到一专业题:
按照模板设计思想,设计一学生成绩录入管理字系统。要求写出其模板结构和原程序?

想问下什么是模板结构?怎样写?多谢~ 程序就不用了~~

应该不是C吧,只有C++才支持模板,题目的意思就是要你用模板类来设计这个管理系统。
比如你的程序可能会用到链表存储结构,这个链表类就可以是一个模板类,代入学生类这个类型,就成了具体的用于存储学生信息的链表类了。
参考技术A 应该是C++类和对象里面的吧

以上是关于操作系统的实验,用到c语言/数据结构的链表的主要内容,如果未能解决你的问题,请参考以下文章

C语言当中的链表重要吗?可以做啥?

Redis 中的链表结构

求C语言 数据结构中的链表创建,插入和删除代码

什么是C语言设计模板结构?

C语言问题:建立一个有三个结点的链表,然后输出每个结点的数据。

C语言的链表—完整代码