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] Pipe - Byte bị chặn chờ ghi khi buffer đầy

    Pipe blocking: byte chờ ghi

    Pipe có sức chứa C byte. Khi tiến trình ghi W k, nó cố đẩy k byte vào pipe. Nếu pipe không đủ chỗ, phần dư không bị bỏ mà nằm chờ (tiến trình bị blocking); phần này được tích lũy vào "hàng chờ ghi".

    Thao tác R k đọc min(k, byte trong pipe) byte ra. Mỗi lần sau một thao tác, nếu pipe còn chỗ trống và hàng chờ ghi còn byte, thì byte chờ được nạp vào pipe cho tới khi đầy hoặc hết byte chờ.

    In hai số: số byte hiện trong pipe và số byte còn đang chờ ghi (chưa vào được pipe), sau khi xử lý hết.

    Ví dụ

    C=5: W 8 → ghi 5 vào pipe, 3 chờ. R 2 → đọc 2 (pipe=3), nạp 2 byte chờ (pipe=5, chờ=1). Kết quả 5 1.

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

      Dòng đầu: C n. n dòng tiếp theo: W k hoặc R k.

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

      1 ≤ C ≤ 10^6, 1 ≤ n ≤ 1000, 1 ≤ k ≤ 10^6.

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

      Hai số nguyên cách nhau bởi dấu cách: số byte trong pipe và số byte đang chờ ghi.

    Ví dụ:

    Đầu vào:

    5 2
    W 8
    R 2
    

    Đầu ra:

    5 1

    Giải thích:

    W8: pipe=5, chờ=3. R2: pipe=3 rồi nạp 2 → pipe=5, chờ=1.

    Đang tải editor...