คุณสามารถรันตัวประมวลผลคลาส x86 ที่ไร้รอยต่อได้หรือไม่?


9

โปรเซสเซอร์ x86 รุ่นใหม่มีแคช L2 อย่างน้อย 512K มีแอพพลิเคชั่นที่เหมาะสมกับปริมาณความจำนี้ทั้งหมด คุณสามารถรันชิปเหล่านี้โดยที่ไม่มี RAM ติดอยู่ได้หรือไม่? ถ้าเป็นเช่นนั้นมีวิธีที่จะกำจัดการกำหนดเวลาการเขียนข้อมูลย้อนกลับเมื่อ CPU พยายามรักษาความต่อเนื่องของ RAM หรือไม่

ฉันไม่มีแอพพลิเคชั่นที่เฉพาะเจาะจงในใจมันเป็นเพียงอยากรู้อยากเห็น ฉันมั่นใจว่าบางแห่งมีแอปพลิเคชันเฉพาะซึ่งสิ่งนี้จะมีประโยชน์

คำตอบ:


12

ใช่คุณสามารถ. ด้วยการแกล้งอ่านจากตำแหน่งหน่วยความจำฟิสิคัลที่ต่อเนื่อง (ไม่มีอยู่) คุณจะตั้งค่าแท็กในแคช จากนั้นคุณปิดการเติม cachelines เพิ่มเติมและป้อน writeback ดังนั้นจึง จำกัด การอ่าน / เขียนไปที่แคชและมันจะทำงานเป็น RAM ปกติ

โครงการทดแทนไบออสบางโครงการทำเช่นนี้เพราะคุณสามารถใช้รหัสได้มากขึ้นในการเซ็ตอัพคอนโทรลเลอร์ของชิปเซ็ตและชิปเซ็ตดังนั้นคุณสามารถเขียนมันใน C ได้

การปฏิบัตินี้ใช้กันอย่างแพร่หลายสำหรับซีพียูในระดับฝังตัวเช่นกันสำหรับการจัดการ bootloaders วิธีการเปลี่ยนแคชให้เป็นโหมดคล้าย RAM แตกต่างกันเล็กน้อย

สำหรับการแนะนำระดับต่ำโดยย่อคุณสามารถตรวจสอบงานนำเสนอนี้

โปรดทราบว่าในขณะที่คนอื่นชี้ให้เห็นคุณยังคงต้องโหลดรหัสบูตจากที่อื่นอย่างชัดเจน


ในความเป็นจริงฉันคิดว่าไบออสที่ทันสมัยทั้งหมดใช้มันและซีพียู x86 ที่ทันสมัยทั้งหมดก็มีการสนับสนุนอย่างเป็นทางการด้วยเหตุนี้
Yuhong Bao

7

เมื่อ CPU ออกจากการรีเซ็ตแคชจะถูกปิด BIOS เป็นสิ่งที่กำหนดค่าเริ่มต้นและล้างแคช ไม่เลยคุณไม่สามารถเรียกใช้ RAM ได้น้อยเพราะไม่มี RAM ที่จะบู๊ตได้ตั้งแต่แรก


1
คำแนะนำสองสามข้อแรกจาก ROM ไม่สามารถเริ่มต้นและเปิดแคชได้โดยไม่ต้องใช้ RAM ใช่หรือไม่
Mark Ransom

1
@Mark Ransom โปรเซสเซอร์รุ่นใหม่ของ Intel (และ CPU อื่น ๆ ) ใช้ Serial Flash เพื่อจัดเก็บไบออส แต่มันไม่สามารถรันโค้ดจากแฟลชอนุกรม ซีพียูจะทำการคัดลอกแฟลชอนุกรมนี้ไปยัง RAM แทนแล้วดำเนินการแทน

ฮ่าฮ่าความไม่รู้ของฉันก็ปรากฏขึ้น - คุณสามารถดูได้ว่ามันเป็นเวลากี่ปีแล้วตั้งแต่ฉันได้ออกแบบฮาร์ดแวร์ ดังนั้นซีพียูจะคัดลอกแฟลชโดยอัตโนมัติก่อนที่คำสั่งแรกจะถูกดำเนินการ? นั่นจะเป็นปัญหาไก่ / ไข่ที่น่ารังเกียจที่จะเอาชนะ
Mark Ransom

@ David พูดอย่างเคร่งครัดไม่ใช่แฟลช 'serial' แต่ 'Firmware Hub' สิ่งนี้แตกต่างจาก 'ซีเรียล' ซึ่งจะโอน 4 บิตต่อครั้งแทนที่จะเป็น 1
Majenko

1
@Mark Ransom มี CPU / MCU's / DSP จำนวนมากที่จะบู๊ตผ่านลิงค์อนุกรม (Serial Flash, RS-232, SPI, ฯลฯ ) พวกเขาทั้งหมดทำได้โดยมี ROM ขนาดเล็กภายใน CPU ที่บูทมาและรหัสนั้นจะโหลดโค้ด "ของจริง" จากที่ใดก็ได้ ในทางทฤษฎีแล้วการใช้ระบบ RAM-Less ทำได้โดยการให้ Intel แก้ไขโค้ดนี้เพื่อใช้แคชแทน RAM ภายนอก แต่ฉันสงสัยว่า Intel จะทำเช่นนี้

3

ฉันไม่รู้ว่านี่ถูกต้องแค่ไหน แต่สิ่งเหล่านี้เป็นความคิดของฉัน:

ฉันไม่คิดว่าจะมีวิธีใดที่คุณสามารถเข้าถึงแคชแบบเป็นโปรแกรม คุณไม่สามารถรับประกันได้จากคำสั่งหนึ่งไปยังสิ่งถัดไปสิ่งที่จะอยู่ในแคชและมันจะอยู่ที่ไหนดังนั้นคุณจึงไม่สามารถใช้มันเป็น RAM ได้อย่างน่าเชื่อถือแม้ว่าคุณจะสามารถเข้าถึงได้โดยตรง

คุณสามารถเรียกใช้ x86 โดยไม่ใช้ RAM แต่คุณจะไม่สามารถทำให้มันมีประโยชน์มากได้ คุณถูก จำกัด ให้ใช้รีจิสเตอร์ภายในสำหรับจัดเก็บข้อมูลอย่างหมดจด


2
โปรโตคอลการเติมและการล้าง cacheline มีการจัดทำเอกสารอย่างละเอียดและสามารถกำหนดค่าได้ในซีพียูส่วนใหญ่รวมถึง x86 เนื้อหา Cacheline ไม่ได้ถูกล้างด้วยวิธีการสุ่มระหว่างคำแนะนำ ดูคำตอบของฉันเกี่ยวกับวิธีที่คุณตั้งค่าให้ทำงานเป็น RAM เชิงเส้น
Bjorn Wesen

ฉันได้เขียนโปรแกรมอรรถประโยชน์ตัวโหลด hex สำหรับโคลน 80x86 ซึ่งจะทำงานอย่างถูกต้องโดยไม่มี RAM ใด ๆ IIRC ฉันใช้งาน call stack ในระดับเดียวโดยใช้ SP เพื่อเก็บที่อยู่ผู้ส่ง เนื่องจาก ROM อยู่บนบัสเดียวกันกับ RAM จึงไม่น่าเป็นไปได้มากที่จะมีปัญหาที่จะทำให้ ROM ทำงานได้เมื่อ RAM ไม่ทำงาน แต่ในกรณีนี้ตัวโหลดสามารถวินิจฉัยปัญหาได้ ในไมโครสโคปอื่นที่มีบัสโค้ดภายนอก แต่มีพื้นที่โค้ดภายในจำนวนเล็กน้อยความสามารถในการรันโค้ดบนระบบที่มีบัสเสียหายเป็นเครื่องมือวินิจฉัยที่มีประโยชน์
supercat

@ ฉันอาจเข้าใจผิด แต่ RAM ไม่ใช่สำหรับรหัสไบนารี่และสำหรับการอ่านและเขียนโดยโปรเซสเซอร์?
Victor Mehta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.