Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành] Gang scheduling — xếp lượt nhóm tiến trình

    Gang Scheduling — xếp lượt cho các nhóm tiến trình

    Gang scheduling: một gang gồm nhiều thread phải chạy đồng thời trên nhiều CPU. Hệ có C CPU. Mỗi gang cần need CPU và chạy liên tục dur đơn vị thời gian. Tại một thời điểm chỉ một gang chiếm CPU (mô hình tuần tự đơn giản).

    Thuật toán

    1. Sắp các gang theo gid tăng dần (hàng đợi FIFO theo gid).
    2. Khởi tạo thời điểm t = 0. Duyệt từng gang:
      • Nếu need > C: gang không thể chạy → đánh dấu REJECT.
      • Ngược lại: gang bắt đầu tại t, chiếm CPU trong dur đơn vị → cập nhật t += dur.
    3. In gid và thời điểm bắt đầu (hoặc REJECT), cuối cùng in makespan = tổng thời gian.

    Ví dụ

    C=4. Gang1 need=2 dur=3 → bắt đầu 0, t=3. Gang2 need=4 dur=2 → bắt đầu 3, t=5. makespan=5.

    • Định dạng đầu vào:

      Dòng 1: C — số CPU. Dòng 2: n — số gang. n dòng: gid need dur.

    • Ràng buộc đầu vào:

      1 ≤ C ≤ 1000; 1 ≤ n ≤ 100; 1 ≤ need ≤ 2000; 1 ≤ dur ≤ 1000; gid phân biệt.

    • Định dạng đầu ra:

      n dòng: gid start (hoặc gid REJECT nếu need > C). Dòng cuối: makespan <giá_trị>.

    Ví dụ:

    Đầu vào:

    4
    2
    1 2 3
    2 4 2
    

    Đầu ra:

    1 0
    2 3
    makespan 5

    Giải thích:

    C=4. Gang1 (gid nhỏ) chạy trước: start=0, t=3. Gang2 need=4≤4: start=3, t=5. makespan=5.

    Đang tải editor...