资源简介

操作系统 实验报告 很全面 可以直接上交了 含源代码 实验报告 可执行程序

资源截图

代码片段和文件信息

#include 
#include 
#define TOTAL_MEMORY_SIZE 640
#define SYSTEM_MEMORY_SIZE 40
#define getpch(type)(type*)malloc(sizeof(type))

typedef struct Job JCB;
typedef struct MemoryBlock MB;

int order = 0;
//作业的内部唯一标识符

//作业控制块
struct Job
{
        int ident;
//唯一的内部标识符
        char jobName[10]; 
//作业名
        char state; 
//作业状态W表示后备,R表示执行,F表示完成
        int  memoryNeedSize;
//所需的内存空间,单位为KB
        JCB* next;
        MB  * mbPtr;
}*headJCB=NULL*endJCB=NULL*headJCBFish=NULL*endJCBFish;

struct MemoryBlock
{
       int ident;
   //如果该内存块已经分配给作业,则此值为作业的内部标识符
       int begin;
   //此内存块的始地址
       int memorySize;
   //此内存块的空间大小
       int state;
   //0表示未分配,1表示已经分配
       MB  *pre *next;
}*headMBPtr=NULL;


//为新的作业创建JCB控制块
void addJCB(JCB* newJCB);

void createJCB()
{
        JCB* newJCB = getpch(JCB);
        if(newJCB == NULL)
        {
                printf(“系统内存不够!\n“);
               // exit(-1);
        }
        printf(“\n请输入作业名: “);
        scanf(“%s“newJCB->jobName);

        printf(“\n请输入所需的主存空间(K): “);
        scanf(“%d“&newJCB->memoryNeedSize);

        newJCB->ident = ++order;
//作业序号加1
        newJCB->state = ‘W‘;
//初始化为后备状态
        newJCB->next = NULL;
        newJCB->mbPtr = NULL;
        addJCB(newJCB);
        printf(“创建作业成功.\n“);
}

//创建内存分区块
MB* createMB(int jobIdentint begin int size int state MB* pre MB* next)
{
      MB* newMB = getpch(MB);
      newMB->ident = jobIdent;
  //等于作业的序号
      newMB->begin = begin;
  //开始位置的设置
      newMB->memorySize = size;
  //空间大小的设置
      newMB->state = state;
  //状态的设置
      newMB->pre = pre;
  //前向指针
      newMB->next = next;
  //后向指针

      return newMB;
}

//初始化内存分区块链,分为系统区和用户作业区
void initMblinkList()
{
     //对于系统区,前链置为空状态为已分配。已分配区作业内部标识符一率置为-1.
     MB* systemMB = createMB(-10SYSTEM_MEMORY_SIZE1NULLNULL);
     MB* userMB = createMB(-1SYSTEM_MEMORY_SIZETOTAL_MEMORY_SIZE-SYSTEM_MEMORY_SIZE0systemMBNULL);
     systemMB->next = userMB;
     headMBPtr = systemMB;
}

//把作业控制块添加到后备作业链当中
void addJCB(JCB* newJCB)
{
        if(newJCB==NULL)
                return ;
        if(headJCB==NULL)
        {//未有作业
                endJCB = headJCB = newJCB;
        }
        else
        {//队列未空,直接插入到队尾
                endJCB->next = newJCB;
                endJCB = endJCB->next;
        }
        newJCB = NULL;
}

void dispMblinkList()
{
     printf(“类别\t开始地址\t所占空间大小(k)\t\t状态\t作业内部标识号\n“);
     MB* systemMBPtr = headMBPtr;
     printf(“系统区\t“);
     printf(“%d\t\t“systemMBPtr->begin);
     printf(“%d\t\t\t“systemMBPtr->memorySize);
     printf(“已分配\n“);
     
     //以下部分打印输出用户区内存分配情况
     MB* userMBPtr = systemMBPtr->next;
     while(userMBPtr)
     {
          printf(“用户区\t“);
          printf(“%d\t\t“userMBPtr->begin);
          printf(“%d\t\t\t“userMBPtr->memorySize);
          userMBPtr->state==0?printf(“未分配\t“

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      13079  2011-11-28 10:09  实验三\Cpp3.cpp

     文件       3377  2011-12-03 01:03  实验三\Cpp3.dsp

     文件        516  2011-12-03 01:04  实验三\Cpp3.dsw

     文件      41984  2011-12-03 01:04  实验三\Cpp3.ncb

     文件      48640  2011-12-03 01:03  实验三\Cpp3.opt

     文件        740  2011-12-03 01:03  实验三\Cpp3.plg

     文件      30730  2011-12-03 00:58  实验三\Debug\cpp1.obj

     文件     188513  2011-12-03 01:03  实验三\Debug\Cpp3.exe

     文件     192876  2011-12-03 01:03  实验三\Debug\Cpp3.ilk

     文件      26157  2011-12-03 01:03  实验三\Debug\Cpp3.obj

     文件    3565628  2011-12-03 00:58  实验三\Debug\Cpp3.pch

     文件     467968  2011-12-03 01:03  实验三\Debug\Cpp3.pdb

     文件     214088  2011-11-28 09:35  实验三\Debug\Os3.pch

     文件     148480  2011-12-03 01:03  实验三\Debug\vc60.idb

     文件      77824  2011-12-03 00:58  实验三\Debug\vc60.pdb

     文件     187459  2011-12-20 09:15  实验三\实验三报告.docx

     目录          0  2011-12-17 23:05  实验三\Debug

     目录          0  2011-12-17 23:05  实验三

----------- ---------  ---------- -----  ----

              5208059                    18


评论

共有 条评论