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 Unix] Đếm số lượt CPU mỗi tiến trình nhận (CFS)

    Công bằng theo tỉ lệ qua nhiều lượt

    Mô phỏng CFS qua k lượt, mỗi lượt 1 tick. Mọi tiến trình bắt đầu vruntime = 0. Mỗi lượt chọn tiến trình có vruntime nhỏ nhất (hòa → PID nhỏ), cho nó chạy 1 tick rồi cộng vruntime += 1024 / weight. Sau k lượt, đếm xem mỗi tiến trình được chạy bao nhiêu lượt. Tiến trình weight lớn (nice thấp) sẽ nhận nhiều lượt hơn theo đúng tỉ lệ trọng số.

    In từng PID (tăng dần) kèm số lượt nó được chạy.

    Ví dụ

    Input:

    2 4
    1 0
    2 0
    

    Output:

    1 2
    2 2
    

    Hai tiến trình cùng weight nên chia đều 2-2.

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

      Dòng đầu: n k. Mỗi dòng tiếp theo: PID nice.

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

      1 ≤ n ≤ 50; 1 ≤ k ≤ 10000; -20 ≤ nice ≤ 19.

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

      Với mỗi PID (tăng dần) in PID số_lượt.

    Ví dụ:

    Đầu vào:

    2 4
    1 0
    2 0
    

    Đầu ra:

    1 2
    2 2

    Giải thích:

    Cùng weight 1024: vruntime tăng đều nên luân phiên, sau 4 lượt mỗi PID được 2 lượt.

    Đang tải editor...