CPU 32 hoặc 64 bit có sử dụng địa chỉ phân đoạn trên Linux không?


0

CPU 32 hoặc 64 bit có sử dụng địa chỉ phân đoạn trên Linux không? Tôi biết trên các CPU cũ hơn như phân đoạn 8086 được sử dụng để đánh địa chỉ bộ nhớ nhưng không chắc phương pháp này được sử dụng trên CPU 32 bit hay 64 bit cho hệ điều hành Linux.

Câu trả lời:


4

Ban đầu (trước phân khúc 286) chủ yếu là một bản hack được thiết kế để có thể xử lý hơn 64KB trên CPU 16 bit. Trong 286 phân đoạn chế độ được bảo vệ đã được mở rộng để giới thiệu bảo vệ và mở rộng bộ nhớ vật lý được hỗ trợ từ 1MB đến 16MB. Nhưng CPU vẫn chỉ có các thanh ghi 16 bit, điều đó có nghĩa là bất kỳ khối dữ liệu liền kề nào lớn hơn 64KB đều gặp vấn đề khi xử lý.

Tất cả điều đó đã thay đổi với sự ra đời của 386. Các thanh ghi CPU được mở rộng lên 32 bit và phân trang được thêm vào như một tính năng mới. Phân trang là một cách mạnh mẽ hơn nhiều để ánh xạ giữa các địa chỉ logic và vật lý so với những gì có thể đạt được với phân đoạn.

Linux ban đầu được thiết kế cho 386 và sử dụng tính năng phân trang. Việc sử dụng phân đoạn của Linux là tối thiểu, một số cài đặt bảo vệ được kiểm soát thông qua các mô tả phân đoạn, điều đó có nghĩa là bạn không thể hoàn toàn tránh được nhu cầu phân đoạn. Nhưng Linux sẽ cấu hình tất cả các phân đoạn để bắt đầu tại địa chỉ 0.

Nói cách khác: Linux không bao giờ sử dụng địa chỉ phân đoạn. Nó chỉ được sử dụng phân đoạn vì điều đó là cần thiết để kiểm soát một số tính năng bảo vệ.

Khi AMD thiết kế CPU 64 bit, họ đã quyết định rằng một số tính năng lịch sử sẽ không được hỗ trợ ở chế độ 64 bit. Một trong những điều họ đã làm là thực thi một địa chỉ bắt đầu phân khúc bằng 0. Vì vậy, tại thời điểm đó, các địa chỉ được phân đoạn không còn được hỗ trợ bởi cả phần cứng lẫn phần mềm.

Nếu bạn chạy CPU hiện đại ở chế độ 16 hoặc 32 bit, nó vẫn hỗ trợ các địa chỉ được phân đoạn để tương thích ngược. Nhưng ở chế độ 64 bit, bạn chỉ có địa chỉ tuyến tính 64 bit và phân trang.


Tóm tắt tốt đẹp của những điều cơ bản. Và để làm cho điều này rõ ràng hơn nữa: Bất kỳ HĐH 64 bit nào (không chỉ Linux) đều không có phân đoạn vì CPU không thể làm điều đó. Đối với HĐH 32 bit: một số vẫn sử dụng phân đoạn để tương thích ngược với mã kế thừa cụ thể (Linux, Windows trước 10), trong khi các HĐH khác đã hoàn toàn loại bỏ nó. Ví dụ: Window 10 32-bit vẫn tồn tại (như một hệ điều hành đẹp cho một số nền tảng phần cứng hạn chế), nhưng AFAIK không có / cần khả năng tương thích ngược ở cấp độ này và không hỗ trợ nữa.
Tonny

0

8086 không thực sự có MMU tương đương với những gì CPU x86 hiện đại làm được; với 386 trở đi, mọi thứ đã hoàn toàn khác:

  • tùy ý nhiều vùng nhớ ảo
  • bảng trang để ánh xạ
  • Bảng trang lồng nhau chỉ để làm cho mọi thứ hoạt động dễ dàng hơn
  • các hình thức ảo hóa khác

Đây là một chủ đề khá phức tạp và tôi không nghĩ rằng một tổng quan ngắn gọn về kiến ​​trúc quản lý bộ nhớ x86 chỉ có thể được đưa ra trong một câu trả lời siêu người dùng. Tuy nhiên, phân khúc không phải là một trong những thuật ngữ người ta sẽ sử dụng để mô tả kiến ​​trúc đó. Tôi e rằng tôi chỉ có thể yêu cầu bạn đọc một bài viết về 386 và thiết kế hệ điều hành cho x86.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.