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] Slab allocator — thống kê cấp phát

    Slab Allocator — thống kê cấp phát đối tượng

    Slab allocator quản lý bộ nhớ theo các slab (mỗi slab = slab_size byte) chia thành các object bằng nhau (obj_size byte). Số object mỗi slab = slab_size // obj_size.

    Thuật toán

    • ALLOC: tìm slab đầu tiên (theo thứ tự tạo) còn chỗ trống, cấp 1 object trong đó. Nếu không slab nào còn chỗ → tạo slab mới rồi cấp.
    • FREE: giải phóng object được cấp sớm nhất còn sống (FIFO theo thứ tự ALLOC), giảm số object đang dùng của slab tương ứng. Slab rỗng vẫn được giữ lại (không hủy).

    Sau q thao tác, in:

    • Dòng 1: số object mỗi slab.
    • Dòng 2: tổng_slab số_object_đang_dùng số_ô_trống (ô trống = tổng sức chứa − đang dùng).

    Ví dụ

    slab_size=64, obj_size=16 → 4 object/slab. Thao tác ALLOC ALLOC → 1 slab, 2 object dùng, 2 ô trống. In 4 rồi 1 2 2.

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

      Dòng 1: slab_size. Dòng 2: obj_size. Dòng 3: q. Tiếp theo q token thao tác: ALLOC hoặc FREE.

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

      1 ≤ obj_size ≤ slab_size ≤ 10^6; obj_size chia hết được; 1 ≤ q ≤ 10^4.

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

      Dòng 1: số object mỗi slab. Dòng 2: tổng_slab object_đang_dùng số_ô_trống.

    Ví dụ:

    Đầu vào:

    64
    16
    2
    ALLOC ALLOC
    

    Đầu ra:

    4
    1 2 2

    Giải thích:

    4 object/slab. ALLOC tạo slab0 (1 obj). ALLOC thứ hai vào slab0 (2 obj). 1 slab, 2 dùng, sức chứa 4 → 2 ô trống. In `4` và `1 2 2`.

    Đang tải editor...