Cute Dog Bopping Head

วันเสาร์ที่ 28 พฤศจิกายน พ.ศ. 2558

โครงสร้างภายในซีพียู

โครงสร้างภายในซีพียู

โครงสร้างภายในซีพียู

                ซีพียูจะทำงานตามคำสั่งที่ผู้ใช้ป้อนเข้าไป ซึ่งคำสั่งดังกล่าวจะถูกเก็บในหน่วย ความจำหลัก ดังนั้นซีพียูจะต้องทำงานดังต่อไปนี้

- ดึงคำสั่งเข้ามา (fetch instruction) คือการที่ซีพียูอ่านคำสั่งมาจากหน่วยความจำหลักเข้ามาเก็บไว้ภายในตัวซีพียู

- แปลความหมายของคำสั่ง (interpret instruction) คำสั่งจะถูกแปลความหมาย เพื่อจะได้ทราบว่า คำสั่งนั้นต้องการ
ให้ทำงานอย่างใด

- ดึงข้อมูล (fetch data) การประมวลผลคำสั่งเครื่องหนึ่งคำสั่ง อาจจำเป็นต้องอ่านข้อมูลจากหน่วยความจำหลักหรืออุปกรณ์ไอโอเข้ามาด้วย

- ประมวลผลข้อมูล (process data) การประมวลผลคำสั่งอาจเกี่ยวข้องกับการทำงานทางคณิตศาสตร์หรือตรรกะ

- การบันทึกข้อมูล (write data) ผลการประมวลผลข้อมูลอาจต้องการให้บันทึกผลลัพธ์ที่ได้ไว้ในหน่วยความจำหลักหรืออุปกรณ์ไอโอ

การจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู

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

1) รีจีสเตอร์ที่ผู้ใช้มองเห็นได้ รีจีสเตอร์ในกลุ่มนี้อนุญาตให้คำสั่งในโปรแกรมสามารถลดการอ้างอิงข้อมูลในหน่วยความจำหลักโดยนำรีจีสเตอร์มาใช้งานแทน

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

รีจีสเตอร์ส่วนที่ผู้ใช้มองเห็น

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

โดยซีพียู รีจีสเตอร์กลุ่มนี้แบ่งออกเป็นประเภทดังนี้

- รีจีสเตอร์ใช้งานทั่วไป สามารถนำไปใช้งานได้หลายหน้าที่ตามที่ผู้พัฒนาโปรแกรมต้องการ แต่อาจมีรีจีสเตอร์บางตัวถูกกำหนดไว้ใช้งานกับเลขจำนวนจริงหรือเป็นตัวชี้ตำแหน่งในสแต๊ก ในบางกรณีรีจีสเตอร์ใช้งานทั่วไปสามารถนำไปใช้งานในการกำหนดที่อยู่เช่น การอ้างอิงที่อยู่แบบรีจีสเตอร์ทางอ้อมหรือแบบดีสเพลชเมนต์ ตัวอย่าง รีจีสเตอร์ใช้งานทั่วไป ได้แก่ รีจีสเตอร์เก็บข้อมูลของซีพียู 8086 (AX, BX, CX, และ DX) เป็นต้น

- รีจีสเตอร์สำหรับเก็บตำแหน่งที่อยู่ อาจเป็นรีจีสเตอร์สำหรับใช้งานทั่วไป หรือเป็นรีจีสเตอร์ที่กำหนดให้ใช้การอ้างอิงเกี่ยวกับตำแหน่งที่อยู่โดยตรง ตัวอย่าง รีจีสเตอร์เหล่านี้ ได้แก่

- ตัวชี้ตำแหน่งเซ็กเมนต์ (segment pointers) : ในเครื่องที่ใช้วิธีกำหนดตำแหน่งที่อยู่แบบเซ็กเมนต์ จะมีรีจีสเตอร์เซ็กเมนต์(segment register) ในบางกรณีอาจมีการใช้รีจีสเตอร์มากกว่าหนึ่งตัว เช่น ตัวหนึ่งใช้สำหรับระบบปฏิบัติการและอีกหนึ่งใช้สำหรับโปรเซสที่กำลังถูกประมวลผล

- ตัวชี้ตำแหน่งดรรชนี (index registers) : รีจีสเตอร์ในกลุ่มนี้ใช้สำหรับการกำหนดตำแหน่งที่อยู่แบบ indexed
addressing และอาจเป็นชนิด autoindexing ก็ได้

- ตัวชี้ตำแหน่งในสแต็ก (stack pointer) : ถ้าคอมพิวเตอร์นั้นใช้ระบบ user-visible stack addressing
สแต็กที่นำมาใช้งานจะะเก็บอยู่ในหน่วยความจำและจะมีจีสเตอร์ตัวหนึ่งที่ใช้ในการชี้ตำแหน่งข้อมูลตัวบนสุดในสแต็กนั้นวิธีการนี้ช่วยให้สามารถอ้างอิงตำแหน่งข้อมูลโดยนัยได้ นั่นคือการใช้คำสั่ง PUSH, POP และคำสั่งอื่น ๆ ที่เกี่ยวกับสแต็กก็ไม่มีความจำเป็นจะต้องบอกตำแหน่งตัวถูกกระทำที่เก็บอยู่ในสแต็กนั้น

- รีจีสเตอร์สำหรับเก็บเงื่อนไขการทำงาน การเก็บเงื่อนไขการทำงานจะมีกลุ่มรีจีสเตอร์ที่ถูกกำหนดค่าขึ้นมาให้สอดคล้องกับผลการประมวลผลของซีพียู เช่น การคำนวณทางคณิตศาสตร์ อาจทำให้ผลลัพธ์มีค่าเป็นจำนวนบวก จำนวนลบ เป็นศูนย์หรือ โอเวอร์โพลว์ก็ได้กลุ่มบิตเหล่านี้ มักจะเรียกว่า "แฟล็ก” (Flags) ซึ่งจะแสดงไปพร้อม ๆ กับผลลัพธ์ที่คำนวณได้ และถูกเก็บไว้ในตำแหน่งที่เก็บผลลัพธ์แล้ว บิตพิเศษกลุ่มนี้จะกำหนดค่าขึ้นมาให้สอดคล้องกับผลลัพธ์ที่ประมวลได้ เพื่อนำไปใช้ทดสอบค่าตามเงื่อนไขต่าง ๆ ที่ต้องการ


รีจีสเตอร์ควบคุมและแสดงสถานะ

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

- PC (Program counter) เป็นรีจีสเตอร์ที่เก็บที่อยู่ของคำสั่งที่จะถูกประมวลผลในลำดับต่อไป

- IR (Instruction register) เป็นรีจีสเตอร์ที่เก็บคำสั่งเครื่องที่ถูกอ่านจากหน่วยความจำหลักเข้ามาเก็บ

- MAR (Memory address register) ใช้เก็บตำแหน่งที่อยู่อ้างอิงในหน่วยความจำหลัก

- MBR (Memory buffer register) ใช้เก็บข้อมูลขนาด 1 เวิร์ด ล่าสุดที่ถูกอ่านเข้ามาในซีพียูหรือใช้เก็บข้อมูลเพื่อเตรียมบันทึกลงในหน่วยความจำหลักโดยทั่วไป ซีพียูจะปรับปรุงค่าในรีจีสเตอร์ PC ทันทีภายหลังจากที่ได้อ่านคำสั่งเข้ามา เพื่อให้รีจีสเตอร์ PC นี้ชี้ตำแหน่งคำสั่งที่จะถูกอ่านเข้ามาในลำดับต่อไปเสมอ คำสั่งประเภท branch หรือ skip ทำให้เกิดการเปลี่ยนแปลงค่าในรีจีสเตอร์นี้ได้ คำสั่งที่ถูกอ่านเข้ามาจะถูกนำไปเก็บไว้ที่รีจีสเตอร์ IR ซึ่งจะถูกวิเคราะห์รหัสดำเนินงาน และตัวกำหนดค่าตัวถูกกระทำการออกแบบซีพียูจะต้องกล่าวถึงรีจีสเตอร์ตัวหนึ่ง หรือกลุ่มหนึ่งที่เรียกว่า Program status word (PSW)ซึ่งใช้เก็บข้อมูลสถานะการทำงานของซีพียูดังต่อไปนี้

- Sign : ใช้เก็บบิตเครื่องหมายของผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุด

- Zero : บิตนี้จะมีค่าเป็น 1ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดมีค่าเป็น 0

- Carry : บิตนี้จะมีค่าเป็น 1ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิดการยืมเลขจากหลักที่สูงกว่า หรือมีการทดเลขบิตที่มีค่าเกินบิตสูงสุด

- Equal : บิตนี้จะมีค่าเป็น 1ถ้าผลการเปรียบเทียบทางตรรกะมีค่าเท่ากัน

- Overflow : ใช้สำหรับบอกให้ทราบว่า ผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิด overflow

- Interrupt enable/disable : ใช้ในการสั่งให้กระบวนการอินเทอร์รัพท์ทำงานหรือหยุดทำงาน

- Supervisor : ใช้ในการบอกสถานะ การทำงานของซีพียูว่า ในขณะนั้นมีสถานะเป็น user หรือ supervisor
คำสั่งเครื่องบางส่วนที่เป็นคำสั่งสงวน จะสามารถประมวลผลได้ และเนื้อที่หน่วยความจำบางส่วนจะสามารถอ้างอิงถึงได้ก็ต่อเมื่อซีพียูอยู่ในสถานะ supervisor เท่านั้น



ตัวอย่างการจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู


                  การจัดองค์ประกอบของรีจีสเตอร์จะขอยกตัวอย่างซีพียูของอินเทล ตระกูล 80XX ดังแสดงในภาพที่ 9.3 เป็นซีพียู 8086 การออกแบบองค์ประกอบของรีจีสเตอร์ โดยถือว่า รีจีสเตอร์ทุกตัวเป็นรีจีสเตอร์พิเศษ แม้ว่ารีจีสเตอร์บางตัวจะสามารถนำมาใช้เป็นรีจีสเตอร์ใช้งานทั่วไปได้ก็ตาม ซีพียู 8086 ประกอบด้วยรีจีสเตอร์สำหรับเก็บข้อมูลขนาด 16 บิต จำนวน 4 ตัว ซึ่งอาจจะใช้เพียง 8 บิตหรือใช้ทั้ง 16 บิต ผสมผสานกันก็ได้ รีจีสเตอร์สำหรับเก็บข้อมูลสามารถ

รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่

รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่

รหัสที่ใช้แทนอักขระ

                ตัวอักษร ตัวเลขและสัญลักษณ์ หรือที่เรียกว่าอักขระในไมโครคอมพิวเตอร์จะแทนด้วยรหัสไบนารี ทุกครั้งที่เรากดแป้นพิมพ์ เช่น ปุ่มอักษร A ระบบก็จะรับอักษร A เข้าไปและแปลงเป็นรหัสไบนารี (เข้ารหัส) 1 ไบต์ เป็นต้น ในตารางที่ 8.1 แสดงมาตรฐานการใช้รหัสไบนารีแทนอักขระที่นิยมแพร่หลายในระบบไมโครคอมพิวเตอร์เรียกว่ารหัส ASCII (อ่านว่า แอสกี้) ย่อมาจาก American Standard Code for Interchange จะใช้แทนทั้งสระ พยัญชนะ ตัวเลข สัญลักษณ์ ทั่วไป และอักษรที่ใช้ควบคุม เช่น LF คือ Line Feed หมายถึงให้เลื่อนไปบรรทัดถัดไป เป็นต้น
จากตารางที่ 8.1 จะสังเกตเห็นว่าอักษรหรือสัญลักษณ์ 1 ตัวแทนได้ด้วยไบนารี 7 บิต แต่เนื่องจากระบบไมโครคอมพิวเตอร์จะใช้ 8 บิต (หรือ 1 ไบต์) เป็นมาตรฐาน ทำให้บิตเหลืออีก 1 บิต เป็นบิตสูงสุด (หมายถึงบิตซ้ายมือสุด) ซึ่งเราอาจให้บิตนี้เป็น 0 หรือ 1 ก็ได้

รูปแบบคำสั่ง

                 ไมโครโปรเซสเซอร์ไม่ว่าจะผลิตจากบริษัทไหนก็แล้วแต่ จะมีชุดคำสั่งประจำไมโคร-โปรเซสเซอร์เบอร์นั้น เช่น 8080 ของบริษัทอินเทลก็จะมีชุดคำสั่งเฉพาะของ 8080 ขณะที่ 6800 ของ โมโตโรลาก็จะมีชุดคำสั่งเฉพาะของ 6800 เป็นต้น คำสั่ง 8080 จะมาใช้กับ 6800 ไม่ได้และในทางกลับกัน คำสั่งของ 6800 จะใช้กับ 8080 ก็ไม่ได้ อย่างไรก็ดี ไม่ว่าจะเป็นคำสั่งของไมโครโปรเซสเซอร์เบอร์ใด พื้นฐานก็คือคำสั่งจะอยู่ในลักษณะไบนารี คำสั่งหนึ่งคำสั่งอาจประกอบด้วยไบต์เดียว สองไบต์ สามไบต์ หรือสี่ไบต์แล้วแต่กรณี ไบต์แรกของคำสั่งเรียกว่า โอเปอเรชันโค้ด (operation code)


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

ชนิดของคำสั่ง
                คำสั่งในภาษาระดับสูง เช่น Pascal หรือ FORTRAN ตัวอย่างคำสั่ง เช่น X = X + Y
ประโยคนี้บอกให้คอมพิวเตอร์นำค่าของตัวแปร Y บวกกับค่าที่เก็บในตัวแปร X แล้วเก็บผลลัพธ์ไว้ที่ X นักศึกษาอาจจะสงสัยว่า คำสั่งเช่นนี้เมื่ออยู่ในรูปแบบคำสั่งคอมพิวเตอร์แล้วจะมีหน้าตาเป็นอย่างไร สมมุติว่าตัวแปร X และ Y อ้างอิงถึงข้อมูลที่ตำแหน่ง 513 และ 514 ตามลำดับ สมมติต่อไปว่าให้ใช้ชุดคำสั่งที่ง่ายต่อการทำความเข้าใจแล้ว ประโยคดังกล่าวจะถูกแปลเป็นคำสั่ง

ที่อยู่อ้างอิงในคำสั่งเครื่อง
               วิธีการหนึ่งที่นิยมใช้ในการอธิบายสถาปัตยกรรมของเครื่องคอมพิวเตอร์ คือ การอธิบายจำนวนของ ที่อยู่อ้างอิงในคำสั่งเครื่องแต่ละคำสั่ง วิธีการนี้ได้รับความนิยมน้อยลงเมื่อการออกแบบซีพียูมีความสลับซับซ้อนมากขึ้น อย่างไรก็ตาม ก็ยังคงเป็นวิธีการที่มีประโยชน์สำหรับการวิเคราะห์ความแตกต่างของซีพียู
คำสั่งเครื่องแต่ละคำสั่ง มีความจำเป็นต้องอ้างอิงที่อยู่เป็นจำนวนเท่าใด คำสั่งเกี่ยวกับคณิตศาสตร์และตรรกะ มักจะต้องการการอ้างอิงที่อยู่ของตัวถูกดำเนินการ (Operand) มากกว่าคำสั่งชนิดอื่น โดยทั่วไปคำสั่งในกลุ่มนี้จะเป็นคำสั่งประเภท unary (ต้องการตัวถูกดำเนินการเพียงตัวเดียว) หรือ binary (ต้องการตัวถูกดำเนินการสองตัว) ดังนั้นจึงต้องการอ้างอิงถึงที่อยู่ของตัวถูกดำเนินการสูงสุดสองตัว ผลลัพธ์ที่ได้จากการคำนวณจะต้องถูกนำไปเก็บไว้ในหน่วยความจำ จึงอาจต้องการอ้างอิงที่อยู่แห่งที่สามในแต่ละคำสั่งนั้น ประการสุดท้ายเมื่อการประมวลผลคำสั่งนั้นสิ้นสุดลง ก็มีความจำเป็นจะต้องอ้างอิงที่อยู่ของคำสั่งในลำดับต่อไป
              ด้วยเหตุผลดังกล่าว ทำให้น่าเชื่อว่าคำสั่งแต่ละคำสั่งจะต้องการการอ้างอิงที่อยู่สี่แห่งด้วยกัน(ที่อยู่สำหรับตัวถูกดำเนินการสองตัว ที่อยู่สำหรับเก็บผลลัพธ์ และที่อยู่สำหรับคำสั่งต่อไป) ในทางปฏิบัติแทบจะไม่มีคอมพิวเตอร์เครื่องใดที่มีการอ้างอิงที่อยู่มากถึงสี่แห่ง คำสั่งส่วนใหญ่จะอ้างอิงที่อยู่จำนวนระหว่างหนึ่งถึงสามที่อยู่ต่อคำสั่ง และนำที่อยู่ของคำสั่งต่อไปใส่ไว้ในรีจิสเตอร์แยกต่างหาก (เรียกว่า Program counter) ซึ่งแยกออกจากรีจิสเตอร์ที่ใช้ในคำสั่งเครื่อง

ชนิดของตัวถูกดำเนินการ

คำสั่งเครื่องทำงานกับข้อมูลซึ่งสามารถแบ่งออกตามชนิดหรือประเภทได้ดังนี้
- ตำแหน่งที่อยู่ (address)
- ตัวเลข (Number)
- ตัวอักษร (Character)
- ข้อมูลตรรกะ (Logical data)
อันที่จริงตำแหน่งที่อยู่ก็เป็นข้อมูลชนิดหนึ่ง ในหลายกรณีมีการคำนวณเกิดขึ้นกับตัวถูกกระทำที่ถูกอ้างอิงในคำสั่งเครื่อง เพื่อกำหนดตำแหน่งที่อยู่ในหน่วยความจำหลัก หรือในหน่วยความจำเสมือน ในกรณีเช่นนี้ ตำแหน่งที่อยู่จะถูกคำนวณในลักษณะเดียวกันกับเลขแบบไม่มีเครื่องหมาย
ข้อมูลชนิดอื่นได้แก่ ตัวเลข ตัวอักษร และข้อมูลตรรกะ ซึ่งจะอธิบายถึงรายละเอียดในลำดับต่อไป นอกจากนี้แล้ว คอมพิวเตอร์บางเครื่องยังได้กำหนดข้อมูลหรือโครงสร้างข้อมูลชนิดพิเศษขึ้นใช้งาน เช่น ข้อมูลชนิดที่สามารถทำงานกับตัวถูกกระทำที่เป็นกลุ่มตัวอักษร (string) ได้โดยตรง

ข้อมูลตัวเลข

                ภาษาเครื่องทุกชนิดจะมีข้อมูลชนิดตัวเลขไว้ใช้งาน แม้กระทั่งงานที่ไม่เกี่ยวข้องกับตัวเลขก็ยังมีความจำเป็นจะต้องใช้ตัวเลขมาช่วยในการนับ บอกความกว้างหรือขนาดของข้อมูล และอื่น ๆ ความแตกต่างที่สำคัญระหว่างตัวเลขที่ใช้ในทางคณิตศาสตร์ทั่วไป กับตัวเลขที่เก็บอยู่ในเครื่องคอมพิวเตอร์คือ ตัวเลขคอมพิวเตอร์มีขนาดที่จำกัดเนื่องจากเหตุผลสองประการคือ ประการแรก ตัวเลขที่เก็บอยู่ในคอมพิวเตอร์นั้นถูกจำกัดขนาดด้วยรูปแบบที่ใช้อยู่ในเครื่องนั้น ประการที่สอง ในกรณีของเลขจำนวนจริงก็ถูกจำกัดขนาดด้วยระดับความเที่ยงตรงที่ต้องการนักพัฒนาโปรแกรมจึงต้องทำความเข้าใจในผลที่เกิดขึ้นจากการปัดเศษ การ overflow และการ underflow
ข้อมูลชนิดตัวเลขมักจะแบ่งออกเป็นสามชนิด คือ
- เลขจำนวนเต็ม (Integer of fixed point)
- เลขจำนวนจริง (Floating point)
- เลขฐานสิบ (Decimal point)
โดยธรรมชาติแล้วการทำงานภายในเครื่องคอมพิวเตอร์นั้นใช้เลขฐานทั้งหมด แต่ส่วนที่ต้องติดต่อกับผู้ใช้ที่เป็นมนุษย์นั้นจะจำเป็นจะต้องใช้เลขฐานสิบ ดังนั้นจึงมีความจำเป็นที่จะต้อง

ข้อมูลตัวอักษร

               รูปแบบข้อมูลที่ใช้งานทั่วไปคือตัวอักษร (text) หรือข้อความ (character string) ข้อมูลที่เป็นข้อความนั้น เป็นรูปแบบที่สะดวกสบายต่อคน แต่ในเวลาเดียวกันก็เป็นรูปแบบที่ไม่สามารถเก็บไว้ในคอมพิวเตอร์ หรือนำไปประมวลผลได้โดยง่าย เนื่องจากระบบดังกล่าวถูกออกแบบมาให้ทำงานกับเลขฐานสองเท่านั้น ดังนั้นจึงได้มีการประดิษฐ์รหัสสำหรับการเก็บข้อมูลตัวอักษรไว้ในคอมพิวเตอร์ รหัสแบบแรกที่ได้รับการออกแบบนำมาใช้งานคือ รหัสมอส (Morse code) ในปัจจุบันโค้ดรหัสที่ถูกนำมาใช้อย่างแพร่หลายเรียกว่า International Reference Alphabet (IRA) ซึ่งมีชื่อเรียกในประเทศสหรัฐอเมริกาว่า รหัสแอสกี้ (ASCII) ดังแสดงตัวอย่างในตาราง 8.1 รหัส IRA ได้รับความนิยมนำไปใช้งานทั่วโลก ตัวอักษรแต่ละตัวในรหัสนี้ถูกแทนด้วยเลขฐานสองจำนวน 7 บิต ทำให้สามารถกำหนดสัญลักษณ์ได้ 128 แบบ ซึ่งเป็นจำนวนที่มากเกินพอสำหรับตัวอักษรที่สามารถพิมพ์ออกทางเครื่องพิมพ์ได้ รหัสส่วนหนึ่งจึงถูกนำไปใช้เป็นหรัสควบคุม (control characters) รหัสควบคุมบางส่วนถูกนำมาใช้ในการควบคุมลักษณะการพิมพ์ในแบบต่าง ๆ ในขณะที่รหัสที่เหลือถูกนำไปใช้ในการสื่อสารข้อมูล รหัส IRA จะถูกเก็บและเรียกใช้เป็นข้อมูลขนาด 8 บิตต่อตัวอักษรเสมอ โดยบิตที่ 8

ข้อมูลตรรกะ

        โดยปกติข้อมูลแต่ละเวิร์ด หรือแต่ละหน่วยที่สามารถอ้างอิงได้ (เช่น ไบต์ halfword, และอื่น ๆ ) จะถือเสมือนหนึ่งว่าเป็นข้อมูลหน่วยเดียว แต่ในบางครั้งก็มีความจำเป็นจะต้องพิจารณาข้อมูลในแต่ละหน่วยนั้นครั้งละ 1 บิต ซึ่งจะมีค่าเป็น “0” หรือ “1” เมื่อข้อมูลถูกมองในลักษณะนี้เรียกว่าเป็นข้อมูลแบบตรรกะ
การมองข้อมูลครั้งละ 1 บิตมีประโยชน์สองประการ ประการแรก บางครั้งก็มีความจำเป็นจะต้องเก็บข้อมูลอาร์เรย์แบบบูลลีน หรือข้อมูลที่เป็นเลขฐานสองโดยตรง ซึ่งข้อมูลแต่ละตัวจะกินเนื้อที่เพียง 1 บิตเท่านั้น การเก็บข้อมูลแบบตรรกะจึงถูกนำมาใช้ในงานประเภทนี้ได้อย่างมีประสิทธิภาพ ประการที่สอง ในบางครั้งก็มีความจำเป็นจะต้องจัดการกับข้อมูลธรรมดาครั้งละ 1 บิต ตัวอย่างเช่น ในการทำงานกับเลขจำนวนจริงโดยใช้ซอฟต์แวร์ จะต้องมีการเลื่อนตำแหน่งบิตข้อมูลเกิดขึ้น หรือในการแปลงเลขจากรหัส IRC เป็นรหัส BCD ก็ต้องอาศัยการเลื่อนบิตเช่นกัน
สังเกตว่าจากตัวอย่างทั้งสองที่ยกมานั้น ข้อมูลเดียวกันบางครั้งจะต้องอยู่ในรูปแบบตรรกะ บางครั้งก็อยู่ในรูปแบบของตัวเลข หรือตัวอักษร ชนิดของข้อมูลของหน่วยข้อมูลใด ๆ จะถูกกำหนดโดยชนิดของการกระทำที่เกิดขึ้นกับข้อมูลหน่วยนั้น ซึ่งจะไม่เกิดขึ้นในการทำงานของคำสั่งภาษาคอมพิวเตอร์ระดับสูง

การบ่งตำแหน่งที่อยู่

           เมื่อ ซีพียู จะทำงานตามคำสั่ง ที่เขียนไว้ในหน่วยความจำ จะต้องนำคำสั่งจากหน่วยความจำถ่ายลงสู่ ซีพียูแล้วจึงจะประมวลผลตามวัฏจักรดังได้กล่าวมาแล้ว แต่ละคำสั่งจะมี ออปโค้ด เป็นไบต์แรก แล้วตามด้วยข้อมูลหรือตำแหน่งข้อมูลในไบต์ที่สองและสาม เมื่อซีพียู แปลรหัสออปโค้ดแล้วจะทราบว่า จะต้องไปนำข้อมูลจากที่ใดมาปฏิบัติต่อ เพื่อให้คำสั่งนั้นแล้วเสร็จ ในหัวข้อนี้จะกล่าวถึงวิธีต่าง ๆ ที่ซีพียูไปนำข้อมูลมาจากหน่วยความจำวิธีดังกล่าวนี้เรียกว่า การแบ่งตำแหน่งที่อยู่หรือ แอดเดรสซิงโหมด (Addressing mode)

การบ่งตำแหน่งทันที

           การบ่งตำแหน่งทันที (immediate mode) เป็น รูปแบบของการบ่งตำแหน่งที่ง่ายที่สุดคือ ตัวถูกกระทำจะปรากฏอยู่ ในคำสั่งนั้น หรือค่าของตัวถูกกระทำปรากฏอยู่กับคำสั่ง หรือค่าของตัวถูกกระทำจะเขียนตามหลังคำสั่งตำแหน่งที่ติดต่อกัน ซึ่งหมายความว่า เราสามารถที่จะดึงตัวถูกกระทำจากหน่วยความจำได้ ในเวลาเดียวกันกับที่ดึงคำสั่ง (Instruction fetch) ขึ้นมาทำงาน ดังนั้นจึงประหยัดวงรอบของการของการอ้างอิงหน่วยความจำไปได้หนึ่งรอบ ข้อด้อยวิธีการนี้คือ ขนาด ตัวเลขถูกจำกัดโดยขนาดของฟิลด์ที่อยู่ (Address field ) ซึ่งในคำสั่งส่วนใหญ่มักจะ มีขนาดเล็ก (เช่น20 บิต) เมื่อเทียบกับข้อมูล ขนาดหนึ่ง เวิร์ด (ปกติยาว 32 บิต)

การบ่งตำแหน่งโดยตรง

           รูปแบบที่จัดว่าง่ายอีกวิธีหนึ่งคือ การบ่งตำแหน่งโดยตรง (direct addressing) ซึ่งเขตข้อมูลตำแหน่งที่อยู่จะบรรจุตำแหน่งจริงของตัวถูกกระทำเอาไว้ดังนี้
EA (Effective Address) = A
วิธีการนี้ได้รับความนิยมในการใช้งานกับคอมพิวเตอร์รุ่นแรก ๆ แต่ไม่เป็นที่นิยมใช้ในปัจจุบัน การประมวลผลจะต้องใช้วงรอบการอ้างอิงหน่วยความจำเพิ่มขึ้นอีกหนึ่งรอบ โดยที่ไม่ต้องมีการคำนวณเพิ่มเติม ข้อด้อยประการสำคัญคือ ขอบเขตที่จำกัดในการอ้างอิงตำแหน่งข้อมูลในหน่วยความจำ

การบ่งตำแหน่งทางอ้อม

           เนื่องจากวิธีการอ้างอิงโดยตรงนั้น ความยาวของเขตข้อมูลตำแหน่งที่อยู่มักจะมีขนาดสั้นกว่าความยาวของหนึ่งเวิร์ดจึงทำให้ขอบเขตในการอ้างอิงข้อมูลลดลง การแก้ปัญหานี้ทำได้โดยการใช้ขอบเขตข้อมูลตำแหน่งที่อยู่ในการอ้างอิงถึงตำแหน่งเวิร์ดในหน่วยความจำที่เก็บตำแหน่งที่แท้จริงของข้อมูลเอาไว้ วิธีการนี้เรียกว่า การอ้างอิงทางอ้อม (indirect addressing) มีรูปแบบดังนี้
EA = (A)
เครื่องหมายวงเล็บในที่นี้ใช้ในความหมายว่า ค่าที่เก็บอยู่ในตำแหน่งที่อ้างถึงโดย A (เขตข้อมูลตำแหน่งที่อยู่ในคำสั่ง)ข้อดีของวิธีการนี้คือ ถ้าเวิร์ดในหน่วยความจำมีขนาด N บิต จะทำให้ผู้ใช้สามารถอ้างอิงข้อมูลได้มากถึง 2N เวิร์ด ข้อเสียคือ คำสั่งประเภทนี้จะต้องอ้างอิงหน่วยความจำเพิ่มขึ้นอีก 2 วงรอบ จึงจะสามารถอ่านค่าตัวถูกกระทำและประมวลผลได้ นั่นคือหนึ่งวงรอบสำหรับอ่านเวิร์ดที่อ้างอิงถึงโดย A และอีกหนึ่งวงรอบสำหรับอ่านค่าข้อมูลที่แท้จริงที่เก็บอยู่ในตำแหน่งเวิร์ดที่ถูกระบุโดย A นั้น

การบ่งตำแหน่งผ่านรีจีสเตอร์

                  การอ้างอิงผ่านรีจีสเตอร์โดยตรง (register addressing) มีความคล้ายคลึงกับการอ้างอิงโดยตรง สิ่งที่แตกต่างกันก็คือ เขตข้อมูลตำแหน่งที่อยู่ในคำสั่งเครื่องจะบรรจุหมายเลขของ รีจีสเตอร์ที่อ้างอิง แทนการกำหนดตำแหน่งที่อยู่ในหน่วยความจำ
EA = R
                โดยปกติเขตข้อมูลตำแหน่งที่อยู่ที่กำหนดหมายเลขของรีจีสเตอร์นั้น จะมีขนาดระหว่าง 3 ถึง 5 บิต ทำให้สามารถอ้างอิงรีจีสเตอร์ได้ตั้งแต่ 8 ถึง 32 ตัว

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

วันศุกร์ที่ 27 พฤศจิกายน พ.ศ. 2558

การคำนวณทางคณิตศาสตร์

การคำนวณทางคณิตศาสตร์

ระบบตัวเลขในคอมพิวเตอร์ 

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

การแทนค่าข้อมูลเลขจำนวนเต็ม 

ปกติ การทำงานของเครื่องคอมพิวเตอร์ ใช้สัญญาณอิเล็กทรอนิกส์ ซึ่งมีสองสถานะ คือ ปิด และ เปิด จึงมีการกำหนดให้ใช้ตัวเลข 0 และ 1 แทนสถานะทั้งสองและมีการกำหนดรหัสแทนอักขระด้วยชุดของตัวเลขซึ่งประกอบด้วย 0 และ 1 ซึ่งเป็นตัวเลขในระบบเลขฐานสอง

ตัวเลขแต่ละหลักของจำนวนในระบบเลขฐานสองเราเรียนกว่า บิต (Bit) ดัง นั้นจำนวน 1011 จึงเป็นเลขฐานสองที่มีจำนวน 4 บิตการใช้เลขฐานสองมาแทนอักขระต่าง ๆ จะพบว่า ถ้าใช้ตัวเลขฐานสอง 1 บิต จะแทนข้อมูลได้ 2 แบบ คือ 0 และ 1 ถ้าใช้ตัวเลขฐานสอง 4 บิต จะแทนอักขระได้ทั้งหมด 16 แบบ

ตัวดำเนินการ 

ตัวดำเนินการ(Operator) หมายถึง เครื่องหมายที่ใช้เชื่อมต่อกันระหว่างนิพจน์ หรือตัวแปรอย่างน้อย 2 ตัวขึ้นไป โดยที่ข้อมูลที่ถูกกระทำหรือตัวที่ถูกกระทำเราเรียกว่า โอปะแรนต์ (Operand)

ตัวดำเนินการทางคณิตศาสตร์ 


ตัวดำเนินการคณิตศาสตร์(Arithmetic operator) หมายถึงเครื่องหมายการคำนวณในทางคณิตศาสตร์ ตัวดำเนินการประเภทนี้ จะให้ระบบคอมพิวเตอร์ประมวลผลทางคณิตศาสตร์กับตัวถูกกระทำเครื่องหมาย และ การดำเนินการมีดังนี้


ตัวดำเนินการเชิงเปรียบเทียบ(Comparison operator)

หมายถึงเครื่องหมายในการเปรียบเทียบข้อมูล ผลลัพธ์ที่ได้จะมีค่าตรรกบูลลีนเป็น จริง (True) และ เท็จ (False) เครื่องหมายของตัวดำเนินการที่ใช้มีดังนี้
 แสดงการใช้ตัวดำเนินการเปรียบเทียบ
ตัวดำเนินการเชิงตรรก (Logical operator)เป็นเครื่องหมายที่ให้ค่าจริง (True) และเท็จ (False) ในการเปรียบเทียบ ประกอบด้วยเครื่องหมาย
 ผลลัพธ์ที่ได้จากการกระทำทางตรรกศาสตร์เป็นดังตารางต่อไปนี้
นิพจน์ 

นิพจน์ คือ ข้อความที่เขียนในรูปสัญลักษณ์ อาจเป็นนิพจน์ที่เป็นเอกนามหรือนิพจน์ที่ไม่เป็นเอกนามก็ได้ เช่น 4, 3x+2, a+b-c+3, Width*Length

ถ้าหากต้องการเก็บผลลัพธ์ด้วย เขียนได้ดังนี้

Area = Width*Length

หมายความว่า เก็บผลลัพธ์ของนิพจน์ width*Length ลงในหน่วยความจำที่มีตำแหน่งชื่อว่า Area โดยที่ Width*Length และ Area จะเป็นหน่วยความจำหรือตัวแปรที่โปรแกรมสร้างขึ้นเอาไว้เก็บข้อมูล

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

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

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

ตัวอย่าง จงเขียนนิพจน์ให้คอมพิวเตอร์คำนวณการกระทำทางคณิตศาสตร์ต่อไปนี้

 สรุปท้ายบท  


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


ที่มา : https://wittaya2529.wordpress.com//การคำนวนของคอมพิวเตอร์/

หน่วยความจำภายนอก (external memory)

หน่วยความจำภายนอก

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

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

หน่วยความจำชนิดรอม (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  พินจะมี

บิตบนตัวแรม ส่วน 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



ที่มา : http://tungmay1995.blogspot.com/p/blog-page_81.html