2015-11-20 11 views
7

Trong tệp nguồn lắp ráp bộ nạp khởi động của Linux 0,01, dòng A20 được bật.Tại sao bật đường A20 ở Chế độ được bảo vệ?

Từ boot/boot.s:

| that was painless, now we enable A20 

call  empty_8042 
mov al,#0xD1 

... 

Sau đó bootloader nhảy vào Protected Mode.

Trong chế độ thực, cho phép dòng A20 cấp cho chúng tôi một mở rộng vùng địa chỉ 64 KiB - 16 byte.
Ở chế độ được bảo vệ, bus địa chỉ được mở khóa tự động.

Tại sao bộ nạp khởi động bật dòng địa chỉ A20 khi bước nhảy tới Chế độ được bảo vệ sẽ làm điều đó?

Trả lời

10

Trong chế độ thực, cho phép dòng A20 cấp cho chúng tôi mở rộng không gian địa chỉ 64 KiB - 16 byte.

Đúng, trong Bất Mode (trên 286+), bạn có thể thiết lập một thanh ghi phân đoạn để 0xFFFF, mà sẽ cho phép bạn truy cập vào bộ nhớ lên đến (0xFFFF << 4) + 64K.

Ở chế độ được bảo vệ, bus địa chỉ được mở khóa tự động.

Chế độ được bảo vệ là chế độ CPU, vì vậy nó không "mở khóa" bus, nó chỉ cho phép sử dụng không gian địa chỉ bổ sung, yêu cầu thêm ghim trên bus địa chỉ.

Tại sao bộ nạp khởi động bật đường địa chỉ A20 khi bước nhảy tới Chế độ được bảo vệ sẽ làm điều đó?

Vì không. "A20" thường đề cập đến một hack phần cứng, được thêm vào trong PC-AT, mà cần phải được vô hiệu hóa trước khi chế độ bảo vệ sẽ hoạt động như mong đợi.

Đầu tiên, nhớ lại rằng CPU cũ (thông qua 80186) chỉ có thể truy cập tới 1 MiB bộ nhớ, và do đó có 20 dòng địa chỉ (A0 - A19). Một số phần mềm rất cũ đã tận dụng thực tế là bộ nhớ truy cập trên 1 MiB sẽ quấn vào bộ nhớ thấp hơn. Khi 286 thêm nhiều dòng địa chỉ, IBM không muốn phá vỡ khả năng tương thích với phần mềm cũ này, vì vậy họ đã không thể tưởng tượng được: Họ đặt một cổng bên ngoài ở dòng địa chỉ thứ 21 (A20) và bên trái nó tắt theo mặc định, kích hoạt lại hành vi bọc xung quanh, vì vậy phần mềm cũ sẽ vẫn hoạt động chính xác. Vì vậy, bản thân 286 không biết gì về hack này - nó nằm ngoài CPU. Đối với CPU, A20 không khác với bất kỳ dòng địa chỉ nào khác.

Cổng này, (cổng A20), được điều khiển bằng pin GPIO trên bộ điều khiển bàn phím IC. Vì vậy, bạn cần phải kích hoạt nó trước khi đi vào chế độ bảo vệ. Nếu bạn không, (và nói rằng bạn ánh xạ phẳng tất cả 4GB bộ nhớ vật lý), sau đó là Micheal Petch indicated, "mọi vùng megabyte được đánh số lẻ sẽ không thể truy cập được. Vì vậy, 1mb-2mb sẽ thực sự tham chiếu 0-1mb, 3mb-4mb sẽ tham chiếu 2mb-3mb, v.v." Xem thêm:

+0

1. Vì vậy, chế độ bảo vệ sẽ không cho phép A20 nhưng tất cả các dòng địa chỉ khác liên quan đến chế độ (16-bit -> A0 - A23, 32 -bit -> A0 - A31), phải không? 2. Theo như tôi có thể nói, "'A20 line' [...] cần được tắt trước khi chế độ được bảo vệ sẽ hoạt động như mong đợi" và "bạn cần bật nó [ A20 dòng] trước khi đi vào chế độ bảo vệ "mâu thuẫn nhau. Bạn có thể làm rõ rằng, xin vui lòng? 3. Những gì bạn có nghĩa là" Điều này là không chính xác. " – Downvoter

+0

@cad Cổng A20 là một * bên ngoài * hack. không cho các nhà thiết kế PC-AT của IBM thêm nó, chúng tôi sẽ không có conve này ngày hôm nay. Bản thân 286 không xử lý A20 khác nhau. ** 2. ** Tôi đã nói rằng "hack" đó là A20 wraparound cần phải được vô hiệu hóa ... bằng cách cho phép các cổng A20. –

+0

OK, cảm ơn. Về "sự thiếu chính xác", tôi đã nói rõ ràng chế độ Real bởi vì tôi nghĩ rằng nó có thể giải quyết chỉ 1 MiB + 64 KiB - 10 byte anyway nhưng Unreal Mode chỉ đến tâm trí của tôi. Với "mở khóa", đó chỉ là thuật ngữ sai tôi nghĩ. BTW, tôi nghĩ rằng bạn có một số không quá nhiều trong những gì được cho là bắt đầu của MiB thứ hai của RAM. – Downvoter

Các vấn đề liên quan