Tôi đang đọc "Linh hồn của một cỗ máy mới" của Tracy Kidder, nơi một nhóm tại Data General thiết kế một cỗ máy mới (tên mã là "Đại bàng", sau này được đặt tên là MV / 8000). Nó là phần mở rộng 32 bit của kiến trúc trước đó (Eclipse 16 bit). Một trong những chủ đề xoay vòng dường như là, họ không muốn tạo ra một cỗ máy với một chút chế độ và họ đã thành công trong việc này.
Tuy nhiên, nó bỏ qua cách thức đạt được điều này về mặt kỹ thuật và nó cũng không đi vào lý do tại sao nó lại hấp dẫn để tạo ra một cỗ máy không có bit chế độ. Cuốn sách không phải là một cuốn sách kỹ thuật nên có thể các chi tiết bị bóp méo bằng cách nào đó. Tuy nhiên, bạn có cảm giác khi đọc cuốn sách rằng giải pháp "bit chế độ" là phổ biến (và do đó khả thi) tại thời điểm đó, nhưng có thể được các kỹ sư cho là không hấp dẫn vì lý do thẩm mỹ. Cuốn sách cũng làm cho nó có vẻ như là một nhiệm vụ vô cùng khó khăn để tạo ra một thiết kế mà không có một chút chế độ, điều này đã được nhóm đặc biệt này khắc phục bằng cách nào đó.
Tôi tìm thấy mô tả này về cách nó đã đạt được:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Về cơ bản, nó dường như là về việc sử dụng một phần không gian opcode trước đây chưa sử dụng cho các hướng dẫn mới. Tôi phải thừa nhận rằng tôi đã hơi thất vọng vì đó là "chỉ vậy thôi". Ngoài ra tôi nghĩ rằng điều này vẫn còn một số câu hỏi chưa được trả lời:
Đầu tiên, làm thế nào các quy trình 16 bit sống trong không gian địa chỉ 32 bit? Bởi vì tôi nghĩ đó là thách thức chính trong việc tạo ra một phần mở rộng 32 bit "không có bit chế độ". Mở rộng bộ hướng dẫn, mặt khác, là một công việc tương đối phổ biến. Vì không có mô tả nào về cách nó xảy ra, người ta có thể giả sử rằng mã 16 bit chỉ đơn giản là truy cập bộ nhớ như mọi khi, nên có thể thấy một số dạng xem ảo / bị vùi lấp của bộ nhớ (với các thanh ghi CPU mới kiểm soát địa chỉ đầu tiên) hoặc một cái gì đó như thế Nhưng tôi không biết nếu có nhiều hơn thế. Trong trường hợp đó, người ta có thể lập luận rằng đó là một giải pháp "bit chế độ". Các quy trình chế độ 16 bit có thể chạy cùng với các quy trình khác nhờ các tính năng đặc biệt được thêm vào CPU.
Thứ hai, tại sao nó lại hấp dẫn để tạo ra một máy không có bit chế độ? Nhiều lợi ích được chào hàng trong cuốn sách là khách hàng muốn chạy phần mềm cũ. Nhưng điều này dường như không nói với bit chế độ, vì toàn bộ mục đích của việc sử dụng bit chế độ là để có khả năng tương thích ngược. Khi AMD mở rộng x86 lên 64 bit, ít nhất là theo sự hiểu biết của tôi về từ "bit chế độ", những gì họ đã làm là chính xác để thêm một bit chế độ. Một bit đặc biệt sẽ làm cho CPU ở chế độ 64 bit. Và một bit khác sẽ làm cho một quá trình thực thi trong "chế độ phụ" của chế độ 64 bit (để cho phép tương thích với các ứng dụng 32 bit). Bản chất của chế độ con là CPU diễn giải luồng lệnh là các lệnh 32 bit cũ nhưng các truy cập bộ nhớ 32 bit được giải quyết bằng định dạng bảng trang mới (được thiết lập bởi hệ điều hành nhận biết 64 bit) và cuối cùng ánh xạ tới không gian địa chỉ vật lý đầy đủ. Ngoài ra, mã 32 bit có thể được ưu tiên bởi mã 64 bit. Giống như giải pháp Data General, điều này cũng cho phép chương trình 32 bit chạy dọc theo các chương trình 64 bit (16 bit so với 32 bit trong trường hợp DG). Vì vậy, từ quan điểm của khách hàng dường như không có sự khác biệt nào cả. Do đó, lợi ích duy nhất có thể có được trong việc triển khai, đơn giản hóa thiết kế, nhưng cuốn sách không khiến nó nghe có vẻ như đó là mối quan tâm, vì bit chế độ được coi là phổ biến ngay cả tại thời điểm đó (và dường như các kiến trúc sau này cũng có sử dụng nó như trường hợp x64 cho thấy).
Tôi chắc chắn có điều gì đó tôi đã bỏ lỡ, vì vậy sẽ thật tuyệt nếu ai đó có thể thảo luận thêm về các chi tiết kỹ thuật và ưu điểm của thiết kế "không có chế độ bit" này.