Bạn có thể chạy một bộ xử lý lớp x86 không cần ram?


9

Bộ xử lý x86 hiện đại có ít nhất 512K bộ đệm L2. Có những ứng dụng hoàn toàn phù hợp với lượng bộ nhớ này. Bạn có thể chạy các chip này mà không có RAM kèm theo không? Nếu vậy, có cách nào để làm điều đó giúp loại bỏ hình phạt thời gian ghi lại khi CPU cố gắng duy trì sự kết hợp RAM?

Tôi không có một ứng dụng cụ thể nào trong đầu, đó chỉ là sự tò mò nhàn rỗi. Tôi chắc chắn rằng ở đâu đó có một ứng dụng thích hợp nơi điều này sẽ hữu ích.

Câu trả lời:


12

Có bạn có thể. Bằng cách giả mạo đọc từ các vị trí bộ nhớ vật lý liên tiếp (không tồn tại), bạn đặt các thẻ trong bộ đệm. Sau đó, bạn tắt tiếp tục điền vào các bộ đệm và nhập dữ liệu, do đó hạn chế đọc / ghi vào bộ đệm và nó sẽ hoạt động như một RAM bình thường.

Một số dự án thay thế bios thực hiện điều này bởi vì sau đó bạn có thể dành nhiều mã hơn cho thiết lập bộ điều khiển bộ nhớ chipset và chipset, vì vậy bạn có thể viết nó bằng C chẳng hạn.

Cách thực hành này được sử dụng rộng rãi cho các CPU lớp nhúng cũng như để xử lý các bộ tải khởi động. Các phương pháp để biến bộ đệm thành chế độ giống như RAM thay đổi một chút.

Đối với một giới thiệu cấp thấp ngắn gọn, bạn có thể xem bài trình bày này.

Lưu ý rằng như những người khác đã chỉ ra, bạn vẫn cần phải tải mã khởi động từ một nơi nào đó rõ ràng.


Trên thực tế, tôi nghĩ rằng khá nhiều tất cả các BIOS hiện đại đều sử dụng điều này và gần như tất cả các CPU x86 hiện đại đều có hỗ trợ chính thức cho nó vì lý do đó.
Yuhong Bao

7

Khi CPU hết thiết lập lại, bộ nhớ cache sẽ bị tắt. BIOS là những gì ban đầu cấu hình và xóa bộ nhớ cache. Vì vậy, không, bạn không thể chạy nó ít RAM hơn vì không có RAM để khởi động mọi thứ ngay từ đầu.


1
Không thể một vài hướng dẫn đầu tiên từ ROM khởi tạo và bật bộ đệm, mà không sử dụng RAM?
Đánh dấu tiền chuộc

1
@Mark Ransom Bộ xử lý Intel hiện đại (và nhiều CPU khác) sử dụng Flash nối tiếp để lưu trữ BIOS. Nhưng nó không thể thực thi mã từ flash nối tiếp. Thay vào đó, CPU sao chép flash nối tiếp này vào RAM và sau đó thực thi nó.

Hah, sự thiếu hiểu biết của tôi đang thể hiện - bạn có thể thấy đã bao nhiêu năm kể từ khi tôi thực hiện thiết kế phần cứng. Vì vậy, CPU sao chép flash tự động trước khi lệnh đầu tiên được thực thi? Đó sẽ là một vấn đề gà / trứng khó chịu để khắc phục.
Đánh dấu tiền chuộc

@David Nói đúng ra, nó không phải là flash 'nối tiếp' mà là 'Hub phần mềm'. Điều này khác với 'nối tiếp' ở chỗ nó chuyển 4 bit cùng một lúc thay vì 1.
Majenko

1
@Mark Ransom Có nhiều CPU / MCU / DSP sẽ khởi động qua một liên kết nối tiếp (Flash nối tiếp, RS-232, SPI, v.v.). Tất cả đều thực hiện điều này bằng cách có một ROM nhỏ bên trong CPU mà nó khởi động từ đó và mã đó sẽ tải mã "thực" từ bất cứ đâu. Về mặt lý thuyết, việc chạy một hệ thống ít RAM có thể có thể bằng cách Intel sửa đổi mã này để sử dụng bộ đệm thay vì RAM ngoài. Nhưng tôi nghi ngờ Intel sẽ làm điều này.

3

Tôi không biết chính xác điều này như thế nào, nhưng đây là những suy nghĩ của tôi:

Tôi không nghĩ có bất kỳ cách nào bạn có thể có quyền truy cập theo chương trình vào bộ đệm. Bạn không thể đảm bảo từ một hướng dẫn đến hướng dẫn tiếp theo trong bộ đệm và vị trí của nó, vì vậy bạn không thể sử dụng nó một cách đáng tin cậy như RAM ngay cả khi bạn có thể truy cập trực tiếp.

Bạn có thể chạy x86 mà không cần RAM, nhưng bạn sẽ không thể làm cho nó hoạt động được nhiều hữu ích. Bạn sẽ bị hạn chế sử dụng hoàn toàn các thanh ghi nội bộ để lưu trữ dữ liệu.


2
Các giao thức điền và xóa bộ đệm được ghi lại kỹ lưỡng và có thể cấu hình trong hầu hết các CPU bao gồm x86. Nội dung bộ đệm không được tuôn ra một cách ngẫu nhiên giữa các hướng dẫn. Xem câu trả lời của tôi về cách bạn thường thiết lập nó để hoạt động như RAM tuyến tính.
Bjorn Wesen

Tôi đã viết một tiện ích trình tải hex cho bản sao 80x86 sẽ hoạt động chính xác mà không cần RAM; IIRC, tôi đã triển khai ngăn xếp cuộc gọi một cấp bằng SP để giữ địa chỉ trả về. Vì ROM nằm trên cùng một bus với RAM, nên rất có khả năng sẽ có một vấn đề khiến ROM hoạt động khi RAM không hoạt động, nhưng trong trường hợp như vậy, trình tải có thể chẩn đoán sự cố. Trên một số micros khác có bus mã bên ngoài nhưng một lượng nhỏ không gian mã bên trong, việc có thể chạy mã trên hệ thống với bus bị hỏng là một công cụ chẩn đoán hữu ích.
supercat

@ Tôi có thể bị nhầm nhưng RAM không phải là mã nhị phân và bộ đọc và ghi của bộ xử lý?
Victor Mehta
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.