Cho kích thước trang page_size, một bảng trang (page table) ánh xạ mỗi số trang sang số khung (frame), và một địa chỉ logic addr. Hãy tính địa chỉ vật lý.
Thuật toán:
page = addr // page_size, offset = addr % page_size.page vượt quá số mục bảng trang, hoặc mục bảng trang là -1 (trang chưa được nạp) → in FAULT.frame = page_table[page]; địa chỉ vật lý = frame * page_size + offset.Ví dụ: page_size=100, bảng trang [5, 2, 7] (3 mục), addr=150. page=1, offset=50. frame=2 → phys = 2*100 + 50 = 250.
Dòng 1: page_size. Dòng 2: k (số mục bảng trang) rồi k số (mỗi số là frame của trang tương ứng, -1 nghĩa là chưa nạp). Dòng cuối: addr. (Đọc theo token.)
1 ≤ page_size ≤ 1000000; 1 ≤ k ≤ 100000; frame ≥ −1; 0 ≤ addr ≤ 10^12.
Địa chỉ vật lý (số nguyên), hoặc FAULT nếu trang không hợp lệ.
Ví dụ:
Đầu vào:
100 3 5 2 7 150
Đầu ra:
250
Giải thích:
Đang tải editor...