操作系统的课设

II肯定有问题。


I.优先级调度

using System;
using System.Threading;

class Test
{
    static void Main()
    {
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate =
            new ThreadStart(priorityTest.ThreadMethod);

        Thread threadOne = new Thread(startDelegate);
        threadOne.Name = "ThreadOne";
        Thread threadTwo = new Thread(startDelegate);
        threadTwo.Name = "ThreadTwo";

        threadTwo.Priority = ThreadPriority.BelowNormal;
        threadOne.Start();
        threadTwo.Start();

        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.LoopSwitch = false;
    }
}

class PriorityTest
{
    bool loopSwitch;

    public PriorityTest()
    {
        loopSwitch = true;
    }

    public bool LoopSwitch
    {
        set{ loopSwitch = value; }
    }

    public void ThreadMethod()
    {
        long threadCount = 0;

        while(loopSwitch)
        {
            threadCount++;
        }
        Console.WriteLine("{0} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name,
            Thread.CurrentThread.Priority.ToString(),
            threadCount.ToString("N0"));
    }
}




II.最先适应算法&最佳适应算法
#include <stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct freelist
{
   int address;
   int length;
   char *status;
   struct freelist *next;
}freelist;
freelist *head;
int w=0;
void Initlist()/*初始化空闲区表*/
{
 int a[9]={0,5,21,41,55,58,68,98,128},i=0;
 char *s[9]={"OS","F","J1","F","J2","F","J3","F"};
 freelist *p=NULL,*rear=NULL;
 head=(freelist *)malloc(sizeof(freelist));
 head->next=NULL;
 rear=head;
 for (i=0;i<8;i++)
 {
  p=(freelist *)malloc(sizeof(freelist));
  p->address=a[i];
  p->length=a[i+1]-a[i];
  p->status=s[i];
  p->next=NULL;
  rear->next=p;
  rear=p;

 }

}
void sort()/*最佳适应法排序*/
{   freelist *m,*n,*q;
 m=head->next;
 q=(freelist *)malloc(sizeof(freelist));
 while(m->next!=NULL)
 {
  n=m->next;
  while(n->next!=NULL)
  {
   if((!strcmp(m->status,"F")) &&(!strcmp(n->status,"F")) && (m->length>n->length))
   {

     q->length=m->length;
     q->address=m->address;
     m->length=n->length;
     m->address=n->address;
     n->length=q->length;
     n->address=q->address;
   }
     n=n->next;

  }
     m=m->next;
 }
 }
void output()
{
 freelist *opt=head->next;
 printf("%s%8s%8s/n","address","length","status");

 while (opt!=NULL)
 { printf("%d%10d%10s/n",opt->address,opt->length,opt->status);
  opt=opt->next;
 }
 printf("/n");

}
void destory(freelist *des)
{
  freelist *t=des->next;
  if ((!strcmp(des->status,"F")) &&(!strcmp(t->next->status,"F")))/*上下与空闲区相邻*/
    if (des->address+des->length==t->address && t->address+t->length==t->next->address)
    {
  des->length=des->length+des->next->length+des->next->next->length;
   des->next=t->next->next;
   free(t);
  free(t->next);
     }
  if (!strcmp(des->status,"F"))/*上与空闲区相邻*/
    if((des->address+des->length)==t->address)
    {
  des->length=des->length+des->next->length;
   des->next=t->next;
   free(t);
    }
  if (!strcmp(t->next->status,"F"))/*下与空闲区相邻*/
    {if((t->address+t->length)==t->next->address)
    {
  des->next->status="F";
  des->next->length=des->next->length+des->next->next->length;
   des->next->next=t->next->next;
   free(t->next);
    }
    }
  else des->next->status="F";
}
Fit()/*最先适应法和最佳适应法的实现*/
{   char *t="F";
 int i=0;
 freelist  *cmp=head,*ins=(freelist *)malloc(sizeof(freelist)),*dins=head->next;
 output();
 ins->length=13;
 ins->next=NULL;
 printf("Insert J4/n");
 getchar();
 while(i!=1)
 {
  while(strcmp(dins->next->status,"F"))
    dins=dins->next;
  if (dins->next->length>ins->length)
  {
   ins->address=dins->next->address;
   dins->next->address=ins->address+ins->length;
   dins->next->length=dins->next->length-ins->length;
   ins->status="J4";
   ins->next=dins->next;
   dins->next=ins;
   i=1;
  }
  else dins=dins->next;
 }
 if(w==1) sort();
 output();
 getchar();
 while (strcmp(cmp->next->status,"J1"))/*找到j1且回收*/
  cmp=cmp->next;
 t=cmp->next->status;
 destory(cmp);
 if (w==1) sort();
 output();
 printf("%s%s/n",t," is free!");
 cmp=head;
 while (strcmp(cmp->next->status,"J3"))/*找到j3且回收*/
  cmp=cmp->next;
 t=cmp->next->status;
 destory(cmp);
 if (w==1) sort();
 output();
 printf("%s%s/n",t," is free!");
}

void main()
{
   Initlist();
   printf("Firstfit!/n");
   Fit();
   getchar();
   w=1;
   Initlist();
   sort();
   printf("Bestfit!/n");
   Fit();
   getchar();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值