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] CFS — chọn tiến trình theo vruntime

    CFS — chọn tiến trình theo vruntime

    Completely Fair Scheduler (CFS) chọn tiến trình có vruntime (thời gian ảo đã chạy) nhỏ nhất. Tiến trình có trọng số (weight) lớn hơn thì vruntime tăng chậm hơn nên được CPU nhiều hơn.

    Thuật toán

    • Mọi tiến trình bắt đầu vruntime = 0. Hằng SLICE = 10. base = trọng số của tiến trình đầu tiên trong input.
    • Lặp rounds lượt. Mỗi lượt:
      1. Chọn tiến trình có vruntime nhỏ nhất; nếu bằng nhau chọn pid nhỏ hơn.
      2. Ghi pid vào thứ tự chạy.
      3. Cập nhật vruntime += (SLICE * base) // weight (chia nguyên).

    In thứ tự chạy (các pid) và vruntime cuối cùng của từng tiến trình (theo pid tăng dần).

    Ví dụ

    2 tiến trình pid1 w=1, pid2 w=2. base=1. Lượt 1: cả hai vr=0 → chọn pid1 (pid nhỏ), pid1.vr += 101//1 = 10. Lượt 2: pid1=10, pid2=0 → chọn pid2, pid2.vr += 101//2 = 5.

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

      Dòng 1: n. n dòng: pid weight. Dòng cuối: rounds.

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

      1 ≤ n ≤ 50; 1 ≤ weight ≤ 1000; 1 ≤ rounds ≤ 1000.

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

      Dòng 1: thứ tự rounds pid được chọn. Tiếp n dòng: pid vruntime theo pid tăng dần.

    Ví dụ:

    Đầu vào:

    2
    1 1
    2 2
    4
    

    Đầu ra:

    1 2 2 1
    1 20
    2 10

    Giải thích:

    base=1, SLICE=10. L1: pid1 (vr0), pid1.vr=10. L2: pid2 (vr0), pid2.vr=5. L3: pid2 (5<10), pid2.vr=10. L4: pid1 (10 vs10, pid nhỏ) →pid1, pid1.vr=20. Thứ tự: 1 2 2 1.

    Đang tải editor...