• 大小: 816KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: 其他
  • 标签:

资源简介

课程要求: 用高级语言编写程序,模拟实现一个简单功能的操作系统。 (1) 提交一批作业(>=10),按先来先服选择一部分作业(最多5个)进入内存 (2) 为每个作业创建一个进程,并分配内存(用户内存:0—1024K,采用可变连续分配方式) (3) 进程调度功能(时间片轮转) (4) 随机阻塞进程,并在一段时间后唤醒进程(选做) (5) 显示相关信息:后备作业队列、内存分配情况、进程信息、完成作业情况 (6) 这些功能要有机地连接起来

资源截图

代码片段和文件信息

import java.util.linkedList;
import java.util.Random;



public class ProcessMemoryController {

    int NUM = 10;//进程数
    int ACCURACY = 1;//控制格式化后小数点后面的位数
    int THRESHOLD = 5;//允许并发的进程数量,小于时从后备队列调入进程
    int MINSIZE = 30;//控制内存碎片的产生

    PCB[] pcb = new PCB[NUM];
    linkedList memoList = new linkedList<>();

    double pTime;     //时间片定义
    int run;       //当前运行的进程,没有则为-1
    long lastTime;  //每次调度程序都记录当前时间
    long beginTime;//程序开始时间

    //进程PCB块类
    private class PCB {
        String name;       //进程名
        double arrtime;    //到达时间
        double needtime;   //需要运行时间
        double usedtime;   //已用时间
        int needmemo;      //所需内存
        int address;       //主存起始位置
        char state;        //进程状态
    }
    //内存条目类
    private class MemoItem {
        //内存表条目
        int address = 0;
        int length = 0;
        char state = ‘F‘;//B代表busy繁忙或F代表free空闲

        public MemoItem(int address int length) {
            this.address = address;
            this.length = length;
        }
    }
    //定义bool类型的所有进程调度结束函数
    boolean isAllFinished() {
        for (int i = 0; i < NUM; i++) {
            if (pcb[i].state != ‘F‘) return false;
        }
        return true;
    }
    //初始化各个参数
    void init() {
        run = -1;

        Random r = new Random();

        for (int n = 0; n < NUM; n++) {
            pcb[n] = new PCB();
            pcb[n].name = Character.toChars(65 + n)[0] + ““;
            pcb[n].needtime = r.nextDouble() * 2 + 3;//2到5秒
            pcb[n].needmemo = r.nextInt(200) + 250;//需要的内存为200到450


            if (n == 0) {
                pcb[n].arrtime = 0;
                pcb[0].needmemo = 50;
            } else {
                pcb[n].arrtime = r.nextDouble() * 5 + 1;
                pcb[n].needmemo = r.nextInt(300) + 150;//需要的内存为300到450
            }
        }
        for (int n = 0; n < NUM; n++) {
            pcb[n].usedtime = 0;
            pcb[n].address = 0;
            pcb[n].state = ‘U‘;
        }

        //设置起始地址为30,初始化的长度在100到150之间
        MemoItem first = new MemoItem(30 r.nextInt(100) + 50);
        memoList.add(first);
        MemoItem prev = first;
        for (; ; ) {
            int address = prev.address + prev.length;
            if (address >= 1024) break;
            int length = r.nextInt(50) + 50;
            MemoItem ano = new MemoItem(address length);
            memoList.add(ano);
            prev = ano;
        }
    }
    //格式化输出展示数据
    String d2s(double d) {
        String tmp = d + ““;
        int index = tmp.indexOf(“.“);
        return tmp.substring(0 index + ACCURACY + 1);
    }
    //先来先服务时间排序
    void sortByArrtime() {
        int i j;
        PCB temp;
        for (i = 0; i < NUM - 1; i++) //按照到达时间排序
        {
            for (j = 0; j < NUM - 1 - i; j++) {
                if (pcb[j + 1].arrtime < pcb[j].arrtime) {
                    temp = pcb[j];
          

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

     文件        276  2020-07-09 20:53  source\代码\.idea\misc.xml

     文件        259  2020-07-09 20:53  source\代码\.idea\modules.xml

     文件       5320  2020-08-19 11:58  source\代码\.idea\workspace.xml

     文件        433  2020-07-09 20:53  source\代码\source.iml

     文件      10970  2020-08-19 11:58  source\代码\src\ProcessMemoryController.java

     文件     972021  2020-08-19 11:55  source\文档.docx

     目录          0  2020-08-19 11:58  source\代码\.idea

     目录          0  2020-08-19 11:58  source\代码\src

     目录          0  2020-08-19 11:58  source\代码

     目录          0  2020-08-19 11:58  source

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

               989279                    10


评论

共有 条评论