แคชและหน่วยความจำ

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

ฉันกำลังทำงานกับแคชและหน่วยความจำ พยายามทำความเข้าใจวิธีการทำงาน ที่ไม่เข้าใจคือประโยคนี้ (เป็นตัวหนา ไม่ใช่ในรูป) :

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

สมมติว่าฉันมีที่อยู่สองแห่งนี้:

    [1........0]10
    [1........0]00
         ^
         |
   same 30 bits for boths [31-12] for the tag and [11-2] for the index (see figure below)

ตามที่ฉันเข้าใจอันแรกจะส่งผลให้เกิด MISS (ฉันคิดว่าแคชเริ่มต้นว่างเปล่า) ดังนั้นหนึ่งช่องในแคชจะเต็มไปด้วยข้อมูลที่อยู่ในที่อยู่หน่วยความจำนี้

ตอนนี้เราเอาอันที่สองเนื่องจากมี 30 บิตเท่ากัน มันจะส่งผลให้ HIT ในแคชเพราะเราเข้าถึงสล็อตเดียวกัน (เพราะ 10 บิตเท่ากัน) และ 20 บิตของที่อยู่จะเท่ากับ 20 บิตเก็บไว้ในฟิลด์แท็ก

ดังนั้นเราจะมีข้อมูลอยู่ที่หน่วยความจำ [1........0]10 ไม่ใช่ [1........0]00 ซึ่งผิด !

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

แคชในรูป:

ป้อนคำอธิบายรูปภาพที่นี่


person user2336315    schedule 15.12.2013    source แหล่งที่มา
comment
คุณกำลังเข้าถึงแบบหนึ่งไบต์หรือคำเดียว?   -  person Peter Lawrey    schedule 15.12.2013
comment
คุณกำลังเพิกเฉยเมื่อเลือกคำในบล็อก บิตสุดท้ายจะไม่ถูกละเว้น เสมอ เพียงเพื่อพิจารณาว่าจำเป็นต้องแคชอะไรเท่านั้น การเข้าถึงหน่วยความจำจริงใช้ที่อยู่แบบเต็ม   -  person Kerrek SB    schedule 15.12.2013
comment
@PeterLawrey หากเป็นคำเดียวที่ฉันเข้าใจว่าสิ่งนี้จะนำไปสู่สิ่งเดียวกัน ฉันไม่ควรสนใจเรื่องการชดเชยไบต์ ขวา ?   -  person user2336315    schedule 15.12.2013
comment
@KerrekSB ดังนั้นสองบิตสุดท้ายจะถูกละเว้นเมื่อฉันจะทำ lw ตัวอย่างและจะมีมัลติเพล็กเซอร์ที่มีไบต์ออฟเซ็ตเป็นสัญญาณควบคุมเมื่อฉันจะใช้ lb เพื่อรับไบต์ที่ถูกต้อง ?   -  person user2336315    schedule 15.12.2013
comment
สองบิตสุดท้ายจะถูกใช้เมื่อขนาดบล็อกมากกว่าหนึ่งคำ ดังนั้นการใช้สองบิตนั้นคุณจะพบออฟเซ็ตภายในรายการแคช   -  person Asterisk    schedule 15.12.2013
comment
เมื่อคุณอ่าน 4 คำจาก xxxx010 คุณกำลังอ่าน xxxxx011, xxxxx100, xxxxx101 ด้วยเช่นกัน ดังนั้นนี่หมายความว่าคุณกำลังแตะสองคำจริง ๆ และอาจหมายถึงการอ่านสองครั้งและพลาดแคชสองครั้ง   -  person Peter Lawrey    schedule 15.12.2013
comment
@PeterLawrey ฉันคิดว่าฉันเข้าใจถูกต้อง คำตอบของฉันสมเหตุสมผลไหม? ฉันคิดว่านี่ถูกต้อง   -  person user2336315    schedule 17.12.2013


คำตอบ (1)


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

มันแค่หมายความว่าในความทรงจำคำพูดของฉันสอดคล้องกันดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นเมื่อเลือกคำ ฉันไม่ควรสนใจสองบิตสุดท้าย เพราะฉันจะโหลดคำนั้น

บิตสุดท้ายสองบิตนี้จะมีประโยชน์สำหรับโปรเซสเซอร์เมื่อมีการดำเนินการคำสั่งไบต์โหลด (lb) เพื่อเลื่อนข้อมูลอย่างถูกต้องเพื่อให้ได้ข้อมูลในตำแหน่งไบต์ที่ถูกต้อง

person user2336315    schedule 17.12.2013