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ô phỏng vòng đời tín hiệu đầy đủ

    Mô phỏng vòng đời tín hiệu đầy đủ

    Mô phỏng một tiến trình xử lý các sự kiện theo thứ tự. Trạng thái ban đầu: RUNNING, mask rỗng, pending rỗng. Quy tắc (dùng hành động mặc định, KHÔNG handler):

    • BLOCK n / UNBLOCK n: thêm/bỏ n khỏi mask. SIGKILL(9), SIGSTOP(19) không thể chặn (BLOCK 9/19 bị bỏ qua).
    • Khi UNBLOCK n: nếu n đang pending, giao ngay theo thứ tự (xem xử lý SIG bên dưới) rồi xóa khỏi pending.
    • SIG n: nếu tiến trình đã TERMINATED → bỏ qua. Nếu n bị chặn (và không phải 9/19) → đưa vào pending (không trùng). Ngược lại giao ngay:
      • Term/Core → TERMINATED.
      • Stop → nếu RUNNING thì STOPPED.
      • Cont → nếu STOPPED thì RUNNING.
      • Ign → không đổi.

    In trạng thái cuối, rồi tập pending còn lại (tăng dần, cách nhau dấu cách; nếu rỗng in dòng trống).

    Số hiệu Tên Hành động mặc định
    1 SIGHUP Term
    2 SIGINT Term
    3 SIGQUIT Core
    9 SIGKILL Term
    10 SIGUSR1 Term
    11 SIGSEGV Core
    12 SIGUSR2 Term
    13 SIGPIPE Term
    14 SIGALRM Term
    15 SIGTERM Term
    17 SIGCHLD Ign
    18 SIGCONT Cont
    19 SIGSTOP Stop
    20 SIGTSTP Stop

    Ví dụ

    Xem test mẫu.

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

      Nhiều dòng sự kiện BLOCK n / UNBLOCK n / SIG n.

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

      Số sự kiện ≤ 2000.

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

      Dòng 1: trạng thái cuối. Dòng 2: pending tăng dần (hoặc trống).

    Ví dụ:

    Đầu vào:

    BLOCK 15
    SIG 15
    SIG 2
    UNBLOCK 15
    

    Đầu ra:

    TERMINATED

    Giải thích:

    SIG 15 bị chặn → pending. SIG 2 (Term) giao ngay → TERMINATED. UNBLOCK 15 giao 15 nhưng đã TERMINATED nên bỏ qua; pending rỗng.

    Đang tải editor...