บทที่ 4 หน่วยความจำภายใน และภายนอก



บทที่ 4 หน่วยความจำภายใน และภายนอก

  (Internal and  External Memory)




               หน่วยความจำของคอมพิวเตอร์จะใช้ในการเก็บคำสั่งและข้อมูลขณะที่มีการประมวลผล  ภายในระบบคอมพิวเตอร์จะมีหน่วยความจำอยู่ 2 ประเภท คือภายใน (Internal) และ ภายนอก (External)  หน่วยความจำภายในนั้นเราไม่ได้หมายถึงหน่วยความจำหลัก (Main memory) เท่านั้น แต่ยังจะหมายถึงหน่วยความจำที่อยู่ภายในซีพียู (Local memory)   นอกจากนี้ภายใน CU  ซึ่งเป็นส่วนหนึ่งของ CPU นั้นก็ต้องการที่จะมีหน่วยความจำเป็นของตัวเองด้วย  ส่วนหน่วยความจำภายนอกนั้นเราจะหมายถึงอุปกรณ์เก็บข้อมูลอื่น ๆ ที่มักเรียกว่าเป็น peripheral storage devices เช่น ดิสก์ เทป ซึ่งติดต่อกับ CPU ด้วย I/O Controller

                คุณลักษณะอย่างหนึ่งของหน่วยความจำก็คือ ความจุ (Capacity) ซึ่งจะพูดกันในหน่วยของไบต์ (1 ไบต์ = 8 บิต)  หรือคำ (word)  ปกติแล้วคำจะมีความยาวขนาด 8, 16 หรือ 32 บิต  ข้อมูลทุกประเภทสุดท้ายจะถูกแปลงเป็นบิต 0 หรือ 1 ซึ่งอยู่ในรูปของเลขฐานสองเพื่อเก็บไว้ในหน่วยความจำ เมื่อต้องการใช้ก็จะมีการแปลงจากเลขฐานสองนั้นให้อยู่ในรูปแบบที่ต้องการ
                แนวคิดอีกอย่างที่เกี่ยวข้องกันคือ จำนวนหน่วยที่จะโอนย้ายได้ (Unit of Transfer) สำหรับหน่วยความจำภายในนั้น unit of transfer จะเท่ากับจำนวน data lines ที่เข้า-ออก หน่วยความจำ ซึ่งมันมักจะเท่ากับความยาวของคำ (แต่บางครั้งก็อาจจะไม่เท่าก็ได้)
                วิธีการในการเข้าถึงหน่วยความจำ (Method of accessing unit of data) เราอาจแบ่งได้เป็น 4 แบบตามชนิดของหน่วยความจำ คือ
1.        Sequential Access   เช่น การเข้าถึงเทป
2.        Direct Access เช่น การเข้าถึงดิสก์
3.        Ramdom Access เช่นการเข้าถึงหน่วยความจำหลัก
4.        Associative เช่น การเข้าถึงหน่วยความจำแคช
ประสิทธิภาพของหน่วยความจำ จะพิจารณาถึงตัวแปร 3 ตัวนี้คือ
1.        Access Time : หมายถึงเวลาที่ใช้ไปในการทำการอ่านหรือเขียนข้อมูล (เวลาที่จะนำข้อมูลไปไว้ยังตำแหน่งของหน่วยความ
จำที่ระบุไว้ หรือเวลาที่นำข้อมูลออกจากหน่วยความจำจากตำแหน่งที่ระบุไว้)
2.        Memory Cycle Time : เป็นแนวคิดที่พัฒนามาใช้กับ RAM ซึ่งประกอบด้วย เวลาในการเข้าถึงข้อมูล (access time) บวกกับ
เวลาก่อนที่การเข้าถึงครั้งต่อไปจะเริ่มขึ้น
3.        Transfer Rate : เป็นอัตราส่วนที่ข้อมูลสามารถจะถูกเคลื่อนย้ายเข้าหรือออกจากหน่วยความจำได้ใน 1 หน่วยเวลา
 

1. หน่วยความจำ (Type of Memory)

            หน่วยความจำของเครื่องคอมพิวเตอร์ใช้ในการเก็บตัวคำสั่งในโปรแกรมและข้อมูลที่ใช้ ทั้งสองส่วนนี้จะถูกเก็บลงในหน่วยความจำขณะที่มีการประมวลผล ขนาดของหน่วยความจำจะเป็นไบต์ (Byte) เช่น 32 Mbytes แต่ละไบต์มีขนาด 8 บิต (Bit)  ซึ่งข้อมูลแต่ละบิตจะมีค่าได้ 2 อย่างคือ 0 กับ 1 ดังนั้นข้อมูลชนาด 1 ไบต์จึงมีค่าต่างกันได้ถึง 256 ค่า ข้อมูลทุกประเภทจะถูกเก็บโดยการแปลงเป็นบิตลงหน่วยความจำ เมื่อจะนำขึ้นมาใช้ก็แปลงกลับเป็นข้อมูลที่ต้องการ อาจแบ่งประเภทของหน่วยความจำได้ดังนี้

1.1 หน่วยความจำหลัก


หน่วยความจำชนิดรอม (ROM : Read Only Memory)

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

หน่วยความจำชนิดแรม (RAM : Random Access Memory)

 เป็นหน่วยความจำชนิดที่เก็บช้อมูลเอาไว้เพื่อให้โปรแกรมสามารถนำมาใฃ้งานได้ในทันทีที่ต้องการ ทั้งในส่วนของคำสั่งของโปรแกรมและข้อมูลที่ป้อนเข้าไป เป็นส่วนที่จะมีการเปลี่ยนแปลงอยู่ตลอดเวลาระหว่งางที่กำลังทำงานกับโปรแกรมอยู่ จะเป็นการเก็บไว้เพียงชั่วคราว และจะหายไปเมื่อปิดเครื่องหรือไฟฟ้าดับ นั่นคือแรมจะต้องมีไฟฟ้าคอยเลี้ยงตลอดเวลา โดยปกติทั่วไปหากบอกว่าคอมพิวเตอร์เครื่องนี้มี Memory 32 MB จะหมายถึงเครื่องคอมพิวเตอร์นั้นมี RAM 32 MB    แรมเป็นทรัพยากรที่มีค่ามากของคอมพิวเตอร์ และดูเหมือนว่าเครื่องมีแรมเท่าไรก็มักจะไม่พอต่อความต้องการ (ทั้งของเราและของโปรแกรม application)





ชนิดของแรมตามรูปร่าง

-          DIP RAM (Dual In-Line Package RAM)  เป็นแรมยุคแรก มีลักษณะสีดำ มีขายื่นออกมาสองแถวคล้ายตะขาบ ยึดติดบน

บอร์ดโดยใส่ลงใน socket มีความจุตัวละ 64 กิโลบิต หรือ 256 กิโลบิต ปัจจุบันมักจะใช้เป็นแรมจอภาพ (Video RAM)




-          SIMM RAM (Single In-Line Memory Module RAM)  จะมีทั้งแบบ 30 พิน และ 72 พิน ข้อแตกต่างคือ SIMM 30  พินจะมี

9 บิตบนตัวแรม ส่วน SIMM 72  พิน จะมี 36 บิต และ  SIMM 30  พินจะมีขนาดเล็กกว่า 72 พิน





ชนิดของแรมตามเทคโนโลยี

ความเร็วของตัวประมวลผลที่เพิ่มขึ้นย่อมต้องการส่วนประกอบต่าง ๆ ของระบบที่เร็วขึ้นเช่นกัน ตั้งแต่อดีตจนถึงปัจจุบันบัสของหน่วยความจำจะทำงานช้ากว่าตัวประมวลผล จึงมีการพัฒนาเทคโนโลยีหน่วยความจำแบบต่าง ๆ ดังนี้

-          DRAM (Dynamic RAM)

 เป็นมาตรฐานของ Main Memory มีชื่อเรียกอีกอย่างหนึ่งว่า Fast Page Mode DRAM นอกจากต้องมีไฟฟ้าเลี้ยงตลอด

เวลาแล้ว แรมชนิดนี้จะต้องทำการ Recharge อยู่เสมอ คือจะคอยป้อนไฟเลี้ยงให้กับตัวเก็บประจุที่มีค่าเป็น 1 เป็นระยะ   DRAM จะเก็บแต่ละค่าของบิตลงในหน่วยความจำ (Memory Cell)  ซึ่งประกอบด้วยส่วนประกอบ 2 ส่วนคือ Capacitor และ Transistor ซึ่ง Capacitor เป็นอุปกรณ์อิเล็กทรอนิกส์ที่สามารถเก็บประจุของอิเล็กตรอนได้ ส่วน Transistor เป็นสวิทช์อิเล็กทรอนิกส์ที่สามารถเปิดหรือปิดได้โดยอาศัยการลดลงหรือเพิ่มขึ้นของแรงดันไฟฟ้า ที่ไหลเข้ามาใน Transistor  การทำงานของ DRAM  จะเริ่มจากการถูกร้องขอข้อมูล จะทำการจัดลำดับการค้นหาข้อมูลนั้น แล้วเริ่มทำการค้นหาข้อมูลโดยเริ่มที่คอลัมน์แรกของหน่วยความจำ ข้อมูลที่เก็บอยู่ในหน่วยความจำจะถูกนำมาตรวจสอบ และใส่กลับเข้าในในระบบจนกระทั่งพบข้อมูลที่ต้องการ การค้นหาข้อมูลจะหยุดลงและเตรียมพร้อมสำหรับการค้นหาข้อมูลลำดับต่อไป หรือจากการถูกร้องขอครั้งใหม่  (นี่คือหลักของ wait state  เพราะระหว่างที่หยุดรอการค้นหาข้อมูล ซีพียูก็จะหยุดรอการทำงานของหน่วยความจำจนหว่าจะเริ่มการทำงานใหม่อีกครั้ง ส่วนบัฟเฟอร์ของ data output ก็จะปิดการทำงานลงจนกว่าจะเริ่มการค้นหาข้อมูลใหม่อีกครั้ง แ ละแม้ว่าข้อมูลที่ถูกจัดอันดับให้ค้นหาต่อไป จะมีตำแหน่งติดกับข้อมูลที่ถูกค้นหาไปก่อนหน้านี้ แต่การค้นหาข้อมูลจะเริ่มต้นที่คอลัมน์แรกของหน่วยความจำเสมอ

-          SRAM (Static RAM)

รูปแบบพื้นฐานของ SRAM คือ การใช้โครงสร้างแบบ Asynchronous ค่าของบิตที่เก็บในเซลหน่วยความจำจะถูกแทนด้วย

สถานะของการ Flip-Flop  แทนการเป็นประจุใน Capacitor  การ  Flip-Flop เป็นการเรียงตัวของทรานซิสเตอร์และรูปแบบของสวิตช์อิเล็ก
โทรนิกส์ของรีจิสเตอร์ ซึ่งสามารถเปิดปิดได้ ซึ่งมันจะคงสภาวะนั้นไว้ขณะที่ยังมีกระแสไฟฟ้าอยู่
SRAM จะดีกว่า DRAM ตรงที่ว่าไม่ต้องคอย Recharge ไฟบ่อย ๆ  ทำให้การทำงานเร็ว แต่ก็มีข้อเสียคือจะกินไฟมากกว่า และแพงกว่า นิยมนำไปทำเป็นหน่วยควมจำชนิดแคช (Cache Memory)

-          EDO DRAM (Extended RAM)

หรือเรียกอีกอย่างหนึ่งว่ Htyper Page Mode DRAM  มีพื้นฐานมาจาก FPM DRAM  ดังนั้นการทำงานจะคล้ายกัน เริ่มจาก

การจัดลำดับการค้นหา แล้วจึงเริ่มการค้นหาตามคอลัมน์ เพียงแต่ว่าเมื่อพบข้อมูลที่ต้องการแล้ว แทนที่การค้นหาจะหยุดลงและปิดการทำงานของบัฟเฟอร์ data output  หน่วยความจำแบบ EDO จะเก็บบัฟเฟอร์ของ data output ไว้จนกระทั่งการค้นหาข้อมูลเริ่มต้นใหม่อีกครั้งหนึ่ง การเปิดการทำงานของบัฟเฟอร์ไว้ตลอดทำให้ wait state ของ burst transfer rate ของหน่วยความจำแบบ EDO เร็วขึ้น



ความเร็วของแรม

                หมายถึง ความเร็วที่ใช้ในการเข้าถึงข้อมูลในหน่วยคววมจำ (Access Time) การเข้าถึงข้อมูลก็คือ การอ่าน (Read) หรือเขียน (Write) ข้อมูลในหน่วยความจำ (Memory) วัดเป็น นาโนเซกัน (Nano Second) หรือ หนึ่งส่วนพันล้านวินาที เช่น ความเร็วเป็น 50, 60 และ 70 nanosec  ตัวเลขยิ่งน้อยก็ยิ่งเร็วเพราะใช้เวลาน้อยกว่า



หน่วยความจำชนิดแคช (Cache)

เป็นหน่วยความจำแบบแรมชนิดหนึ่ง เพราะข้อมูลที่อยู่ใน Cache จะหายไปเมื่อปิดเครื่องหรือไฟฟ้าดับ  แต่ Cache จะมีความเร็วในการรับส่งข้อมูลกับ CPU ได้เร็วกว่า RAM ปกติ จึงนำ Cache มาใช้สำหรับเก็บข้อมูลที่เรียกใช้บ่อยๆ ซึ่งจะทำให้ความเร็วในการเข้าถึงข้อมูลโดยรวมสูงขึ้น ดังนั้นเวลาที่ CPU ต้องการข้อมูลก็จะไปดูที่ Cache ก่อน ถ้ามีก็เอาจาก Cache มาเลย หากไม่มีค่อยไปดูที่ RAM ยิ่งมี Cache  สูงเท่าไรก็ยิ่งทำให้เครื่องเร็วขึ้นเท่านั้น แบ่งประเภทเป็น

-          L1 & L2 Cache  เป็น Cache Memory  ที่คั่นการรับส่งข้อมูลระหว่าง CPU กับ Main Memory

-          Disk Cache  เป็น  Cache Memory   ที่คั่นการรับส่งข้อมูลระหว่าง CPU กับ Disk เพื่อให้เร็วขึ้น



Disk Cache

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


Hit Rate
                 หมายถึง อัตราส่วนของจำนวนครั้งในการอ่านข้อมูลจากแคชต่อจำนวนครั้งในการอ่านข้อมูลทั้งหมดจากหน่วยความจำ Hit Rate ยิ่งสูงยิ่งดี เพราะหมายถึงสามารถเก็บข้อมูลที่ใช้บ่อย ๆ เป็นส่วนใหญ่ไว้ในแคช

การทำงานของ Cache

ยกตัวอย่างของการอ่าน  เริ่มจาก CPU จะ generate address (RA) ของคำที่ถูกอ่านขึ้นมา ถ้าคำนั้นมีอยู่ใน cache มันจะถูกส่งไปให้กับ CPU แต่ถ้าไม่มี บล๊อกของคำที่ถูกอ่านขึ้นมานั้นจะถูกโหลดไปไว้ใน cache และคำนั้นก็จะถูกส่งไปให้กับ CPU

4.2  หน่วยความจำสำรอง

ฟลอปปี้ดิสก์ (Floppy Disk)

              เป็นแผ่นพลาสติกที่ทำจากวัสดุไมล่าบาง ๆ เคลือบด้วยสารออกไซด์ที่สามารถทำให้มีสภาพเป็นเหล็กได้ บรรจุอยู่ในซองที่ทำหน้าที่ป้องกัน มีการเก็บข้อมูลไว้บนผิวของแผ่นพลาสติก diskette มักถูกใช้ในการแจกจ่ายซอฟต์แวร์ การส่งไฟล์ หรือการสำรองข้อมูล

               ผิวแผ่นดิสก์ที่ฉาบด้วยสารแม่เหล็กจะแบ่งเป็นแนววงกลมคล้ายกับร่องของแผ่นเสียง เรียกว่า Track ซึ่งจะมีหลาย track ซ้อน ๆ กันเป็นวงแหวน แต่ละวงจะถูกแบ่งเป็นพื้นที่ย่อย ๆ เรียกว่า Sector ซึ่งในการบันทึกข้อมูลจะทำการบันทึกลงบน sector เหล่านี้ จำนวน track และ sector นี้จะแตกต่างกันขึ้นอยู่กับวิธีการจัดเก็บข้อมูล หรือที่เรียกว่าการ Format นั่นเอง

               ความจุของแผ่นดิสก์ = จำนวนด้าน * จำนวน track * จำนวน sector * จำนวนไบต์ใน sector

เช่น แผ่นดิสก์ขนาด 3.5 นิ้ว ในแต่ละด้านจะแบ่งเป็น 40 แทรค แทรคละ 36 เซกเตอร์ หนึ่งเซกเตอร์เก็บข้อมูลได้ 512 ไบต์ ดังนั้น จะมีความจะ 2 * 40 * 36 * 512 = 1,474,560 ไบต์ หรือประมาณ 1.44 เมกะไบต์ 




จุดประสงค์ของการ format

1. เพื่อจัดเก็บพื้นที่สงวน (Reserve Area) ซึ่งประกอบด้วย

             - Boot Record หรือ Boot Sector ซึ่งจะอยู่ที่ sector 0 ของดิสก์

             - FAT (File Allocation Table) คือพื้นที่ที่ถัดจาก boot sector จะสงวนไว้ใช้สำหรับเก็บข้อมูลว่าไฟล์ถูกเก็บไว้เซกเตอร์ไหนบ้าง และมีการเรียงลำดับกันอย่างไร

2. พื้นที่ที่เหลือให้เก็บข้อมูล โดยแบ่งเป็น sector ที่เท่า ๆ กัน ในการเก็บข้อมูลจะต้องเก็บอย่างน้อย 1 เซกเตอร์

3. กำหนดหมายเลข sector แบบสัมพันธ์กัน (Relative Sector Numbering) 






ฮาร์ดดิสก์ (HardDisk)

                 เป็นอุปกรณ์เก็บข้อมูลที่มีลักษณะการทำงานคล้ายกับฟลอปปี้ดิสก์ แต่มีความจุของข้อมูลและความเร็วในการเข้าถึงข้อมูลสูงกว่า โครงสร้างภายในของฮาร์ดดิสก์จะประกอบด้วยแผ่นอลูมิเนียมเคลือบด้วยสารแม่เหล็กหลายแผ่นเรียงซ้อนกันเป็นแผ่นดิสก์เรียกรวมกันว่า Platters หมุนด้วยความเร็วประมาณ 3,600 รอบต่อวินาที ทำให้สามารถเก็บข้อมูลได้รวดเร็วและจำนวนมาก หัวอ่าน-เขียนของ HD จะไม่ได้สัมผัสกับแผ่นเหมือนกับ FD โดยจะลอยอยู่เหนือแผ่นที่เคลือบด้วยสารแม่เหล็กห่างประมาณ 4 ไมครอน

                  Harddisk Controller เป็นอุปกรณ์ที่อยู่ภายในเมนบอร์ดของเครื่องคอมพิวเตอร์ ทำหน้าที่แปลงข้อมูลและควบคุมสัญญาณต่าง ๆ ให้เหมาะสมกับ drive ของ HD แต่ละชนิด และเชื่อมต่อวงจรภายในของคอมพิวเตอร์ให้เข้ากับกลไกของ HD

ชนิดของ Controller

                  - ESDI (Enhanced Small Device Interface) มีอัตราการรับส่งตั้งแต่ 10-24 เมกะบิตต่อวินาที ปัจจุบันไม่ค่อยใช้แล้ว

                   - IDE (Intelligent Drive Electronics) บน HD แบบ IDE จะมีวงจรควบคุมอยู่ในตัวเอง และใช้ controller card เป็นตัวเชื่อมต่อกับระบบบัสของบอร์ด IDE มีข้อดีในแง่ที่ความเชื่อถือในการใช้งานสูง และราคาถูก อัตราการส่งจะเร็วกว่า ESDI ถึง 2 เท่า

                  - SCSI (Small Computer Systems Interface) ความเร็วในการรับส่งข้อมูลอยู่ระหว่าง 4-10 เมกะบิตต่อวินาที แต่ SCSI สามารถต่อกับอุปกรณ์ได้มากแบบ และง่าย นอกจากนี้ SCSI ยังมีวงจรควบคุมอยู่ในตัวเองเช่นเดียวกับ IDE

                  ความจุของ HD ในปัจจุบันนิยมวัดเป็น GB (1,000,000,000 ตัวอักษร) ยิ่งความจุมากก็จะสามารถเก็บข้อมูลได้มาก และราคาก็

ยิ่งสูงขึ้นตามไปด้วย ซึ่งสามารถคำนวณได้จากสูตร

                  ความจุ = จำนวนไซลินเดอร์ * จำนวนด้าน * จำนวนเซกเตอร์ * จำนวนไบต์ในเซกเตอร์ 




ซีดีรอม (CD-ROM : Compact Disc Read Only Memory)

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

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




ซิปไดรว์ (Zip Drive)

                 เป็นอุปกรณ์ที่สามารถเก็บข้อมูลขนาด 230 MB ลงบนแผ่นขนาด 3.5 นิ้ว Zip Disk ซึ่งจะมีทั้งแบบที่เป็น Internal หรือ External 




เทป (Tape)

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


2. ลำดับชั้นของหน่วยความจำ (Memory Hierarchies)


                 ตามปกติแล้วระบบจะให้หน่วยความจำที่มีความเร็วสูงไว้ข้างบน ใกล้ ๆ กับ CPU ซึ่งขนาดของหน่วยความจำนี้ไม่จำเป็นต้องใหญ่มากนัก แต่จะมีความเร็วในการ access หรือการเข้าถึงสูง เพราะใช้อัตราความเร็วในการ access หรือใช้ clock rate เดียวกับ CPU  เมื่อมีการเรียกใช้คำสั่งหรือที่เรียกว่า working set ชุดหนึ่ง เราจะเอากลุ่มคำสั่งเหล่านี้ไปไว้ในหน่วยความจำที่มีความเร็วสูงที่อยู่ติดกับ CPU รวมทั้งเอาหน่วยความจำตำแหน่งที่ใกล้ ๆ กับตำแหน่งของ working set ในหน่วยความจำไปเก็บไว้ในหน่วยความจำที่มีความเร็วสูงนี้ด้วย โดยอาศัยหลักการของ Locality of Referecne คือโปรแกรมต่าง ๆ ไม่ว่าจะเขียนด้วยภาษาอะไรก็ตาม จะมีคุณสมบัติที่ว่าเมื่อมีการเรียกใช้คำสั่งใดในโปรแกรมแล้วการเรียกใช้ซ้ำอีกครั้งหนึ่งนั้นจะเกิดขึ้นอีกเสมอ  ดังนั้นเมื่อมีการเรียกใช้คำสั่งนั้นซ้ำอีกครั้งก็จะสามารถหาคำสั่งนี้ได้จากหน่วยความจำที่มีความเร็วสูงนี้เอง โดยไม่ต้องไปหาที่หน่วยความจำหลักหรือ RAM ซึ่งมีการเข้าถึงที่ช้ากว่า หน่วยความจำที่มีขนาดเล็ก อยู่ใกล้กับ CPU และมีความเร็วในการเข้าถึงสูงนี้ เรารู้จักกันในชื่อของ Cache ซึ่ง Cache ที่อยู่ติดกับตัว CPU เราจะเรียกว่าเป็น Cache Level1 หรือ L1  ส่วน Cache ที่อยู่นอก CPU จะเรียกว่า Cache Level2 หรือ L2

                   ตามปกติแล้ว Cache L1 จะมีราคาแพงและขนาดเล็ก Level ถัดไปจะใหญ่ขึ้นเรื่อย ๆ เมื่อค้นหาใน L1 ไม่เจอก็จะมีการค้นหาใน Level ลำดับถัดไป แล้วจึงย้ายข้อมูล (transfer) ขึ้นไปตามลำดับขั้นของหน่วยความจำ การ transfer นั้นเราทำกันเป็นชุดของข้อมูลที่เรียกว่า block  และเนื่องจากหน่วยความจำ level แรก ๆ นั้นมีขนาดเล็กจึงต้องมีการสลับเข้า-ออก (rolled in – rolled out) ของ block หรือข้อมูลในหน่วยความจำขนาดเล็กนั้น ข้อความใดที่เมื่อถูกโหลดเข้ามาใน Cache ครั้งแรกแล้วไม่มีการถูกใช้อีกเลยก็จะถูก rolled out ออกไปจาก Cache เพื่อให้มีที่สำหรับข้อความที่ CPU ต้องการใช้
                ปัจจัยที่มีผลทำให้หน่วยความจำมีประสิทธิภาพ และทำงานได้รวดเร็ว
1. ความเป็น Locality ของโปรแกรม เช่น โปรแกรมนั้นมีการเขียนที่เป็นแบบ Structure Programming คือมีการทำ Recursive หรือมีการวน loop การทำงาน ทำให้ใช้คำสั่งเดิม ๆอยู่ตลอดเวลา จึงไม่ต้องมีการสลับเข้า-ออกของคำสั่งในหน่วยความจำ
2.  ความเร็วในการเข้าถึง (access time) ของหน่วยความจำแต่ละ level 
3.  ขนาดความจุของหน่วยความจำในแต่ละ level
4.  ขนาดของ block ที่ใช้ในการ transfer ในแต่ละ level
5.  อัลกอริทึม หรือ ยุทธิวิธีที่ใช้ในการกำหนดตำแหน่ง หรือการแทนที่ในหน่วยความจำแต่ละ level

                วิธีเพิ่มประสิทธิภาพการทำงานของหน่วยความจำ
1. ลด access time ในหน่วยความจำ โดยการพัฒนาเทคโนโลยีของ SRAM และ DRAM ให้มี access time เร็วขึ้น
2. ทำหน่วยความจำให้เป็นแบบ interleaved โดยการแบ่งหน่วยความจำออกเป็นหลาย ๆ module ที่สามารถ access ได้พร้อมๆ กัน เป็นการทำงานแบบขนาน แต่ละ module จะทำงานได้เป็นอิสระต่อกัน ซึ่งจะทำให้ใน 1 รอบของการ access (1 cycle access) สามารถ transfer ได้ทีละหลาย word  งานแบบนี้มักพบในเครื่องขนาดใหญ่ เช่น mainframe หรือ super computer เพื่อให้สามารถบริการงานหลาย ๆ อย่างพร้อม ๆ กัน
3. Cache memory คือเพิ่มหน่วยความจำที่มีความเร็วสูงขึ้นมาระหว่าง CPU กับ Main memory
4. Associative memory คือเพิ่มหน่วยความจำพิเศษ ซึ่งจะมี Hardware ที่ช่วยในการค้นหาข้อมูลได้เร็วขึ้น คือแทนที่จะมีการค้นหาทีละลำดับของ address ก็จะใช้ content เป็น key ในการค้นหาโดยค้นหาพร้อมกัน (ไม่ใช้ค้นหาเป็นลำดับหรือ sequential)

Cache Memory
          เป็นหน่วยความจำที่มีความเร็วสูง จะอยู่ระหว่าง CPU กับ Main memory  ตามปกติโปรแกรมที่เขียนตามหลักของ Locality      แล้วจะมีการเรียกใช้คำสั่งที่ซ้ำ ๆ กันบ่อย ๆ ดังนั้นถ้าเรานำเอาคำสั่งที่อยู่ในหน่วยความจำหลักมาไว้ยังอีกหน่วยความจำหนึ่งที่อยู่ใกล้ชิดกับ CPU และมีความเร็วในการ access สูง ก็จะทำให้โปรแกรมนั้นสามารถทำงานได้เร็วขึ้น เพราะไม่ต้องไปเรียกหาคำสั่งที่ต้องการจากหน่วยความจำหลัก (RAM) ทุกครั้ง ประสิทธิภาพของ Cache จะขึ้นอยู่กับอัตราการเจอข้อมูลใน Cache (Hit Ratio) ซึ่งปกติจะอยู่ระหว่าง 95-99%
                หน่วยความจำ Cache จะถูกแบ่งออกเป็น blocks หรือเป็น lines แต่ละ block จะมี tag  ซึ่งจะบอกถึงแอดเดรสเริ่มต้นของ block ในหน่วยความจำหลัก ตามปกติแล้ว  k bit แรกของ physical address จะเป็น tag  พิจารณารูปของ Cache memory
k bit แรกของ physical address จะถูกเปรียบเทียบกับ tags ในหน่วยความจำแคช (ในการเปรียบเทียบหรือการ search จะมี hardware ที่ช่วยในการ search ซึ่งจะทำให้รวดเร็วกว่าการ search หรือการเปรียบเทียบทีละ addresss) ถ้าตรงกันหรือ match กัน จะเรียกว่า cache hit  ส่วนที่เหลือของ physical addreess จะไปเลือกข้อความที่ต้องการจาก line ของ tag นั้น  แต่ถ้าไม่ match จะเรียกว่า cache miss  block ที่ถูกอ้างถึงนั้นจะต้องถูกย้ายจากหน่วยความจำหลักเข้าไปไว้ใน cache  ในขณะเดียวกัน block นั้นก็จะถูกเคลื่อนย้าย หรือ transfer ไปที่ CPU เพื่อ access ด้วย   

                สิ่งที่ต้องคำนึงถึงในการออกแบบ Cache memory
1. address mapping ระหว่างหน่วยความจำกับแคช คือกำหนดว่าจะใช้กี่บิตในการที่จะไป match กับ tag ในแคชจึงจะมีประ
สิทธิภาพมากที่สุด นอกจากนี้ยุทธวิธีหรือนโยบายในการแทนที่ กรณีที่แคชเต็มและเกิด cache miss ต้องมีการ transfer ข้อมูลจากหน่วยความจำมาไว้ที่แคช จะแทนที่ตำแหน่งไหน หรือจะ roll out ส่วนไหนออกไป
2. เมื่อมีการ update ข้อมูลที่ cache แล้ว เราควรจะ update ข้อมูลที่อยู่ในหน่วยความจำหลักพร้อม ๆ กันหรือไม่ เพราะ line ที่
อยู่ใน cache นั้นจะเป็น image หรือเป็นคู่แฝดกับ line ที่อยู่ใน main memory ดังนั้นข้อมูลก็ควรจะเหมือนกัน ในการ update เราอาจไม่จำเป็นต้อง update main memory ทันทีก็ได้ แต่หลังจากที่จบการทำงานแล้ว ข้อมูลทั้งหมดใน cache ที่ match กับข้อมูลใน main memory ควรจะเหมือนกัน

การ update main memory นั้นจะมีอยู่ 2 วิธีคือ
-          copy back / write back  คือเมื่อมีการ update จาก CPU จะ update เฉพาะใน cache จนกระทั่งเมื่อจะมีการ replace
line เกิดขึ้น คือเมื่อจะมีการ load line ใหม่จาก main memory มาทับ line ใน cache จึงจะ write line ที่จะถูก copy นั้นกลับไปที่ main memory ก่อน (ทั้ง line) แล้วจึงทำการ replace line การทำวิธีนี้มีข้อดี คือ ทำให้ใช้เวลาในการ access น้อย เพราะไม่ต้องมีการ update ใน main memory ทุกครั้งที่มีการแก้ไขข้อมูล
-          วิธี write through คือ มีการ update main memory ทุกครั้งที่มีการ update ใน cache ทำให้การ access memory สูง แต่
ข้อมูลใน cache และ main memory จะตรงกัน วิธีนี้จะพบปัญหาถ้าหากว่าใช้กับระบบ multi-processor คือ processor แต่ละตัวจะมี cache ของตัวเอง และต่างก็จะ load line จาก main memory มาไว้ที่ cache ของตัวเอง ดังนั้นเมื่อเวลามีการ update cache ของแต่ละ processor ก็จะมีการ update ที่ main memory ด้วย ดังนั้นข้อมูลที่ update ของ cache หนึ่งอาจจะเป็นข้อมูลที่ไม่ได้ update จากอีก cache หนึ่งก็ได้ เรียกว่าการเกิด consistency ระหว่าง cache กับ main memory ซึ่งวิธีการแก้ปัญหาทำได้โดยการใช้ hardware ช่วย ซึ่งมีอยู่ 2 วิธี คือ
                     
(1)  มีการ broadcast บอกกับ cache ตัวอื่นว่าจะมีการ update line ใน main memory ดังนั้นถ้ามี line ดังกล่าวอยู่ใน cache ตัวใดก็จะมีการ update line นั้นใน cache ตัวนั้นด้วย 
                      (2)  ใช้การ snooping คือให้ cache ทุกตัวมี hardware สำหรับคอยตรวจสอบการเปลี่ยนแปลงบน bus ถ้ามีการ update line ใน main memory ก็จะมีการตรวจสอบว่ามี line ดังกล่าวอยู่ใน cache ตัวใดบ้าง และ update cache ตัวที่มี line เหล่านั้นอยู่

 


























































































ไม่มีความคิดเห็น:

แสดงความคิดเห็น