採取高響應比優先類比批處理作業系統中的作業調度

來源:互聯網
上載者:User

具體的要求是這樣的:編寫程式完成批處理系統中的作業調度,要求採用響應比高者優先的作業調度演算法。實驗具體包括:首先確定作業控制塊的內容,作業控制塊的組成方式;然後完成作業調度;最後編寫主函數對所作背景工作處理序測試。

下面是代碼:

JOB類:

package com.wk.job;

public class JOB {

public JOB() {

super();

}

// 作業名

String name = null;

// 作業長度,所需主存大小

int length = 0;

// 作業執行所需印表機的數量

int printer = 0;

// 作業執行所需磁帶機的數量

int tape = 0;

// 作業估計執行時間

float runtime = 0;

// 作業在系統中的等待時間

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.