อะไรคือความแตกต่างระหว่างการลงทะเบียนฮาร์ดแวร์และการลงทะเบียนหน่วยความจำแมป?


7

สิ่งนี้น่างงงวยดังนั้นฉันจะวางมันทั้งหมดที่นี่ เห็นได้ชัดว่าผ่าน MMIO คุณสามารถเข้าถึงอุปกรณ์ภายนอกโดยใช้ที่อยู่หน่วยความจำที่กำหนดซึ่งจะถูกกำหนดเส้นทางไปยังอุปกรณ์นั้นอีกครั้ง (ผ่านการเขียนแพ็คเก็ตคำสั่ง ฯลฯ ) อย่างไรก็ตามฉันเคยได้ยินคำอธิบายที่หลากหลายของทั้งคู่ การลงทะเบียนฮาร์ดแวร์ (เช่นการลงทะเบียน CPU / GPU หรือชิปเสียง) และการลงทะเบียนที่แมปหน่วยความจำใช้สลับกันได้ พวกเขาเป็นสิ่งเดียวกันหรือไม่

เมื่อคุณพูดว่า "หน่วยความจำที่แมปลงทะเบียน" คุณไม่ได้อ้างถึงที่อยู่ซึ่งข้อมูลไบต์จะถูกกำหนดเส้นทางไปยังที่อยู่เฉพาะภายในอุปกรณ์นั้น (เช่นในทางทฤษฎี: ที่อยู่ 0x500 ของ GPU ใช้สำหรับลงทะเบียน TEXTURE_BUFFER) อย่างไรก็ตามอุปกรณ์ที่แมปหน่วยความจำไม่สามารถแมปการลงทะเบียนทางกายภาพภายใน RAM

ดังนั้นโดยทั่วไปแล้วความแตกต่างระหว่างการลงทะเบียนหน่วยความจำแมปและเพียงลงทะเบียนฮาร์ดแวร์คืออะไร?


หากเป็นกรณีที่คำถามนี้ไม่เหมาะสมฉันขอแนะนำให้ย้ายข้อมูลนี้ไปที่ cs.stackexchange.com หรือโปสเตอร์โพสต์ไว้ที่นั่น
barlop

คำตอบ:


2

I / O ที่แม็พหน่วยความจำและรีจิสเตอร์ที่แมปหน่วยความจำไม่เหมือนกันและไม่เกี่ยวข้องกัน

I / O ที่ใช้หน่วยความจำถูกใช้เช่นในพีซียุคแรกซึ่งส่วนหนึ่งของพื้นที่ที่อยู่ RAM ถูกแมปกับบัฟเฟอร์จอแสดงผล (และในบางผลิตภัณฑ์ RAM ปกติถูกใช้จริงสำหรับบัฟเฟอร์การแสดงผล vs มีบัฟเฟอร์บนการ์ดแสดงผลการ์ดแสดงผล) ในกรณีอื่น ๆ อุปกรณ์ฮาร์ดแวร์เช่นตัวควบคุมดิสก์ไดรฟ์จะใช้ที่อยู่หน่วยความจำแมปสำหรับการตั้งค่า / อ่านการควบคุม ลงทะเบียน (และฉันเดาว่าการ์ดกราฟิกที่ทันสมัยยังคงแมปหน่วยความจำดิสเพลย์ลงในพื้นที่ที่อยู่ของโปรเซสเซอร์กราฟิกแม้ว่าฉันจะไม่รู้เรื่องนี้จริง

"การลงทะเบียนหน่วยความจำที่แมป" อาจมีความหมายหลายอย่าง หนึ่งจะเป็นตัวอย่างข้างต้นของตัวควบคุมดิสก์ไดรฟ์ที่มีการลงทะเบียนควบคุมหน่วยความจำแมป อีกกรณีที่แตกต่างกันโดยสิ้นเชิงจะเป็นโปรเซสเซอร์ที่มีการลงทะเบียนแรมจริง นี่เป็นเรื่องธรรมดาสำหรับโปรเซสเซอร์ต้น (50 ถึงต้นยุค 70) เนื่องจากมันลดจำนวนชิ้นส่วนลงอย่างมากและมันก็อนุญาตให้ใช้วิธีการโปรแกรมบางอย่างที่ "ฉลาด" ในบางกรณีโปรเซสเซอร์มีสองรุ่นหนึ่งรุ่นที่มีการลงทะเบียนหน่วยความจำที่แมปและอีกรุ่นที่มีการลงทะเบียน "ฮาร์ดแวร์" (เร็วกว่า)

และในบางกรณีมันเป็นสิ่งที่คลุมเครือในสิ่งที่เป็นทะเบียนและสิ่งที่ไม่เป็นเช่นเดียวกับในเครื่อง "stack" ของ Burroughs ที่ใช้ "stack" แทนการลงทะเบียนมาตรฐาน แชโดว์ "การลงทะเบียนใน RAM)


2

การลงทะเบียนฮาร์ดแวร์ที่แมปหน่วยความจำเข้าถึงได้เช่น RAM CPU ทั้งหมดมีคำแนะนำเฉพาะสำหรับการอ่าน / การเขียน RAM และคำแนะนำเดียวกันนี้ใช้เพื่อเข้าถึงการลงทะเบียนหน่วยความจำ

การลงทะเบียนฮาร์ดแวร์โดยทั่วไปไม่จำเป็นต้องแมปหน่วยความจำนี่เป็นเพียงหลักการทั่วไป

x86 มีช่องว่างที่อยู่สองช่องซึ่งแบ่งกลุ่มคำสั่งสองกลุ่มเพื่อใช้ในการอ่านและเขียน - อันแรกคือ RAM หรือพื้นที่หน่วยความจำ (ทั้งหมด MOV คำแนะนำ) ที่สองคือพื้นที่ I / O (โดยใช้ IN และ OUT คำแนะนำ) บน x86 การลงทะเบียนฮาร์ดแวร์อาจปรากฏขึ้นในพื้นที่ใดก็ได้

คุณอาจต้องผ่านระดับการอ้อมไปถึงการลงทะเบียนฮาร์ดแวร์ อุปกรณ์อาจเปิดเผย "พอร์ต" ในหน่วยความจำหรือพื้นที่ I / O เท่านั้น จากนั้นคุณต้องเขียนหมายเลขลงทะเบียนไปยังที่อยู่จากนั้นข้อมูลที่คุณต้องการเขียนไปยังที่อยู่อื่นจริง ๆ การเขียนเกิดขึ้นแล้ว 8563 VDC เก่าใน Commodore 128 ทำงานเช่นนี้ CMOS RAM และ PCI register บางตัวก็ทำงานเช่นนี้

การลงทะเบียนฮาร์ดแวร์ของ CPU นั้นแน่นอนว่าไม่ใช่การแมปหน่วยความจำ (ไม่ใช่ใน x86 หรือ CPU ทั่วไปใด ๆ ) นั่นเป็นอีกตัวอย่างของการลงทะเบียนฮาร์ดแวร์

CPU สมัยใหม่มี "การลงทะเบียนเฉพาะรุ่น" (MSRs) และสิ่งเหล่านี้อ่าน / เขียนโดยใช้คำแนะนำของตัวเอง RDMSR, WRMSR ) รีจิสเตอร์ CPU อื่นมีคำแนะนำของตัวเอง ( LGDT, MOV xx, CR2EAX / RAX พื้นฐาน ฯลฯ )


-1

การเดาที่ได้รับการศึกษาของฉันขึ้นอยู่กับสิ่งที่วิทยากรวิทยาการคอมพิวเตอร์บอกกับเราจากหนังสือพื้นฐาน CPU ไม่ทราบว่าอุปกรณ์กำลังเขียนอะไรอยู่ เท่าที่มีความกังวลก็อาจเป็นหน่วยความจำ RAM อุปกรณ์บางอย่างใช้ตำแหน่งหน่วยความจำ RAM เฉพาะ ฉันคิดว่านั่นเป็นสิ่งที่ฮาร์ดแวร์แมปหมายถึง แต่อาจมีตำแหน่งหน่วยความจำในอุปกรณ์ฮาร์ดแวร์ของตัวเองอาจจะต้องมี .. ในการถ่ายโอนข้อมูล ซีพียูไม่ต้องรอให้มันเขียนไปยังตำแหน่งใน RAM ซึ่งแมปไปยังรีจิสเตอร์บน devie การลงทะเบียนคือตำแหน่งหน่วยความจำใน CPU หรือในอุปกรณ์ฮาร์ดแวร์ ไม่ได้อยู่ในหน่วยความจำ

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

ดังนั้นหากการลงทะเบียนฮาร์ดแวร์ไม่ได้ถูกแมปหน่วยความจำ .. เช่น หากซีพียูเขียนไปยังหน่วยความจำโดยตรงก็จะไม่ถูกแมปหน่วยความจำ ดูเหมือนว่าจากบทความวิกิพีเดียที่ว่าหากที่อยู่เหล่านั้นอยู่ในพื้นที่พิเศษและพวกเขาต้องการหมุดพิเศษหรือรถบัสพิเศษสถานที่อาจอยู่ในหน่วยความจำ แต่ไม่ใช่ MMIO ไม่ใช่หน่วยความจำที่แมป

ดูหน้าวิกิพีเดียนั้น .. PMIO กล่าวว่าจะไม่ถูกแมปหน่วยความจำ คือเมื่อ CPU register ไม่ถูกแม็พกับตำแหน่งหน่วยความจำปกติ แต่เป็นพื้นที่แอดเดรสพิเศษ ดังนั้นแทนที่จะลงทะเบียน CPU ทั่วไปที่สามารถเขียนไปยังอุปกรณ์หรือหน่วยความจำขึ้นอยู่กับว่าที่อยู่ใดที่อยู่บนบัสที่อยู่ ด้วย PMIO (เช่นไม่ใช่การลงทะเบียนหน่วยความจำที่แมป) การลงทะเบียนจะถูกแมปไปยังตำแหน่งหน่วยความจำเฉพาะของอุปกรณ์ซึ่งฉันเดาว่าพวกเขากำลังเรียกพอร์ต

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