Tôi thấy trong nhiều nhiều oses (và một số bộ tải khởi động), tất cả đều vô hiệu hóa ngắt (cli
) trước khi chuyển sang chế độ bảo vệ từ chế độ thực. Tại sao chúng ta cần làm điều đó?Tại sao ngắt cần phải được tắt trước khi chuyển sang chế độ bảo vệ từ chế độ thực?
Trả lời
BIOS sử dụng ngắt PIT (IRQ0) để theo dõi thời gian. Ngay khi bạn vào chế độ được bảo vệ, xử lý ngắt chế độ thực không còn giá trị; CPU ở chế độ được bảo vệ yêu cầu IDT chế độ bảo vệ (Bảng mô tả ngắt). Khi vào chế độ bảo vệ, giới hạn IDT trong IDTR (IDT Register) được đặt thành 0 (bất kỳ số ngắt nào làm cho CPU tạo ra ngoại lệ), vì vậy ngay sau khi PIT (hoặc bất kỳ thứ gì khác) tạo ra ngắt, CPU sẽ tạo ra một ngoại lệ, sẽ tạo một ngoại lệ khác, kích hoạt #DF (lỗi kép) và, do hậu quả, #TF (lỗi ba).
Ngoài ra, IRQ0 xảy ra ở chế độ được bảo vệ sẽ kích hoạt #DE (chia ngoại lệ) ISR (gián đoạn dịch vụ thường xuyên), vì các vectơ ngắt từ 0 đến 31 được dành riêng cho ngoại lệ trong chế độ được bảo vệ. Vì vậy, (có thể xảy ra nhất, vì các ngắt khác hơn PIT cũng có thể xảy ra) thứ tự xảy ra như thế này (lưu ý: giả định rằng ngắt PIT sẽ được kích hoạt trước, nhưng, như tôi đã nói trước đây, nó có thể về cơ bản là bất kỳ gián đoạn nào, mỗi lỗi sẽ dẫn đến lỗi #DF và triple):
- bit PE được đặt trong CR0.
- Ngắt PIT xảy ra, PIC (Bộ điều khiển ngắt lập trình) nhận tín hiệu trên chân của nó # 0.
- Tính năng sao chép PIC không được đặt, vì vậy nó kích hoạt IRQ0 trên CPU.
- IRQ0 (= #DE) cố thực hiện trình xử lý ngắt, nhưng giới hạn IDT là 0, vì vậy (IIRC) #GP (Lỗi bảo vệ chung) được tạo.
- Giới hạn của IDT là 0, vì vậy #DF được tạo.
- Giới hạn của IDT là 0, vì vậy #TF được tạo.
- CPU dừng hoặc khởi động lại.
- 1. "gọi" sau khi chuyển sang Chế độ được bảo vệ
- 2. Tắt chế độ bảo vệ màn hình/chế độ ngủ thông qua một trang web
- 3. Chuyển từ xa sang chế độ xem
- 4. Cách chuyển Mẫu từ chế độ xem sang chế độ xem một phần?
- 5. chế độ hạt nhân và bảo vệ bộ nhớ
- 6. Chuyển hình ảnh từ một chế độ xem sang một chế độ xem khác
- 7. Phát hiện chế độ bảo vệ Vista IE7 với Javascript
- 8. Làm cách nào để phát hiện khi thiết bị chuyển từ chế độ dọc sang chế độ ngang?
- 9. Cách khôi phục chế độ xem trước máy ảnh từ chế độ ngủ?
- 10. Cách tìm Chiều rộng của chế độ xem trước khi chế độ xem được hiển thị?
- 11. Hoạt ảnh: Cách làm cho UIbutton di chuyển từ phải sang trái khi chế độ xem được tải?
- 12. Cách chuyển sang chế độ REPLACE ở VIM
- 13. Làm cách nào để tắt chế độ COMMAND hoặc chế độ VISUAL trong Chế độ tuyệt vời?
- 14. Làm cách nào để chuyển đổi chế độ xem từ trong chế độ xem?
- 15. Phát triển Android chuyển sang chế độ hiển thị TextView
- 16. Chế độ xem không quay sang chế độ ngang sau khi cập nhật iOS6
- 17. Chuyển đổi CGPoints từ chế độ xem này sang chế độ xem khác tương đối với hoạt ảnh
- 18. Tại sao khung thực thể tạo truy vấn phụ khi chọn từ chế độ xem?
- 19. Chuyển sang chế độ siêu người dùng trong phiên vim
- 20. Tại sao AVAudioPlayer tự động tiếp tục phát sau khi applcation đến từ chế độ nền?
- 21. Cần phải thực hiện hàng ở chế độ bình thường sau khi cập nhật
- 22. Hoạt động OnCreate được gọi khi điện thoại chuyển sang chế độ ngủ
- 23. Mục đích của phân đoạn đăng ký ở chế độ được bảo vệ x86 là gì?
- 24. Làm cách nào để biết khi nào Windows đang chuyển sang chế độ ngủ hoặc chế độ Ngủ đông?
- 25. văn bản cao cấp 2 - cách chuyển từ chế độ lệnh MULTI CURSOR sang chế độ chèn
- 26. Chuyển biến từ android sang JavaScript được khởi chạy trong chế độ xem web
- 27. Tại sao các tệp đôi khi chuyển sang chế độ chỉ đọc sau khi lưu trong Visual Studio?
- 28. Tắt chế độ nghiêm ngặt của MySQL
- 29. ios6 Sự cố xoay vòng từ chế độ ngang sang chế độ dọc
- 30. Làm cách nào để khôi phục từ máy tính khách WebSocket chuyển sang chế độ ngủ hoặc ứng dụng chuyển sang chế độ nền (Safari trên iPad)
Cảm ơn câu trả lời tuyệt vời! –
IRQ0 sẽ không kích hoạt #DE - nó sẽ kích hoạt #DF bởi vì mặc định PICQ0 của PIC được ánh xạ tới INT 8 bởi BIOS. – Ruslan
@Ruslan Điều đó nghe hoàn toàn tùy ý. Bất kỳ BIOS có thể remap nó trong bất kỳ cách nào nó muốn. Ngoài ra nó không hoàn toàn có liên quan ở đây - bất kỳ vector nào khác hơn #DF hoặC#TF sẽ kích hoạt #DF, #DF sẽ kích hoạt #TF, và #TF, well ... sẽ chỉ nhảy thẳng đến 7. Btw. những gì BIOS remaps cho rằng vector cụ thể? Có bất kỳ tham chiếu nào về điều đó hay chỉ là một giá trị được tìm thấy bằng thử nghiệm? – Griwes