ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
ระบบคอมพิวเตอร์และสถาปัตยกรรม
บทที่ 6 หน่วยความจำแคช (Cache Memory)
2
ประเด็นสำคัญ การอ่านเขียนข้อมูลกับหน่วยความจำหลักทำได้ช้า
หน่วยความจำที่ทำงานด้วยความเร็วสูงมาวางไว้ระหว่างหน่วยความจำหลักและซีพียู เรียกว่าหน่วยความจำแคช เป็นหน่วยความจำแบบสารกึ่งตัวนำ (Semiconductor) ทำให้ซีพียูสามารถอ่านข้อมูลออกมาได้ด้วยความเร็วสูง (ใช้เป็นที่พักข้อมูลชั่วคราว) ซีพียูจะอ่านข้อมูลออกจากหน่วยความจำแคชเป็นเวิร์ด (หน่วยความจำแคชกับหน่วยความจำหลักจะโอนถ่ายข้อมูลกันเป็นบล็อก) หน่วยความจำที่อยู่ใกล้กับซีพียูมากที่สุดจะทำงานได้เร็วที่สุด
3
ประเด็นสำคัญ (ต่อ) คุณสมบัติของหน่วยความจำที่สำคัญ คือ ความจุ (Capacity) ความจุของหน่วยความจำภายในจะใช้หน่วยเป็นเวิร์ด (โดย 1 เวิร์ด อาจจะมีขนาด 8, 16 หรือ 32 บิต) จำนวนสายสัญญาณข้อมูลเข้า-ออก จากหน่วยความจำ โดยปกติจะมีขนาดเท่ากับความยาวของเวิร์ด หรืออาจจะมีขนาดใหญ่กว่า
4
นิยามที่เกี่ยวข้อง นิยามที่เกี่ยวข้องกับหน่วยความจำ
Word คือ หน่วยความจุของหน่วยความจำ โดยปกติจะมีขนาดเท่ากับจำนวนบิตที่ใช้ในการแสดงค่าของข้อมูลหรือคำสั่ง Addressable units คือ หน่วยที่ใช้สำหรับอ้างอิงตำแหน่งที่อยู่ของข้อมูลหรือคำสั่งในหน่วยความจำ Unit of transfer คือ หน่วยในการถ่ายเทข้อมูล
5
นิยามที่เกี่ยวข้อง (ต่อ)
นิยามที่เกี่ยวข้องกับวิธีการเข้าถึงหน่วยความจำ Sequential access คือ การเข้าถึงหน่วยความจำแบบเรียงลำดับ Direct access คือ การเข้าถึงหน่วยความจำแบบโดยตรง Random access คือ การเข้าถึงหน่วยความจำแบบไม่มีลำดับ (แบบสุ่ม) แต่ละตำแหน่งในหน่วยความจำจะต้องมีกลไกในการกำหนดตำแหน่งเฉพาะที่ไม่มีการซ้ำกัน Associative คือ การเข้าถึงหน่วยความจำแบบไม่มีลำดับ มีการเปรียบเทียบข้อมูลบิตจำนวนหนึ่ง กับเวิร์ดที่เป็นตัวเลือกจำนวนหนึ่ง เพื่อค้นหาตำแหน่งที่สอดคล้องกัน (หน่วยความจำแบบแคช)
6
นิยามที่เกี่ยวข้อง (ต่อ)
นิยามที่เกี่ยวข้องกับวิธีการวัดประสิทธิภาพของหน่วยความจำ Access time คือ ระยะเวลาในการเข้าถึงหน่วยความจำ (ระยะเวลาในการอ่านหรือเขียนข้อมูลในหน่วยความจำ) Memory cycle time คือ วงรอบเวลาการทำงานของหน่วยความจำ โดยระยะเวลาในการเข้าถึงหน่วยความจำรวมกับระยะเวลาอื่นๆ ที่จำเป็นต้องใช้ จนถึงเวลาที่จะเกิดการอ่านหรือเขียนข้อมูลในครั้งต่อไป Transfer rate คือ อัตราการถ่ายเทข้อมูล เข้า-ออก จากหน่วยความจำ
7
ลักษณะพื้นฐานของหน่วยความจำแคช
หน่วยความจำแคช เป็นหน่วยความจำแบบสารกึ่งตัวนำที่ซีพียูสามารถอ่าน-เขียน ข้อมูลได้ด้วยความเร็วสูง ใช้เป็นที่พักข้อมูลชั่วคราว ภาพตัวอย่างการโอนถ่ายข้อมูลระหว่างหน่วยความจำแคชและหน่วยความจำหลัก
8
ลักษณะพื้นฐานของหน่วยความจำแคช (ต่อ)
กรณีซีพียูมีความเร็วสูงๆ เมื่ออ่านเขียนข้อมูลกับหน่วยความจำหลักอาจเกิดภาวะ Wait State หรือการรอ เนื่องจากหน่วยความจำหลักทำงานได้ช้ากว่าซีพียู จึงเกิดเป็นแนวคิดในการนำหน่วยความจำแคชมาใช้ เนื่องจากเป็นหน่วยความจำที่มีความเร็วสูงและมีขนาดเล็กกว่าหน่วยความจำหลัก มักจะใช้เก็บข้อมูลที่ซีพียูใช้งานบ่อยๆ หรือคาดว่าซีพียูอาจจะต้องใช้ หน่วยความจำแคชจะมีวงจรควบคุม (Cache Controller) เพื่อควบคุมว่าซีพียูต้องกระทำกับข้อมูลที่ตำแหน่งใดในหน่วยความจำแคช หน่วยความจำแคชช่วยลดการเกิดภาวะ Wait State
9
ลักษณะพื้นฐานของหน่วยความจำแคช (ต่อ)
วงจรควบคุมแคชจะทำการสลับข้อมูลระหว่างหน่วยความจำหลักกับข้อมูลในหน่วยความจำแคชไปพร้อมๆ กับการทำงานของซีพียู เมื่อซีพียูต้องการใช้ข้อมูลในตำแหน่งใดและพบว่ามีข้อมูลของตำแหน่งนั้นอยู่ในแคชแล้ว ซีพียูก็จะอ่านข้อมูลจากแคชทันที ภาวะที่ซีพียูอ่านข้อมูลในแคชแล้วพบข้อมูลเรียกว่า Cache Hit กรณีซีพียูไม่พบข้อมูลในแคช ตัวควบคุมแคชก็จะไปนำข้อมูลจากหน่วยความจำหลักออกมา ภาวะนี้เรียกว่า Cache Miss วิการค้นหาข้อมูลนี้เรียกว่า ฟังก์ชันแม็ปปิง (Mapping Function)
10
ลักษณะพื้นฐานของหน่วยความจำแคช (ต่อ)
ระบบจะทำงานได้อย่างรวดเร็วและถูกต้อง หากข้อมูลที่อยู่ในหน่วยความจำแคชเหมือนกับข้อมูลที่อยู่ในหน่วยความจำหลักเสมอ หากข้อมูลในหน่วยความจำแคชมีการเปลี่ยนแปลง ข้อมูลในหน่วยความจำหลักจะต้องมีการแก้ไขเปลี่ยนแปลงด้วย การรักษาความถูกต้องของข้อมูลนี้เรียกว่า Cache Consistency (จะมีบิตพิเศษเรียกว่า Dirty Bit เป็นตัวบอกข้อมูลในแคชนั้นมีการเปลี่ยนแปลงหรือไม่) ประสิทธิภาพในการทำงานของหน่วยความจำแคชจะวัดจากอัตราการพบข้อมูล (Hit Ratio) โดยเป็นอัตราส่วนระหว่างจำนวนครั้งที่พบข้อมูล (Hit) หารด้วยจำนวนครั้งที่ซีพียูต้องการข้อมูล (Hit + Miss) โดยทั่วไปอัตราที่ยอมรับกันในการออกแบบระบบคอมพิวเตอร์ คือ >= 0.9
11
ลักษณะพื้นฐานของหน่วยความจำแคช (ต่อ)
โครงสร้างของ หน่วยความจำหลัก โครงสร้างของ หน่วยความจำแคช การโอนย้ายข้อมูลระหว่างหน่วยความจำหลักกับหน่วยความจำแคชนั้นจะเป็นการแบ่งข้อมูลในหน่วยความจำหลักเป็นแอดเดรสที่อยู่ติดๆ กันหรือเป็นบล็อก และนำข้อมูลทั้งบล็อกนั้นส่งให้แคช โดยในแต่ละแอดเดรสในหน่วยความจำแคชจะมีข้อมูลที่เป็นป้ายชื่อเรียกว่า Tag Bit กำกับอยู่ เพื่อบอกว่าข้อมูลนั้นเป็นข้อมูลที่อยู่ในหน่วยความจำหลักในตำแหน่งใด
12
ลักษณะพื้นฐานของหน่วยความจำแคช (ต่อ)
จากภาพ อธิบายได้ดังนี้ หน่วยความจำหลักจะมีสัญญาณแอดเดรสจำนวน n เส้น สามารถอ้างตำแหน่งได้ 2n ตำแหน่ง และถูกแบ่งออกเป็นบล็อก แต่ละบล็อกจะเก็บเวิร์ดข้อมูลที่อยู่ติดกันจำนวน K เวิร์ด จำนวนบล็อกคิดได้จาก M=2n/K หน่วยความจำแคชจะถูกแบ่งออกเป็นแถว (Cache Line) โดยแต่ละแถวจะเก็บข้อมูลได้ K เวิร์ด และสามารถเก็บข้อมูลได้ C แถว โดยทั่วไปแล้วขนาดของหน่วยความจำแคชจะน้อยกว่าขนาดของหน่วยความจำหลัก C << M เมื่อระบบทำงาน ข้อมูลในหน่วยความจำหลักที่ต้องใช้แต่ละบล็อกจะถูกคัดลอกมาเก็บในหน่วยความจำแคชในแต่ละแถว โดยมีบิต Tag เป็นตัวบอกว่าข้อมูลนั้นมาจากหน่วยความจำหลักบล็อกใด
13
กระบวนการทำงานของหน่วยความจำแคช
การดำเนินการของหน่วยความจำแคช เมื่อซีพียูต้องการติดต่อกับหน่วยความจำที่ตำแหน่งใด ซีพียูจะส่งค่าแอดเดรสออกไป ระบบหน่วยความจำแคชจะทำงานโดยอ่านค่าแอดเดรสของหน่วยความจำที่ซีพียูต้องการเข้ามา แล้วตรวจสอบว่าแอดเดรสที่ต้องการติดต่อมีข้อมูลอยู่ในหน่วยความจำแคชแล้วหรือไม่ หากมีก็จะส่งข้อมูลนั้นให้ซีพียู แต่หากไม่มีก็จะติดต่อไปยังหน่วยความจำหลัก และอ่านบล็อกข้อมูลนั้นเข้ามาในหน่วยความจำแคชพร้อมทั้งส่งข้อมูลนั้นให้กับซีดียูด้วย
14
ตัวอย่างกระบวนการทำงานของหน่วยความจำแคช
เมื่อระบบต้องการอ่านข้อมูล (ส่งสัญญาณแอดเดรสทั้ง 12 บิต) ในตำแหน่งแอดเดรสที่ต้องการตัวอย่างเช่น คือ ? ตัวอย่าง แสดงความสัมพันธ์ระหว่างข้อมูลที่เก็บอยู่ในหน่วยความจำแคช และข้อมูลที่เก็บอยู่ในหน่วยความจำหลัก โดยสมมุติให้ขนาดบล็อกของแคช (Cache Line) มีขนาด 4 ไบต์ และให้หน่วยความจำหลักสามารถมีสัญญาณอ้างแอดเดรสได้ 12 บิต โดยให้ 10 บิตบนเป็นข้อมูลของ Tag และบล็อกแอดเดรส สำหรับ 2 บิตต่ำเป็น Displacement ที่แสดงว่าข้อมูลที่ต้องการอยู่ในไบต์ใด ในบล็อกข้อมูลหรือไบต์ใดใน Cache Line เมื่อระบบต้องการอ่านข้อมูล เช่น มีการส่งสัญญาณแอดเดรสทั้ง 12 บิต ในตำแหน่งแอดเดรสที่ต้องการออกมาเป็น โดย 10 บิตบนของค่าแอดเดรสนี้จะถูกนำมาเปรียบเทียบเทียบกับ Tag Address ที่เก็บในหน่วยความจำแคชเพื่อดูว่ามีข้อมูลนี้อยู่หรือไม่ หากพบ Tag ที่ต้องการ ระบบก็จะอ่านข้อมูลในไบต์ที่ถูกกำหนดจาก Displacement นั้นๆ จากตัวอย่างนี้จะเป็นการอ่านข้อมูลจาก cache Line ที่เก็บค่า F4, FF, 00 และ 1A และจะพบว่าค่า FF จะถูกอ่านออกมา
15
ตัวอย่างกระบวนการทำงานของหน่วยความจำแคช (ต่อ)
จากตัวอย่าง หากซีพียูต้องการแก้ไขข้อมูลในแอดเดรสเดียวกันนี้เป็น 88 ซีพียูก็จะเขียนข้อมูลลงในหน่วยความจำแคชแทนที่จะเขียนข้อมูลลงในหน่วยความจำหลัก เนื่องจากการเขียนข้อมูลลงในหน่วยความจำแคชทำได้เร็วกว่า เมื่อซีพียูเขียนข้อมูล 88 แล้ว ระบบควบคุมแคชก็จะต้องไปแก้ไขข้อมูลในตำแหน่งที่สอดคล้องกันให้มีค่าเหมือนกันด้วย ถ้าหากวงจรควบคุมแคชมีประสิทธิภาพสูง ทำให้การค้นหาข้อมูลมีอัตราการพบข้อมูลสูง ก็จะทำให้ระบบโดยรวมทำงานได้เร็วด้วย
16
ฟังก์ชันแม็ปปิง (Mapping Function)
การแม็ปปิงจะบอกวิธีการสำหรับการตรวจสอบว่าบล็อกใดยังคงต้องเก็บในหน่วยความจำแคช รวมถึงวิธีการกำหนดตำแหน่งในหน่วยความจำแคช วิธีการแม็ปปิงนี้มีหลายวิธี แต่ที่นิยมใช้กัน ได้แก่ การแม็ปปิงโดยตรง (Direct Mapping) การแม็ปปิงแบบสัมพันธ์ (Associative Mapping) และการแม็บปิงแบบกลุ่มสัมพันธ์ (Set-Associative Mapping)
17
ฟังก์ชันแม็ปปิง (Mapping Function) ต่อ
เพื่อให้เห็นการเปรียบเทียบโครงสร้างการทำงานของแม็ปปิงทั้ง 3 วิธี จึงกำหนดข้อสมมุติดังนี้ สมมุติระบบคอมพิวเตอร์ระบบหนึ่งมีหน่วยความจำแคชขนาด 2048 (2k) ตำแหน่ง โดยการเก็บข้อมูลแบ่งออกเป็นแถวจำนวน 128 แถว แต่ละแถวเก็บข้อมูลได้ 16 เวิร์ด สมมุติว่าหน่วยความจำหลักมีขาแอดเดรสสำหรับอ้างตำแหน่งขนาด 16 บิต ทำให้สามารถอ้างตำแหน่งได้ 64k ตำแหน่ง และหน่วยความจำหลัก แบ่งเป็นบล็อกได้ 4k บล็อก แต่ละบล็อกเก็บข้อมูลได้ 16 เวิร์ด
18
การแม็ปปิงแบบโดยตรง (Direct Mapping)
การแม็ปปิงแบบโดยตรง จะเห็นได้ว่าบล็อกที่ j ในหน่วยความจำหลักจะถูกนำมาเก็บในแถวที่ j modulo 128 ในหน่วยความจำแคช จะเห็นได้ว่าบล็อก 0, 128, 256, … จะถูกโหลดลงในหน่วยความจำแคชบล็อก 0 และ 1, 129, 257, … จะถูกโหลดลงในหน่วยความจำแคชบล็อก 1
19
การแม็ปปิงแบบโดยตรง (Direct Mapping) ต่อ
แอดเดรสที่ซีพียูใช้ในการอ้างอิงหน่วยความจำมีขนาด 16 บิต อ้างตำแหน่งหน่วยความจำได้ 64k ตำแหน่ง โดยแบ่งออกเป็นบล็อกจำนวน 4096 บล็อก ข้อมูล 4 บิตต่ำในสัญญาณแอดเดรสจะเป็นตัวบอกว่าเป็นไบต์ข้อมูลลำดับที่เท่าใดในบล็อกนั้น 7 บิตถัดมาจะเป็นตัวบอกว่าข้อมูลที่ติดต่ออยู่ในบล็อกใดในหน่วยความจำแคช มีได้ทั้งหมด 128 บล็อก
20
การแม็ปปิงแบบโดยตรง (Direct Mapping) ต่อ
5 บิตบนสุดจะใช้เป็น Tag เมื่อข้อมูลในหน่วยความจำหลักถูกจัดเก็บในหน่วยความจำแคช ซีพียูต้องการข้อมูลก็จะส่งสัญญาณแอดเดรสทั้ง 16 บิตออกมาเพื่อระบุข้อมูลที่ต้องการ ระบบจะตรวจสอบว่าข้อมูลแอดเดรสนั้นมี Tag ตรงกับที่มีอยู่ในแคชหรือไม่ ถ้า Tag ตรงกันและเป็นบล็อกข้อมูลที่อยู่ในแคชก็จะอ่านข้อมูลเข้ามาในซีพียูโดยใช้ 4 บิตต่ำเป็นตัวระบุว่าเป็นข้อมูลไบต์ใด ถ้า Tag ไม่ตรงกันก็หมายความว่าข้อมูลนั้นไม่อยู่ในแคช ระบบก็จะต้องไปอ่านข้อมูลในหน่วยความจำหลักแล้วนำบล็อกของข้อมูลในหน่วยความจำหลักมาเก็บในตำแหน่งที่จะต้องอยู่ในแคช พร้อมทั้งนำข้อมูลส่งให้กับซีพียูด้วย
21
การแม็ปปิงแบบโดยตรง (Direct Mapping) ต่อ
การออกแบบระบบหน่วยความจำแคชสำหรับซีพียูที่มีการอ้างแอดเดรสเท่ากัน สามารถทำได้หลายวิธี ขึ้นอยู่กับขนาดของหน่วยความจำแคช ตัวอย่างเช่น หากแอดเดรสที่ซีพียูใช้ในการอ้างหน่วยความจำมีขนาด 16 บิต (เหมือนตัวอย่างก่อนหน้านี้) แต่ออกแบบให้หน่วยความจำแคชมีขนาด 256 บล็อก แต่ละบล็อกเก็บข้อมูลได้ 8 ไบต์ ดังนั้น การแบ่งหน่วยความจำหลักจะต้องแบ่งออกเป็นบล็อกละ 8 ไบต์ด้วย
22
ตัวอย่างการออกแบบหน่วยความจำแคชแบบ แม็ปปิงโดยตรง
โดยเขียนหมายเลขบล็อกได้เป็น 256 แถว และ 32 หลัก ดังนั้น จะมีบล็อกทั้งหมด 256x32=8,192 = 2^13 จากรูปจะพบว่าถ้าหากมีการแม็ปปิงแบบโดยตรง ข้อมูลในหน่วยความจำหลักที่จะมาอยู่ในหน่วยความจำแคชบล็อกที่ 0 ได้แก่ ข้อมูลจากบล็อก 0, 256, 512, … เป็นต้น และในแคชบล็อก 1 จะเป็นข้อมูลที่มาจากบล็อก 1, 257, 513,… ในหน่วยความจำหลัก การออกแบบในลักษณะนี้จะพบว่าสามารถนำบิตแอดเดรส 11 บิตต่ำมาใช้ในการอ้างตำแหน่งในแคชได้ โดย 3 บิตต่ำจะเป็นตัวระบุลำดับไบต์ที่อยู่ในแคชบล็อกนั้นๆ ส่วน 8 บิตสูงจะเป็นตัวระบุหมายเลขบล็อกของแคช
23
ตัวอย่างการออกแบบหน่วยความจำแคชแบบ แม็ปปิงโดยตรง (ต่อ)
จากรูปจะเห็นว่าการเปรียบเทียบระหว่างหน่วยความจำแคชและบล็อกของหน่วยความจำหลัก จะพบว่าหน่วยความจำหลักเขียนบล็อกในแนวหลักได้ 32 หลัก โดยหมายเลขหลักนี้จะสอดคล้องกับ 5 บิตบนของแอดเดรสหน่วยความจำ ในการแม็ปปิงแอดเดรสสามารถใช้ 5 บิตบนของสัญญาณแอดเดรสนี้เป็นหมายเลข Tag ได้ ดังนั้น ในระบบหน่วยความจำแคชจึงต้องออกแบบหน่วยความจำสำหรับเก็บ Tag นี้ด้วย นอกจากนี้ยังมีการออกแบบหน่วยความจำชื่อ Valid Bits สำหรับเก็บบิตใช้งานที่ใช้บอกว่าในบล็อกนั้นๆ มีข้อมูลจากหน่วยความจำหลักมาอยู่หรือไม่ หากมีอยู่ ให้บิตนั้นเป็น 1 หากไม่มีให้บิตเป็น 0 จากตัวอย่าง หากระบบนำข้อมูลจากหน่วยความจำบล็อกที่ 7680 มาเก็บในแคช ข้อมูลนี้จะต้องมาอยู่ในบล็อกที่ 0 และหมายเลข Tag เป็น 30 และบิตใช้งานเป็น 1 แต่หากนำข้อมูลในบล็อกที่ 2305 มาเก็บในแคช จะต้องเก็บในบล็อกที่ 1 และหมายเลข Tag เป็น 9 เป็นต้น
24
ตัวอย่างการออกแบบหน่วยความจำแคชแบบ แม็ปปิงโดยตรง (ต่อ)
เมื่อระบบต้องการอ่านข้อมูล ระบบจะส่งสัญญาณแอดเดรสออกมาทั้ง 16 บิต และค่านี้จะเก็บไว้ในรีจิสเตอร์พิเศษของระบบหน่วยความจำแคช จากนั้นขั้นตอนที่ (1) จะนำข้อมูล 8 บิตที่ใช้เลือกบล็อกมาเปรียบเทียบว่าข้อมูลที่ซีพียูต้องการอยู่ในบล็อกใด (2) ดูบิตใช้งานว่าในบล็อกนั้นมีข้อมูลอยู่หรือไม่ (3) ถ้าบล็อกนั้นมีข้อมูลอยู่ให้นำข้อมูลจาก Tag ของแคชส่งออกมา (4) เปรียบเทียบ 5 บิตบนของแอดเดรสที่ต้องการว่ามีค่าตรงกับ Tag ในแคชหรือไม่ ถ้าตรงคือเป็น Cache Hit ถ้าไม่ตรงจะเป็น Cache Miss (5) ถ้าหากในแคชมีข้อมูลที่ต้องการ ระบบก็จะอ่านข้อมูลในแคชออกมา (6) เลือกว่าซีพียูต้องการข้อมูลไบต์ใดในแคช แล้วส่งข้อมูลไบต์นั้นให้กับซีพียูต่อไป การแม็ปปิงแบบโดยตรงนี้เป็นการออกแบบระบบที่ง่าย ข้อมูลในหน่วยความจำหลักจะมีตำแหน่งที่เก็บในแคชที่แน่นอน แต่ก็มีข้อเสีย คือ หากซีพียูต้องการข้อมูลที่อยู่ในกลุ่มเดียวกัน และมีการเรียกใช้บ่อยๆ เช่น การทำงานวนลูป จะทำให้เกิดการย้ายข้อมูลระหว่างแคชกับหน่วยความจำหลักขึ้นบ่อยครั้ง ตัวอย่าง (ใน Slide ที่ 23) หากซีพียูต้องการข้อมูลในบล็อก 512 และมีข้อมูลอยู่ในแคช ต่อมาซีพียูต้องการข้อมูลในบล็อก 7680 ก็จะพบว่าข้อมูลไม่อยู่ในแคช ระบบก็จะต้องสลับข้อมูลจากบล็อก 7680 มาแทนที่บล็อก 512 ที่อยู่ในแคช เป็นต้น
25
การแม็ปปิงแบบสัมพันธ์ (Associative Mapping)
การแม็ปปิงแบบสัมพันธ์นี้จะแก้ปัญหาที่เกิดกับการแม็ปปิงแบบโดยตรง โดยให้บล็อกของข้อมูลจากหน่วยความจำหลักมาอยู่ในตำแหน่งใดในหน่วยความจำแคชก็ได้ ซึ่งจะทำให้การจัดการหน่วยความจำแคชทำได้เร็วขึ้น ตัวอย่างเช่น หากระบบมีการอ้างตำแหน่งโดยใช้สัญญาแอดเดรส 16 เส้น เหมือนกับตัวอย่างที่ผ่านมา และหน่วยความจำหลักแบ่งข้อมูลเป็นบล็อก โดยเก็บข้อมูลได้บล็อกละ 8 ไบต์ ส่วนหน่วยความจำแคชจะเก็บข้อมูลได้ 256 บล็อกๆ ละ 8 ไบต์เช่นกัน ในการออกแบบจะแบ่งข้อมูลแอดเดรสทั้ง 16 บิตออกเป็น 2 ส่วน โดย 3 บิตต่ำจะเป็นตัวบอกว่าต้องการติดต่อกับข้อมูลไบต์ใดในบล็อก ส่วน 13 บิตสูงจะใช้เป็น Tag ระบบหน่วยความจำแคชลักษณะนี้จะต้องออกแบบหน่วยความจำขนาด 256x13 บิต เพื่อใช้เป็นหน่วยความจำ สำหรับเก็บ Tag ของบล็อกข้อมูลที่อ่านมาเก็บในแคชด้วย
26
การแม็ปปิงแบบสัมพันธ์ (Associative Mapping) ต่อ
เมื่อซีพียูต้องการข้อมูลจากหน่วยความจำ ซีพียูจะส่งสัญญาณแอดเดรสออกไป การทำงานต่างๆ จะเป็นดังขั้นตอนต่อไปนี้ (1) นำสัญญาณแอดเดรส 13 บิตบนที่เป็น Tag มาเก็บในรีจิสเตอร์พิเศษ (2) ค้นหาว่าค่าของ Tag ตรงกับค่าใน Tag ของแคชหรือไม่ ถ้าตรงให้ Match Bit เป็น 1 (3) ตรวจสอบบิตที่ใช้งานว่ามีข้อมูลอยู่หรือไม่ (4) ถ้าหากมีข้อมูลและเป็นข้อมูลที่ต้องการ ก็จะอ่านข้อมูลจากแคชในตำแหน่งที่สอดคล้องกันออกมาหนึ่งบล็อก (5) นำค่า 3 บิตต่ำของแอดเดรสมาเลือกว่าซีพียูต้องการข้อมูลในไบต์ใด แล้วจึงส่งข้อมูลในกับซีพียู การแม็บปิงด้วยวิธีการนี้จะมีความยืดหยุ่นมาก เนื่องจากบล็อกของข้อมูลจะเก็บในตำแหน่งใดของแคชก็ได้ แต่ก็มีข้อเสีย คือ เมื่อระบบทำงานแต่ละครั้งจะต้องนำ Tag มาเปรียบเทียบกับค่าที่ต้องการทั้งหมดซึ่งจะทำให้ระบบทำงานได้ช้า และวงจรที่ทำหน้าที่เปรียบเทียบทุกค่านี้ก็มีความซับซ้อนมากด้วย เนื่องจากการออกแบบวงจรเปรียบเทียบมักจะมีเกตแบบ XOR ทำให้วงจรของแคชนี้ใช้ XOR เป็นจำนวนมาก การทำงานในลักษณะนี้ หากในแคชไม่มีข้อมูลที่ต้องการและในแคชมีข้อมูลอยู่เต็ม ระบบจะอ่านข้อมูลจากบล็อกใหม่เข้าไปแทนที่ข้อมูลที่ไม่ได้ใช้แล้วหรือแทนที่ข้อมูลที่เก็บอยู่ในแคชมาแล้วเป็นเวลานานที่สุด ทั้งนี้ขึ้นอยู่กับผู้ออกแบบอัลกอริทึมของระบบจะเลือกวิธีใดมาใช้
27
การแม็ปปิงแบบกลุ่มสัมพันธ์ (Set-Associative Mapping)
การแม็ปปิงแบบกลุ่มสัมพันธ์ เป็นวิธีรวมวิธีการแม็ปปิงสองวิธีแรกมาไว้ด้วยกัน ทำให้ข้อมูลที่อยู่ในหน่วยความจำต่างบล็อกกันแต่อยู่ในกลุ่มเดียวกันมาเก็บอยู่ในหน่วยความจำแคชพร้อมกันได้ โดยแบ่งหน่วยความจำแคชออกเป็นหลายๆ ช่อง ถ้าหากแบ่งออกเป็น k ช่อง จะเรียกว่า k-Way Set Associative Mapping ตัวอย่างเช่น ถ้าหากมีระบบหน่วยความจำที่เก็บข้อมูลได้ 64 kB ใช้สัญญาณแอดเดรส 16 เส้น และมีการเก็บข้อมูลแบบ 2 กลุ่ม จะเรียกว่า Two Way Set Associative Mapping ในการออกแบบระบบลักษณะนี้หน่วยความจำแคชแต่ละแถวจะต้องมีข้อมูล 2 ชุด หาก 1 บล็อกมีขนาด 8 ไบต์ จะใช้หน่วยความจำ 3 บิตต่ำในการระบุว่าข้อมูลที่ต้องการ คือ ไบต์ใดในบล็อก ส่วนอีก 8 บิตถัดมาจะใช้เก็บหมายเลขบล็อก ส่วน 5 บิตสูงสุดจะเก็บ Tag และในหน่วยความจำที่เก็บ Tag ก็ต้องมีข้อมูลสองชุดเช่นกัน ถ้าหากระบบต้องการนำข้อมูลในบล็อกที่ 512 และบล็อกที่ 7680 มาเก็บในแคช จะทำให้ Tag มีค่าเป็น 2 และ 30 ดังภาพ ในระบบนี้จะเห็นได้ว่าถ้าหากกลุ่มของข้อมูลในแคชใหญ่ขึ้นก็จะทำให้อัตราการพบข้อมูลดีขึ้น แต่การทำงานของระบบก็จะซับซ้อนมากขึ้นตามไปด้วย
28
การออกแบบ Mapping Function
จากระบบหน่วยความจำแคชที่ได้ศึกษามา จะพบว่าการแม็ปปิงแต่ละวิธีมีข้อดีข้อเสียต่างกัน หน่วยความจำแคชจะมีขนาดเล็กกว่าหน่วยความจำหลัก และหน่วยความจำหลักจะถูกแบ่งออกเป็นบล็อกๆ ตัวอย่างดังนี้ หน่วยความจำแคชเก็บข้อมูลได้ 64 kByte การโอนย้ายข้อมูลระหว่างหน่วยความจำหลักกับหน่วยความจำแคชจะทำเป็นบล็อกครั้งละ 4 ไบต์ ทำให้หน่วยความจำแคชมีทั้งหมด 16k = 214 Cache Line หรือ 16k บล็อก หน่วยความจำหลักมีขนาด 16 Mbyte โดยใช้สัญญาณแอดเดรส 24 บิต (224 = 16 M) ทำให้หน่วยความจำหลักถูกแบ่งออกเป็นบล็อกๆ 4 ไบต์ ได้ทั้งหมด 4M บล็อก
29
การออกแบบ Mapping Function (ต่อ)
สำหรับการนำข้อมูลจากหน่วยความจำหลักมาเก็บในหน่วยความจำแคชจะใช้วิธีแม็ปปิงซึ่งมีวิธีการออกแบบอยู่หลายวิธี สำหรับวิธีที่เป็นพื้นฐานที่สุด คือ วิธีการแม็ปปิงแบบโดยตรง ตัวอย่างดังภาพ จากภาพ แสดงตัวอย่างของแม็ปปิงโดยตรง โดยแสดงว่าข้อมูลในหน่วยความจำหลักแต่ละบล็อกจะถูกเก็บในหน่วยความจำแคชใน Line หรือบล็อกลำดับที่เท่าใด โดยสามารถคำนวณได้ดังนี้ เมื่อ i = j modulo m i = หมายเลขบล็อก หรือ Cache Line j = หมายเลขบล็อกในหน่วยความจำหลัก m = จำนวนบล็อกหรือ Line ในหน่วยความจำแคช
30
การออกแบบ Mapping Function (ต่อ)
ถ้าหากนำแอดเดรสที่อ้างหน่วยความจำหลักมาแบ่งออกเป็น 3 ส่วน โดยบิตต่ำจำนวน w บิต จะใช้เป็นตัวชี้ว่าข้อมูลที่ต้องการเป็นไบต์ใดในบล็อกข้อมูล ซึ่งในหน่วยความจำหลักจะมีข้อมูลอยู่จำนวน 2S บล็อก โดยที่หน่วยความจำแคชจะมีส่วนที่เป็น Tag อยู่ s-r บิต เมื่อ r คือ บิตที่อ้างตำแหน่ง Line ในหน่วยความจำแคช (m=2r) ดังนั้น สรุปได้ดังนี้ ความยาวแอดเดรสเท่ากับ (s+w) บิต จำนวนเวิร์ดหรือไบต์ที่อ้างตำแหน่งหน่วยความจำได้ คือ 2(s+w) ขนาดของบล็อกหน่วยความจำหลักหรือขนาดของ Line เท่ากับ 2w ตำแหน่ง จำนวนบล็อกในหน่วยความจำหลักเท่ากับ 2s+w = 2s จำนวนแถว (Line) ในหน่วยความจำแคช m=2r ขนาดของ Tag เท่ากับ (s-r) บิต
31
การออกแบบ Mapping Function (ต่อ)
ดังนั้น เมื่อมีการแม็ปปิงจะทำให้หน่วยความจำแคชแต่ละบล็อกหรือ Cache Line เก็บข้อมูลในหน่วยความจำหลักที่มีหมายเลขบล็อกดังนี้ จากภาพ เป็นตัวอย่างการแม็บปิงโดยตรง โดยในตัวอย่างให้ m = 16K = 2^14 และ i = j modulo 2^14
32
การออกแบบ Mapping Function (ต่อ)
จากภาพ เป็นตัวอย่างการแม็บปิงโดยตรง โดยในตัวอย่างให้ m = 16K = 214 และ i = j modulo 214 ทำให้ในแต่ละ Cache Line เก็บค่าในหน่วยความจำที่มีแอดเดรสเริ่มต้นดังนี้ จะพบว่าหน่วยความจำแคชในแถวแรกจะเก็บค่าในหน่วยความจำหลักที่มีแอดเดรสเริ่มต้นเป็น , , …, FF0000 ซึ่งหมายความว่า ค่าของบิต Tag เป็น 00, 01, …, FF
33
ตัวอย่าง Direct Mapping
หากพิจารณาการทำงานของซีพียูเมื่อต้องการอ่านข้อมูลจากหน่วยความจำและมีระบบหน่วยความจำแคชประกอบอยู่ เมื่อซีพียูต้องการอ่านข้อมูล ระบบหน่วยความจำแคชจะตรวจสอบว่าข้อมูลในแอดเดรสที่ต้องการมีอยู่ในหน่วยความจำแคชหรือไม่ โดยระบบจะรับค่าแอดเดรสขนาด 24 บิตเข้ามา โดยข้อมูลที่เป็น Tag หรือ 8 บิตบนจะถูกนำมาเปรียบเทียบว่ามีค่าตรงกับค่าในแคชหรือไม่ ถ้าตรงกันซึ่งหมายความว่ามีข้อมูลที่ต้องการอยู่ในแคชจะใช้ 14 บิตต่อมาในการบอกว่าข้อมูลนั้นอยู่ใน Line ใดหรือบล็อกใดในแคช และใช้ 2 บิตต่ำ เพื่อบอกว่าซีพียูต้องการข้อมูลในตำแหน่งใดในบล็อกนั้นซึ่งมีอยู่ 4 ตำแหน่ง หากระบบคอมพิวเตอร์มีแอดเดรสบัส 32 บิต มีบัสข้อมูลที่อ่านเขียนได้ครั้งละ 64 บิต และมีหน่วยความจำแคชขนาด 256 kB โดยแต่ละแถวของแคชมีความยาว 32 ไบต์ ถ้าหากต้องการออกแบบให้ระบบงานเป็นแบบแม็ปปิงโดยตรงจะได้ว่า จำนวนบิตของ Displacement ที่ใช้บอกว่าข้อมูลอยู่ในไบต์ใดใน Cache Line นั้นๆ จะมีขนาด 5 บิต เนื่องจากขนาดของ Cache Line มีขนาด 32 ไบต์ จำนวนของ Cache Line จะมีได้เท่ากับ 256 kByte/ 32 Byte หรือ 8k หรือ 2^13 เนื่องจากแอดเดรสบัสมีขนาด 32 บิต โดยจะต้องมีบิตสำหรับ Displacement จำนวน 5 บิต และบิตสำหรับอ้าง Cache Line หรืออ้างบล็อก จำนวน 13 บิต ดังนั้น ความยาวบิตของ Tag = 32 – (13+5) หรือ 14 บิต เนื่องจากบัสข้อมูลของระบบมีขนาด 64 บิต หรือสามารถอ่านเขียนข้อมูลได้ครั้งละ 8 ไบต์ แต่หน่วยความจำแคชแต่ละแถวมีขนาด 32 ไบต์ ดังนั้น การอ่านข้อมูลแต่ละ Cache Line จะต้องทำการอ่าน 4 ครั้ง ดังนั้น หน่วยความจำแคชจะยังแบ่งออกได้อีกเป็น 4 ส่วน และต้องมีบิตที่ใช้เลือกอีก 2 บิต ซึ่งจะเป็น 2 บิตของ Displacement นั่นเอง
34
ตัวอย่างการออกแบบแม็ปปิงแบบสัมพันธ์
เมื่อระบบหน่วยความจำแคชได้ค่าแอดเดรสมา จะนำบิตกลุ่มบนมาเปรียบเทียบกับบิต Tag ทันที หากมีค่าตรงกันจะส่งข้อมูลในไบต์ที่ต้องการออกไป ถ้าระบบมีแอดเดรสบัสขนาด 16 บิต จะใช้ 12 บิตบนเป็น Tag และบิตล่างที่เหลือจะใช้ในการเลือกว่าต้องการติดต่อกับข้อมูลตำแหน่งใด
35
ตัวอย่างการออกแบบแม็ปปิงแบบสัมพันธ์ (ต่อ)
สำหรับการออกแบบแม็ปปิงแบบสัมพันธ์ (จากภาพตัวอย่างใน Slide ที่ 34) จะพบว่า ความยาวของบิตแอดเดรสเท่ากับ (s+w) บิต จำนวนตำแหน่งที่สามารถอ้างแอดเดรสได้เท่ากับ 2s+w เวิร์ดหรือไบต์ ขนาดของบล็อกข้อมูลเท่ากับ 2w เวิร์ดหรือไบต์ จำนวนบล็อกในหน่วยความจำหลักเท่ากับ 2s+w/2w หรือเท่ากับ 2s สำหรับจำนวนแถวในแคชจะมีได้ไม่จำกัด ขนาดของ Tag เท่ากับ s บิต
36
ตัวอย่างการออกแบบแม็ปปิงแบบสัมพันธ์ (ต่อ)
37
149
38
150
39
ประเด็นสำคัญ (ต่อ) โครงสร้างและระดับของหน่วยความจำในระบบคอมพิวเตอร์
40
การแบ่งระดับหน่วยความจำ
รีจิสเตอร์ (Register) เป็นหน่วยเก็บข้อมูลชั่วคราวที่อยู่ภายในซีพียู หน่วยความจำหลัก (Main Memory) เป็นหน่วยความจำภายนอกซีพียู หน่วยความจำสำรอง (Secondary Memory) เป็นหน่วยความจำที่มีเนื้อที่ในการเก็บข้อมูลมากกว่าหน่วยความจำหลัก หน่วยความจำแคช (Cache Memory) เป็นหน่วยความจำพิเศษที่เข้าถึงข้อมูลได้เร็วกว่าหน่วยความจำหลัก มีเนื้อที่น้อยกว่าหน่วยความจำหลัก ในระบบคอมพิวเตอร์หนึ่งๆ อาจมีแคชได้หลายตัว ลำดับการเข้าถึงหน่วยความจำแคช จะกำหนดให้แคชลำดับที่ 1 (Level 1) เป็นระดับที่เร็วที่สุด และจะอยู่ใกล้ซีพียูมากที่สุด
41
อ้างอิง ธีรวัฒน์ ประกอบผล และจันทนา ผ่องเพ็ญศรี. (2551). สถาปัตยกรรมคอมพิวเตอร์. กรุงเทพฯ: สมาคมส่งเสริมเทคโนโลยี (ไทย-ญี่ปุ่น). สัลยุทธ์ สว่างวรรณ. (2546). สถาปัตยกรรมคอมพิวเตอร์. กรุงเทพฯ: เพียร์สัน เอ็ดดูเคชั่น อินโดไชน่า.
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.