迷失北京

          BlogJava 聯(lián)系 聚合 管理
            60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

          具體的要求是這樣的:編寫(xiě)程序完成批處理系統(tǒng)中的作業(yè)調(diào)度,要求采用響應(yīng)比高者優(yōu)先的作業(yè)調(diào)度算法。實(shí)驗(yàn)具體包括:首先確定作業(yè)控制塊的內(nèi)容,作業(yè)控制塊的組成方式;然后完成作業(yè)調(diào)度;最后編寫(xiě)主函數(shù)對(duì)所作工作進(jìn)程測(cè)試。

          下面是代碼:

          JOB類:

          package com.wk.job;

          public class JOB {

          public JOB() {

          super();

          }

          // 作業(yè)名

          String name = null;

          // 作業(yè)長(zhǎng)度,所需主存大小

          int length = 0;

          // 作業(yè)執(zhí)行所需打印機(jī)的數(shù)量

          int printer = 0;

          // 作業(yè)執(zhí)行所需磁帶機(jī)的數(shù)量

          int tape = 0;

          // 作業(yè)估計(jì)執(zhí)行時(shí)間

          float runtime = 0;

          // 作業(yè)在系統(tǒng)中的等待時(shí)間

          float waittime = 0;

          public int getLength() {

          return length;

          }

          public String getName() {

          return name;

          }

          public int getPrinter() {

          return printer;

          }

          public float getRuntime() {

          return runtime;

          }

          public int getTape() {

          return tape;

          }

          public float getWaittime() {

          return waittime;

          }

          public void setLength(int length) {

          this.length = length;

          }

          public void setName(String name) {

          this.name = name;

          }

          public void setPrinter(int printer) {

          this.printer = printer;

          }

          public void setRuntime(float runtime) {

          this.runtime = runtime;

          }

          public void setTape(int tape) {

          this.tape = tape;

          }

          public void setWaittime(float waittime) {

          this.waittime = waittime;

          }

          }

          這是Client測(cè)試類:
          package com.wk.client;
          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.util.ArrayList;
          import java.util.Collections;
          import java.util.List;
          import com.wk.job.*;
          public class Client {
          // 定義裝載作業(yè)的容器
          static List<JOB> jobs = new ArrayList<JOB>();
          // 記錄響應(yīng)比
          static float xk = 0;
          // 記錄當(dāng)前的作業(yè)記錄相應(yīng)時(shí)間比
          static float k = 0;
          // 作業(yè)調(diào)度函數(shù)
          static void shedule(JOB job, long memory, int tape, int printer) {
          // 系統(tǒng)可用資源是否滿足作業(yè)需求
          if (job.getLength() <= memory && job.getTape() <= tape
          && job.getPrinter() <= printer) {
          xk = job.getWaittime() / job.getRuntime();
          // 如果這是第一個(gè)進(jìn)入容器的作業(yè)
          if (jobs.size() == 0) {
          k = xk;
          jobs.add(job);
          } else {
          if (k > xk) { // 如果這不是第一個(gè)進(jìn)入容器的作業(yè),則和第一個(gè)作業(yè)比較
          jobs.add(job);
          } else {
          k = xk;
          jobs.add(job);
          Collections.swap(jobs, 0, jobs.size()-1); // 交換兩個(gè)作業(yè)的執(zhí)行順序
          }
          }
          } else {
          System.out.println("error");
          }
          }
          public static void main(String[] args) {
          // 系統(tǒng)可容納作業(yè)的個(gè)數(shù)
          int n = 3;
          // 定義一個(gè)作業(yè)集
          // List<JOB> jobs = new ArrayList<JOB>();
          // 系統(tǒng)中磁帶機(jī)數(shù)量
          int tape = 4;
          // 系統(tǒng)打印機(jī)的數(shù)量
          int printer = 3;
          // 系統(tǒng)內(nèi)存
          long memory = 65536;
          // 定義一個(gè)作業(yè)
          JOB job = null;
          // 定義輸入流
          BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
          for (int i = 0; i < n; i++) {
          try {
          //實(shí)例化一個(gè)作業(yè)
          job = new JOB();
          System.out.println("------------------");
          job.setName(bf.readLine());
          System.out.println("輸入作業(yè)名稱:" + job.getName());
          job.setLength(Integer.parseInt(bf.readLine()));
          System.out.println("輸入作業(yè)使用內(nèi)存大小:" + job.getLength());
          job.setTape(Integer.parseInt(bf.readLine()));
          System.out.println("輸入作業(yè)使用磁帶機(jī)數(shù):" + job.getTape());
          job.setPrinter(Integer.parseInt(bf.readLine()));
          System.out.println("輸入作業(yè)打印機(jī)數(shù):" + job.getPrinter());
          job.setWaittime(Integer.parseInt(bf.readLine()));
          System.out.println("輸入作業(yè)等待時(shí)間:" + job.getWaittime());
          job.setRuntime(Integer.parseInt(bf.readLine()));
          System.out.println("輸入作業(yè)估計(jì)執(zhí)行時(shí)間:" + job.getRuntime());
          // 調(diào)用函數(shù)
          Client.shedule(job, memory, tape, printer);
          } catch (IOException e) {
          System.out.println("輸入內(nèi)容不允許為空!!");
          }
          }
          System.out.println("當(dāng)前執(zhí)行的程序?yàn)?:" + jobs.get(0).getName());
          // 為第一個(gè)作業(yè)分配資源
          memory = memory - jobs.get(0).getLength();
          System.out.println("系統(tǒng)剩余內(nèi)存:" + memory);
          tape = tape - jobs.get(0).getTape();
          System.out.println("系統(tǒng)剩余磁帶機(jī):" + tape);
          printer = printer - jobs.get(0).getPrinter();
          System.out.println("系統(tǒng)剩余打印機(jī):" + printer);
          }
          }
          經(jīng)過(guò)測(cè)試上面的代碼是沒(méi)有錯(cuò)誤的!!下面說(shuō)一下自己在寫(xiě)代碼的時(shí)候的感想:
          1.好多東西想的總是好的,但是真正的用著二十四個(gè)英文字母表達(dá)的時(shí)候是很費(fèi)力的。所以建議向我們這樣的初學(xué)者要經(jīng)常敲代碼,經(jīng)常寫(xiě)東西。這樣自己才能進(jìn)步更快。
          2.向List容器插入數(shù)據(jù)時(shí),是按順序逐步插入的。檢點(diǎn)通俗點(diǎn)說(shuō)就是按插入的順序誰(shuí)先插入誰(shuí)占第一個(gè)位置。好像很簡(jiǎn)單,但是在寫(xiě)這個(gè)東西時(shí),自己是不知道的。相信還有好多人也不太清楚。

           

          posted on 2010-09-22 14:23 王康 閱讀(312) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 高清| 额尔古纳市| 皮山县| 保德县| 隆德县| 柳河县| 开封市| 广南县| 宕昌县| 乌鲁木齐县| 福泉市| 凤山市| 陈巴尔虎旗| 内黄县| 日照市| 西贡区| 定日县| 哈巴河县| 抚宁县| 融水| 榆中县| 汉川市| 富锦市| 淳化县| 洞头县| 临安市| 榆中县| 牡丹江市| 静海县| 惠东县| 同仁县| 北安市| 甘泉县| 高邑县| 兴城市| 平顺县| 滨州市| 龙南县| 福清市| 德格县| 云南省|