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] Segmentation + paging — dịch địa chỉ

    Segmentation + Paging — dịch địa chỉ kết hợp

    Hệ kết hợp phân đoạn rồi phân trang: địa chỉ logic gồm (segment, offset). Trong mỗi segment, offset lại được chia thành số trang và offset trong trang (kích thước trang = page_size).

    Thuật toán dịch một địa chỉ (seg, off)

    1. Nếu seg ≥ số_segment hoặc off ≥ limit[seg] → FAULT (vượt giới hạn đoạn).
    2. Ngược lại: số trang trong đoạn pno = off // page_size, offset trong trang poff = off % page_size.
    3. Nếu pno vượt số trang của đoạn → FAULT.
    4. Lấy khung frame = page_table[seg][pno]. Địa chỉ vật lý = frame * page_size + poff.

    In kết quả mỗi truy vấn trên một dòng (số nguyên hoặc FAULT).

    Ví dụ

    page_size=100. Segment 0: limit=250, 3 trang ánh xạ khung [5, 6, 7]. Truy vấn (0, 150): 150<250 hợp lệ, pno=1, poff=50, frame=6 → phys = 6*100+50 = 650.

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

      Dòng 1: page_size. Dòng 2: nseg. Với mỗi segment: dòng limit npg rồi npg số khung. Dòng kế: q. Tiếp q dòng: seg off.

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

      1 ≤ page_size ≤ 10^6; 1 ≤ nseg ≤ 100; 0 ≤ limit ≤ 10^7; khung ≥ 0; 1 ≤ q ≤ 10^4.

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

      q dòng: địa chỉ vật lý hoặc FAULT.

    Ví dụ:

    Đầu vào:

    100
    1
    250 3
    5 6 7
    1
    0 150
    

    Đầu ra:

    650

    Giải thích:

    page_size=100. Segment 0 limit=250, khung [5,6,7]. Truy vấn (0,150): 150<250 OK; pno=1, poff=50, frame=6 → 6*100+50=650.

    Đang tải editor...