Các thuật toán về hệ điều hành Xem tài liệu tại: https://ambrosentk.github.io/AlgorithmOS/ NPM Package: https://www.npmjs.com/package/algorithmos
Thư viện hiện thực các thuật toán được dùng trong hệ điều hành Gồm có các thuật toán sau:
B1: Cài đặt NodeJS B2: Trong command line nhập
npm i algorithmos
B3: Bắt đầu import và sử dụng
Process | Arrive time | CPU | IO | CPU |
---|---|---|---|---|
P1 |
1 | 2 | 1 | 3 |
P2 |
0 | 1 | 3 | 2 |
import { Algorithm as al } from './Algorithms'
//Tạo hàng đợi các tác vụ cho tiến trình
var taskQueue1 = new al.Queue<al.Task>();
taskQueue1.enQueue(new al.Task(al.TaskType.CPU, 2));
taskQueue1.enQueue(new al.Task(al.TaskType.IO, 1));
taskQueue1.enQueue(new al.Task(al.TaskType.CPU, 3));
var taskQueue2 = new al.Queue<al.Task>();
taskQueue2.enQueue(new al.Task(al.TaskType.CPU, 1));
taskQueue2.enQueue(new al.Task(al.TaskType.IO, 3));
taskQueue2.enQueue(new al.Task(al.TaskType.CPU, 2));
//Tạo danh sách các tiến trình
var procList = new Array<al.Process>();
procList.push(new al.Process("P1", 0, taskQueue1));
procList.push(new al.Process("P2", 1, taskQueue2));
//Chọn thuật toán điều phối
var scheduler = new al.FcfsScheduler(procList);
//Chọn kiểu thiết bị nhập xuất, mặc định là Multi
scheduler.IOMode = al.IOType.Single;
//Nhận kết quả trả về là một Storyboard
var story: al.Storyboard = scheduler.scheduling();
//In ra màn hình kết quả
story.Story.forEach((value: al.StoryEvent, index: number, array: al.StoryEvent[]) => {
console.log("Time: " + value.Time + "; Proc: " + value.ProcessName + "; Task: " + value.Description);
});
Kết quả thực hiện thuật toán:
Time: 0; Proc: P1; Task: [AT] Arrival
Time: 0; Proc: P1; Task: [IN] CPU
Time: 1; Proc: P2; Task: [AT] Arrival
Time: 1; Proc: P1; Task: [IN] CPU
Time: 2; Proc: P1; Task: [IN] IO
Time: 2; Proc: P2; Task: [IN] CPU
Time: 3; Proc: P2; Task: [IN] IO
Time: 3; Proc: P1; Task: [IN] CPU
Time: 4; Proc: P2; Task: [IN] IO
Time: 4; Proc: P1; Task: [IN] CPU
Time: 5; Proc: P2; Task: [IN] IO
Time: 5; Proc: P1; Task: [IN] CPU
Time: 6; Proc: P2; Task: [IN] CPU
Time: 7; Proc: P2; Task: [IN] CPU
Giải thích ý nghĩa: Mỗi một dòng là một sự kiện trong quá trình điều phối. Mỗi dòng có thời gian xảy ra sự kiện (Time), Tiến trình gây nên sự kiện (Proc), Tác vụ được làm trong sự kiện đó (Task). [AT] nghĩa là tại một thời điểm xác định. [IN] nghĩa là trong khoảng thời gian từ a đến b. VD: [IN] của 2 nghĩa là trong khoảng thời gian từ 2 đến 3.
Sơ đồ:
Tham khảo thêm trong tài liệu API