วันพฤหัสบดีที่ 26 พฤศจิกายน พ.ศ. 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 ไบต์ เป็นต้น แสดงมาตรฐานการใช้รหัสไบนารีแทนอักขระที่นิยมแพร่หลายในระบบไมโครคอมพิวเตอร์เรียกว่ารหัส ASCII (อ่านว่า แอสกี้) ย่อมาจาก American Standard Code for Interchange จะใช้แทนทั้งสระ พยัญชนะ ตัวเลข สัญลักษณ์ ทั่วไป และอักษรที่ใช้ควบคุม เช่น LF คือ Line Feed หมายถึงให้เลื่อนไปบรรทัดถัดไป เป็นต้น
จะสังเกตเห็นว่าอักษรหรือสัญลักษณ์ 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) ไม่ต้องเสียเวลาในการอ้างอิงหน่วยความจำเพื่ออ่านข้อมูลตัวถูกกระทำ เวลาที่ใช้ในการอ้างอิงข้อมูลในรีจีสเตอร์ที่เก็บอยู่ภายในตัวซีพียูนั้น น้อยกว่าเวลาที่ใช้อ้างอิงข้อมูลในหน่วยความจำมาก อย่างไรก็ตาม ข้อจำกัดของวิธีการนี้คือมีพื้นที่สำหรับเก็บข้อมูลขนาดจำกัดมาก

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

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


การบวกเลขฐานสอง

     การบวกเลขฐานสอง หรือเลขไบนารี คล้ายกับการบวกเลขฐานสิบที่เราคุ้นเคย แต่การบวกเลขฐานสองนั้นง่ายกว่า เพราะมีเพียง 4 กรณี เท่านั้นที่จะต้องจำ คือ
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

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

การบวกเลขฐานสองหลายบิต

     การบวกเลขฐานสองหลายบิต จะต้องนำตัวตั้ง และตัวบวกมาตั้งให้บิตขวาสุดของแต่จำนวนตรงกัน ดังแสดงในตัวอย่าง
1 1 1 0 0
+ 1 1 0 0 1
?
  เริ่มต้นบวกที่คอลัมน์ขวาสุด
1 1 1 0 0
+ 1 1 0 0 1
1
  ต่อไปบวกคู่บิต ในคอลัมน์ที่ 2 และคอลัมน์ที่ 3
1 1 1 0 0
+ 1 1 0 0 1
1 0 1
   ต่อไปบวกคู่บิต ในคอลัมน์ที่ 4 คือ 1 + 1 = 10 ใส่ 0 มีตัวทด 1 ให้วางตัวทดในตำแหน่งถัดไปที่สูงขึ้น
ตัวทด → 1
1 1 1 0 0
+ 1 1 0 0 1
0 1 0 1
  ในคอลัมน์สุดท้ายจะต้องบวกกัน 3 บิต (รวมตัวทด) คือ 1 + 1 + 1 = 10 + 1 = 11
ตัวทด → 1
1 1 1 0 0
+ 1 1 0 1 0
1 1 0 1 0 1

การลบเลขฐานสอง

     มีกฎพื้นฐานอยู่ 4 อย่าง สำหรับการลบเลขฐานสอง ดังนี้
0 – 0 = 0
0 – 0 = 1
1 – 1 = 0
10 – 1 = 1
     ลบเลขฐานสองที่มีหลายบิต จะทำเช่นเดียวกับการบวก คือ จะเริ่มลบจากคอลัมน์ หรือบิตทางขวาก่อน (LSB) ไปจนถึงคอลัมน์ซ้ายสุด (MSB) ดังตัวอย่างต่อไปนี้
101 0 1
– 1 0 0 1 1
?
มลบจากคอลัมน์ขวาสุด (LSB)
1 0 0 1
– 1 0 0 1 1
0

เลขฐานสองแบบไม่มีเครื่องหมาย

     บางครั้งข้อมูลที่เป็นจำนวนค่าตัวเลข จะคำนึงถึงเฉพาะขนาด หรือแมกนิจูด (magnitude) อย่างเดียว จะไม่สนใจเครื่องหมายบวก ( + ) หรือลบ ( – ) ตัวอย่างเช่น เลขฐานสองขนาด 8 บิต จะมีขนาด ตั้งแต่น้อยที่สุด คือ 0000 0000 ไปจนถึงขนาดมากที่สุดคือ 1111 1111 หรือถ้าเป็นเลขฐานสิบหก จะเริ่มตั้งแต่ 00H ถึง FFH และถ้าเป็นเลขฐานสิบ ก็คือ 0 ถึง 255
    จำนวนที่แสดงเฉพาะขนาด เราเรียกว่า จำนวนแบบไม่มีเครื่องหมาย ถ้าเป็นเลขฐานสอง ก็จะเป็นเลขฐานแบบไม่มีเครื่องหมาย บิตทุกบิตบนจำนวนนั้นจะเป็นค่าน้ำหนัก ซึ่งเทียบได้กับเลขฐานสิบทุกบิต แต่เราก็สามารถที่จะทำการบวกหรือลบได้ตามปกติ
    ในไมโครคอมพิวเตอร์ยุคแรกจะสามารถประมวลผลได้ครั้งละ 8 บิต ดังนั้นขนาดของผลลัพธ์ที่ได้ก็จะต้องอยู่ระหว่าง 0 ถึง 255 แต่ถ้าต้องการขนาดที่มากกว่า 255 จะต้องใช้เลขฐานสองขนาด 16 บิต ซึ่งหมายถึงการประมวลผลต้องทำ 2 ครั้ง คือ ทำ 8 บิตต่ำ (lower byte) ก่อนแล้วไปทำ 8 บิตสูง (upper byte) ดังแสดงในตัวอย่างที่ 7.4
การบวกเลขฐานสองขนาด 8 บิต ถ้าผลบวกมีค่ามากกว่า 255 เราเรียกว่า โอเวอร์โฟลว์ (overflow) ซึ่งจะเกิดตัวทดในคอลัมน์ที่ 9 ในระบบไมโครโปรเซสเซอร์จะมีวงจรที่จะแจ้งเตือนเรียกว่า แฟลกตัวทด (carry flag) เมื่อมีตัวทดเกิดขึ้น ผลลัพธ์ที่ได้จะไม่ถูกต้อง

เลขฐานสองที่มีเครื่องหมาย

      ในเลขฐานสิบที่มีเครื่องหมายติดลบ จะเขียนเครื่องหมายลบไว้ข้างหน้าของขนาดตัวเลข เช่น –1, –2, –3 เป็นต้น ส่วนเลขที่มีจำนวนบวก ถ้าจะเขียนเครื่องหมายบวกข้างหน้าขนาดตัวเลขก็ได้ เช่น +1, +2, +3 หรือ อาจไม่ต้องเขียนก็หมายถึงเลขจำนวนบวก ถ้าแปลงเลขฐานสิบให้เป็นเลขฐานสอง และมีเครื่องหมายติดลบด้วยก็ได้ –001, –010, –011 หรือถ้าเป็นจำนวนบวกก็จะได้ +001, +010, +011 แต่การนำข้อมูลเหล่านี้ไปประมวลผลในระบบดิจิตอลจะไม่สามารถประมวลผลได้ ระบบจะทำงานได้เฉพาะข้อมูลดิจิตอลที่เป็น 0 และ 1 เท่านั้น ดังนั้นเครื่องหมายบวก (+) จึงถูกกำหนดให้เป็นค่าลอจิก 0 และเครื่องหมายลบ (–) ถูกกำหนดให้เป็นค่าลอจิก 1 จึงทำให้ +001, +010 และ +011 ถูกเปลี่ยนเป็นรหัส 4 บิต ดังนี้ 0001, 0010 และ 0011 ส่วนจำนวนลบจะได้รหัส 4 บิต เช่นกัน คือ 1001, 1010 และ 1011
ตัวเลขดังกล่าวประกอบด้วยบิตเครื่องหมาย และตามด้วยกลุ่มบิตที่แสดงขนาดของตัวเลข เราจะเรียกข้อมูลที่มีรูปแบบดังกล่าวนี้ว่า เลขฐานสองชนิดบอกเครื่องหมาย – ขนาด หรือ Sign – magnitude ดังตัวอย่างข้อมูลที่ถูกเปลี่ยนให้เป็นเลขฐานสองชนิดบอกเครื่องหมาย ดังต่อไปนี้
+5 → 0000 0101
–5 → 1000 0101
+128 → 0000 0000 1000 0000
–128 → 1000 0000 1000 0000

การนำข้อมูลเข้าและการส่งข้อมูลออก

การนำข้อมูลเข้าและการส่งข้อมูลออก
(Pipeline, Scalar & Vector Processor)

ความรู้ทั่วไปเกี่ยวกับหน่วยรับและส่งข้อมูล

     หน่วยรับส่งข้อมูลเข้าออก ทำหน้าที่เป็นตัวกลาง การถ่ายเทข้อมูลระหว่างระบบคอมพิวเตอร์กับโลกภายนอก โดยโลกภายนอกจะหมายถึงอุปกรณ์บริวารประเภทต่าง ๆ เช่น แป้นพิมพ์ จอภาพ เครื่องพิมพ์ นอกจากนี้อุปกรณ์บริวารยังหมายถึง อุปกรณ์ที่ใช้ในงานอื่น ๆ ที่ต่อเชื่อมอยู่กับระบบคอมพิวเตอร์ เช่น ในเครื่องคอมพิวเตอร์ที่ใช้ในกระบวนการผลิตในโรงงานอุตสาหกรรม อาจจะต่อเชื่อมอยู่กับอุปกรณ์วัดหรือควบคุมอุณหภูมิ อุปกรณ์เครื่องมือวัดต่าง ๆ เป็นต้น หน่วยรับส่งข้อมูลเข้าออก บางทีจะเรียกว่า อุปกรณ์เชื่อมต่อไอโอ หรือเรียกทับศัพท์ว่า อุปกรณ์อินเตอร์เฟส (interface) เนื่องจากอุปกรณ์เชื่อมต่อนี้จะเป็นชุดของวงจร ซึ่งอาจจะเป็นชุดมาตรฐานที่ติดตั้งมาพร้อมกับระบบคอมพิวเตอร์ ได้แก่ ชุดเชื่อมต่อแป้นพิมพ์ เมาส์ เครื่องพิมพ์ หรืออาจจะผลิตออกมาเป็นแผงวงจร (การ์ด) เพื่อนำไปเสียบลงในช่องขยายเพิ่ม (Expansion slot) ในระบบคอมพิวเตอร์ ดังนั้นจึงอาจจะเรียกว่า อินเตอร์เฟสการ์ดหรือโมดูลไอโอ (คำว่าไอโอ หมายถึง Input / Output)
หน่วยรับส่งข้อมูลเข้าออกจะจัดข้อมูลที่รับจากอุปกรณ์ต่อพ่วงให้อยู่ในรูปที่เหมาะสมแล้วส่งให้ระบบคอมพิวเตอร์ ในทางกลับกันก็จะสามารถรับข้อมูลจากระบบคอมพิวเตอร์ แล้วจัดให้อยู่ในรูปที่เหมาะสม เพื่อส่งให้อุปกรณ์ต่อพ่วง การทำหน้าที่ดังกล่าวนี้ เนื่องจากรูปแบบทางข้อมูลที่ใช้ในอุปกรณ์ต่อพ่วงและระบบคอมพิวเตอร์ โดยปกติจะมีรูปแบบที่แตกต่างกัน
หน่วยรับข้อมูลเข้าออกแต่ละหน่วย จะเชื่อมต่ออยู่กับบัสหลัก คือ บัสตำแหน่ง บัสข้อมูล และบัสควบคุม ดังนั้นการบ่งชื่อหรือตำแหน่งของหน่วยรับส่งข้อมูลเข้าออก สามารถ ทำได้สองวิธี วิธีแรกโดยการจัดให้หน่วยรับส่งข้อมูลเข้าออกเป็นส่วนหนึ่งของหน่วยความจำหลัก จึงสามารถที่จะใช้ คำสั่ง ส่งข้อมูลเข้าออกหน่วยรับส่งข้อมูลเข้าออกได้เช่นเดียวกับคำสั่งที่ใช้กับหน่วยความจำปกติ วิธีที่สองทำโดยการจัดวงจรเพิ่มเติมเพื่อบ่งตำแหน่งหรือรหัสประจำหน่วยรับส่งข้อมูลเข้าออก กรณีนี้จะต้องใช้คำสั่งเฉพาะของหน่วยรับส่งข้อมูลเข้าออก
การเชื่อมต่ออุปกรณ์ต่อพ่วงปกติจะไม่สามารถเชื่อมต่อเข้าโดยตรงกับบัสหลัก แต่จะต่อผ่านโมดุลไอโอโดยมีเหตุผลดังนี้
- อุปกรณ์ต่อพ่วงมีอยู่จำนวนมาก ซึ่งมีวิธีทำงานที่แตกต่างกันทำให้ไม่มีความเหมาะสมในการปล่อยให้ซีพียู เป็นตัวควบคุมการทำงานอุปกรณ์ทั้งหมด
- อัตราการถ่ายเทข้อมูลของอุปกรณ์ต่อพ่วงนั้นช้ากว่าความเร็วในการทำงานของซีพียู มาก ดังนั้นจึงเป็นการไม่เหมาะสมที่จะต่ออุปกรณ์เหล่านี้เข้ากับบัสโดยตรง
- อัตราการถ่ายเทข้อมูลของอุปกรณ์บางชนิด สูงกว่าความเร็วของหน่วยความจำหลัก หรือแม้กระทั่ง ซีพียู ซึ่งก็ไม่เหมาะสมที่จะนำอุปกรณ์เหล่านี้ต่อเข้าโดยตรงกับบัสเช่นกัน
- โครงสร้างข้อมูลหรือขนาดของเวิร์ดไม่เหมือนกับรูปแบบหรือขนาดที่เครื่องคอมพิวเตอร์ใช้อยู่

รูปแบบการรับและส่งข้อมูล

     หน่วยรับส่งข้อมูลเข้าออก มีการรับส่งข้อมูลอยู่ 2 ระบบ ได้แก่ การรับส่งข้อมูลแบบขนานหรืออาจเรียกว่า PIO (parallel Input / Output) ซึ่งจะสามารถรับส่งข้อมูลได้ครั้งละหลายบิต เช่น 4, 8, 16 หรือ 32 บิต นอกจากการรับส่งข้อมูลแล้ว จะต้องมีการแลกเปลี่ยนสัญญาณควบคุมระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วงด้วย ทั้งนี้เพื่อรักษาจังหวะในการถ่ายเทข้อมูล ระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วง สัญญาณควบคุมมีประโยชน์มากเพราะโดยปกติ อุปกรณ์ต่อพ่วงจะมีการทำงานในอัตราที่ช้ากว่าระบบคอมพิวเตอร์ หากระบบคอมพิวเตอร์ส่งข้อมูลด้วยอัตราความเร็วจนอุปกรณ์ต่อพ่วงรับไม่ทัน ก็จะเกิดการสูญหายของข้อมูล วิธีแก้ก็คืออุปกรณ์ต่อพ่วงจะมีสัญญาณคอยแจ้งว่าตนเองพร้อมที่จะรับข้อมูลเพิ่มเติม (ready) และหน่วยรับส่งข้อมูลเข้าออกก็จะมีสัญญาณคอยแจ้งว่าจะมีการส่งข้อมูล การประสานงานกันระหว่างสัญญาณทั้งสองนี้ เรียกว่า วิธีจับมือ (handshaking) ระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วงซึ่งจะทำให้การรับส่งข้อมูลที่มีประสิทธิภาพขึ้น

หน้าที่และโครงสร้างของหน่วยรับและส่งข้อมูลเข้าออก

หน้าที่ของหน่วยรับและส่งข้อมูล

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

ถ้าระบบคอมพิวเตอร์มีบัสหลักใช้งาน การโต้ตอบระหว่างโปรเซสเซอร์และโมดูลไอโอจะเกี่ยวข้องกับการถือครองบัส เหตุการณ์ที่สมมติยังแสดงให้เห็นว่า โมดูลไอโอจะต้องสื่อสารกับโปรเซสเซอร์และสื่อสารกับอุปกรณ์ภายนอก การสื่อสารกับโปรเซสเซอร์เกี่ยวข้องกับสิ่งต่อไปนี้
- การถอดรหัสคำสั่ง (command decoding) : โมดูลไอโอรับคำสั่งจากโปรเซสเซอร์ซึ่งปกติจะส่งสัญญาณมาทางบัสควบคุมการทำงาน(control bus)ตัวอย่างเช่นโมดูลไอโอสำหรับขับดิสก์จะรับคำสั่งเช่น READ SECTOR,WRITE SECTOR,SEEK track number,และ SCAN record ID คำสั่งสองคำสั่งหลังจำเป็นต้องมีการส่งผ่านตัวกำหนดค่ามาด้วย ซึ่งจะส่งมาทางบัสสำหรับถ่ายเทข้อมูล
- ข้อมูล (Data) : โปรเซสเซอร์จะแลกเปลี่ยนข้อมูลกับโมดูลไอโอ ผ่านทางบัสสำหรับถ่ายเทข้อมูล
- การรายงานสถานะ (status reporting) : เนื่องจากอุปกรณ์ต่อพ่วง มักจะมีความเร็วต่ำมาก จึงมีความจำเป็นต้องทราบสถานะการทำงานของอุปกรณ์ ตัวอย่างเช่น ถ้าโมดูลไอโอถูกสั่งให้อ่านข้อมูลส่งมาให้โปรเซสเซอร์ อุปกรณ์ดังกล่าวอาจจะยังไม่ว่างเนื่องจากกำลังให้บริการคำสั่งที่มาก่อนหน้านี้ ข้อเท็จจริงข้อนี้สามารถส่งยังโปรเซสเซอร์ผ่านทางสัญญาณสถานะการทำงาน ซึ่งโดทั่วไปมีอยู่สองอย่างคือ BUSY (ไม่- - การรับรู้ที่อยู่ (address recognition): อุปกรณ์ไอโอก็คล้ายกับหน่วย ความจำ คือแต่ละ เวิร์ด จะมีหมายเลขที่อยู่เฉพาะเป็นของตนเอง นั้นคืออุปกรณ์ไอโอแต่ละชิ้นจะต้องมีหมายเลขเฉพาะสำหรับการอ้างอิงเป็นของตนเอง ดังนั้นโมดูลไอโอจะต้องสามารถรับรู้หมายที่อยู่เฉพาะของอุปกรณ์แต่ละชนิดได้
อีกด้านหนึ่ง โมดูลไอโอจะต้องสามารถสื่อสารกับอุปกรณ์ไอโอได้ การสื่อสารนี้ได้แก่การออกคำสั่ง รายงานสถานะการทำงาน และการถ่ายเทข้อมูล
งานที่มีความสำคัญมากที่สุดส่วนหนึ่งของโมดูลไอโอคือ การทำบัฟเฟอร์สำหรับข้อมูล (data buffering) ความต้องการนี้จะถ่ายเทข้อมูลไปยังหรือมาจากหน่วยความหลักหรือโปรเซสเซอร์นั้นสูงมาก แต่อัตราการถ่ายเทข้อมูลของอุปกรณ์ต่อพ่วงต่าง ๆ นั้นช้ามากกว่าหลายเท่าตัว และยังมีอัตราการถ่ายเทที่แตกต่างกันในช่วงที่กว้างมากด้วย ข้อมูลที่ถูกส่งมาจากหน่วยจำหลัก ถูกส่งมายังโมดูลไอโอในลักษณะที่มีความเร็วสูงมากแต่เป็นช่วงสั้น ๆ เรียกว่า เบิรซท์ (burst) ข้อมูลนั้นจะถูกเก็บไว้ในบัฟเฟอร์ของโมดูลไอโอ จากนั้นจึงถูกส่งไปยังอุปกรณ์ต่อพ่วงด้วยความเร็วต่ำเท่ากับอุปกรณ์นั้นๆ ซึ่งในด้านที่รับข้อมูลนั้นก็จะทำงานที่ความเร็วสูงมาก เพื่อไม่ให้หน่วยความจำต้องมาถูกบังคับให้ทำงานช้าลงเพราะอุปกรณ์ความเร็วต่ำ โมดูลไอโอจึงสามารถทำงานเท่ากับหน่วยความจำและโปรเซสเซอร์ และจะต้องสามารถทำงานได้ช้ามากเท่ากับความเร็วของอุปกรณ์ต่อพ่วงแต่ละตัวที่มีใช้งาน ในทางกลับกันถ้าอุปกรณ์ไอโอทำงานที่ความเร็วสูงมากกว่าที่หน่วยความจำจะทำงานตามได้ทันแล้ว โมดูลไอโอจะต้องใช้เทคนิคบัฟเฟอร์กับอุปกรณ์นั้น

โครงสร้างของโมดูลไอโอ

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

การควบคุมไอโอด้วยโปรแกรม

     วิธีการทำงานของไอโอมีอยู่สามวิธี วิธีแรกคือการควบคุมด้วยโปรแกรม(programmed I/O) ข้อมูลจะเกิดการแลกเปลี่ยนระหว่างโปรเซสเซอร์กับโมดูลไอโอ โปรเซสเซอร์จะประมวลผลโปรแกรมที่เป็นการออกคำสั่งโดยตรงเกี่ยวกับการทำงานของไอโอรวมทั้งการตรวจสอบสถานะของอุปกรณ์ การสั่งอ่านหรือบันทึกข้อมูล และการถ่ายเทข้อมูล เมื่อโปรเซสเซอร์ออกคำสั่งไปยังโมดูลไอโอ โปรเซสเซอร์จะต้องรอจนกว่าการตอบสนองต่อคำสั่งนั้นจะสิ้นสุด ถ้าโปรเซสเซอร์ทำงานได้เร็วกว่าโมดูลไอโอ การรอคอยนี้จะเป็นการเสียเวลาของโปรเซสเซอร์เป็นอย่างยิ่ง วิธีที่สองเรียกว่า การควบคุมไอโอผ่านกระบวนการอินเทอร์รัพท์ (Interrupt-driven I/O) โปรเซสเซอร์จะออกคำสั่งไอโอ แล้วหันกลับไปประมวลผลคำสั่งอื่นต่อไป เมื่อโมดูลไอโอทำงานที่ได้รับมอบนั้นเสร็จเรียบร้อยแล้วก็จะส่งสัญญาณผ่านอินเทอร์รัพท์มาบอกให้ทราบ ทั้งสองวิธีนี้โปรเซสเซอร์จะต้องรับผิดชอบในการดึงข้อมูลออกมาจากหน่วยความจำหลักและส่งไปให้โมดูลไอโอ และจะต้องจัดการบันทึกข้อมูลที่ได้รับจากโมดูลไอโอเข้าไปในหน่วยความจำสำหรับการอ่านข้อมูล วิธีที่สามคือ ดีเอ็มเอ หรือการเข้าถึงหน่วยความจำหลักโดยตรง (Direct memory access: DMA) ด้วยวิธีการนี้ โมดูลไอโอและหน่วยความจำหลักจะแลกเปลี่ยนข้อมูลกันโดยตรง โดยที่โปรเซสเซอร์จะมีส่วนร่วมในการทำงานน้อยมาก
การควบคุมไอโอด้วยโปรแกรมนั้น เมื่อซีพียูประมวลผลโปรแกรมหลักจะทำการตรวจสอบรีจีสเตอร์สถานะ (I/O status register) ของไอโอเป็นระยะ ๆ (ตามเวลาที่กำหนดไว้) ว่าอุปกรณ์ต่อพ่วงใดแสดงความพร้อมที่จะขอติดต่อกับซีพียู หรืออีกกรณีหนึ่งเมื่อซีพียูพบคำสั่งที่เกี่ยวข้องกับไอโอ ซีพียูก็จะเรียกใช้ชุดคำสั่งหรือโปรแกรมย่อย เพื่อให้บริการอุปกรณ์ต่อพ่วงนั้น จากนั้นก็จะเปลี่ยนบิตบอกสถานะของโมดูลไอโอให้เป็น “0” หรือเป็นค่าที่เหมาะสม เพื่อเมื่อปฏิบัติเสร็จเรียบร้อยโมดูลไอโอก็จะไม่ทำอะไรต่อ ดังนั้นจึงเป็นหน้าที่ของ ซีพียูที่จะคอยตรวจสอบ ดูสถานะของโมดูลไอโอจนพบว่างานที่ได้สั่งให้ทำนั้นเสร็จเรียบร้อยแล้ว
ในการประมวลผลคำสั่งที่เกี่ยวข้องกับไอโอ ซีพียูจะต้องกำหนดหมายเลขที่อยู่หรือแอดเดรสของโมดูลไอโอและอุปกรณ์ต่อพ่วง หรืออุปกรณ์ต่อพ่วงแต่ละชนิดจะได้รับหมายเลขที่ไม่ซ้ำกัน เมื่อซีพียูส่งคำสั่งไอโอมายังโมดูลไอโอ คำสั่งนั้นจะระบุหมายเลขที่อยู่ของอุปกรณ์ต่อพ่วงที่ต้องการไว้ด้วยเสมอ ดังนั้นโมดูลไอโอจะต้องตรวจสอบสัญญาณที่มาตามสายสัญญาณว่า เป็นหมายเลขที่อยู่ของตนเองหรือไม่ คำสั่งที่ต้องการให้อุปกรณ์ต่อพ่วงปฏิบัติจะมี 4 อย่างด้วยกันคือ
- การควบคุม (Control) : ใช้ในการกระตุ้นให้อุปกรณ์ไอโอพร้อมที่จะปฏิบัติงาน และบอกให้ทราบว่าจะต้องทำงานอะไร ตัวอย่างเช่น หน่วยเทปแม่เหล็กอาจได้รับคำสั่งให้ม้วนเทปกลับหรือหมุนเทปไปข้างหน้าหนึ่งระเบียน คำสั่งเหล่านี้จะได้รับการปรับแต่งให้มีความเหมาะสมกับอุปกรณ์แต่ละชนิด
- การทดสอบ (Test) : ใช้สำหรับการทดสอบสถานะการทำงานหลายอย่างของโมดูลไอโอและอุปกรณ์ โปรเซสเซอร์จะต้องการทราบว่าอุปกรณ์ที่ต้องการใช้งานนั้น มีความพร้อมใช้งานอยู่หรือไม่ หรือต้องการทราบว่าคำสั่งที่ให้ปฏิบัติก่อนหน้านี้ได้เสร็จเรียบร้อยหรือยัง หรือว่ามีข้อผิดพลาดใด ๆ เกิดขึ้นหรือไม่
- การอ่านข้อมูล (Read) : จะทำให้โมดูลไอโออ่านข้อมูลมาจากอุปกรณ์ที่ต่อพ่วงและใส่เข้าไว้ในบัฟเฟอร์ จากนั้นโปรเซสเซอร์จะสามารถนำข้อมูลไปใช้ โดยออกคำสั่งให้โมดูลไอโอใส่ข้อมูลเข้าไปในบัสนำสั่ง- การบันทึกข้อมูล (Write) : จะทำให้โมดูลไอโอนำข้อมูล (ไบต์ หรือ เวิร์ด) จากบัสนำส่งข้อมูล ไปส่งต่อให้กับอุปกรณ์ต่อพ่วงที่ต้องการ

การควบคุมไอโอด้วยอินเทอร์รัพท์

     การควบคุมไอโอด้วยโปรแกรม โดยทั่วไปจะไม่เป็นที่นิยมเพราะซีพียูจะต้องเสียเวลามาคอยตรวจสอบสถานะการทำงานของโมดูลไอโออยู่ตลอดเวลา ในความเป็นจริงแล้วควรจะปล่อยให้ซีพียูทำงานตามโปรแกรมหลัก ต่อเมื่อจะป้อนข้อมูลให้ซีพียู จึงแจ้งหรือขัดจังหวะซีพียู ให้มาบริการอุปกรณ์ต่อพ่วงนั้น ๆ ชั่วคราว แล้วจึงกลับไปทำงานหลักต่อ วิธีดังกล่าวนี้ คือหลักการของการอินเทอร์รัพท์
การอินเทอร์รัพท์ จะต่างจากวิธีควบคุมโปรแกรมตรงที่ซีพียูจะทำงานไปตามภารกิจหลักต่อเมื่ออุปกรณ์ต่อพ่วงใดส่งสัญญาณให้แก่ซีพียู ซีพียูจะหยุดภารกิจการทำงานตามโปรแกรมหลักไว้ชั่วขณะเพื่อไปทำงานตามโปรแกรมย่อย ซึ่งเป็นการบริการอุปกรณ์ต่อพ่วงนั้น
ในไมโครโปรเซสเซอร์แทบทุกประเภท การอินเทอร์รัพท์กระทำโดยการที่อุปกรณ์ต่อพ่วงส่งสัญญาณอิเล็กทรอนิกส์ไปเปลี่ยนระดับตรรกะที่ขาหนึ่งของไมโครโปรเซสเซอร์ เราเรียกขานั้นว่า ขาอินเทอร์รัพท์ เพื่อแจ้งให้ไมโครโปรเซสเซอร์ทราบ กระบวนการในการเกิดอินเทอร์รัพท์ จะเกิดเหตุการณ์ดังต่อไปนี้
- อุปกรณ์ไอโอจะส่งสัญญาณอินเทอร์รัพท์ไปยังซีพียู
- ซีพียูทำการประมวลผลคำสั่งในโปรแกรมที่กำลังทำงานอยู่จนเสร็จเรียบร้อย (เฉพาะคำสั่งที่กำลังทำอยู่นั้น) ก่อนที่จะตอบสนองต่ออินเทอร์รัพท์
- ซีพียูจะทำการทดสอบอินเตอร์รัพท์ ตรวจสอบว่ามีเพียงอินเทอร์รัพท์เดียว และส่งสัญญาณตอบรับไปยังอุปกรณ์ที่ส่งสัญญาณอินเทอร์รัพท์นั้น การตอบรับจะทำให้อุปกรณ์นั้นหยุดส่งสัญญาณอินเทอร์รัพท์
- ซีพียูจะเตรียมการประมวลผลโปรแกรมสำหรับอินเทอร์รัพท์นั้น (เรียกว่า interrupt routine) ซึ่งเริ่มต้นด้วยการบันทึกข้อมูลที่เกี่ยวข้องกับการประมวลผลโปรแกรมที่กำลังทำงานอยู่นั้น (ก่อนเกิดอินเทอร์รัพท์) ประกอบด้วย (1) สถานะการทำงานของโปรเซสเซอร์ซึ่งเก็บอยู่ในรีจีสเตอร์ตัวหนึ่ง เรียกว่า Program status word (PSW) และ (2) ตำแหน่งของคำสั่งต่อไปที่จะถูกประมวลผล ซึ่งเก็บอยู่ในรีจีสเตอร์เรียกว่า Program counter (PC) ข้อมูลเหล่านี้อาจถูกเก็บในสแต็กควบคุมการทำงานของระบบ)
- โปรเซสเซอร์จะดึงคำสั่งแรกของโปรแกรมสำหรับอินเทอร์รัพท์ที่เกิดขึ้นนั้น ขึ้นมาทำงานเพื่อตอบเสนองต่ออินเทอร์รัพท์ โปรแกรมดังกล่าวอาจเป็นเพียงโปรแกรมเดียวสำหรับอินเทอร์รัพท์แต่ละอย่าง หรือโปรแกรมเดียวสำหรับอุปกรณ์แต่ละอย่าง ซึ่งขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์หรือระบบปฏิบัติการที่เลือกใช้ ในกรณีที่มีโปรแกรมสำหรับอินเทอร์รัพท์มากกว่าหนึ่งโปรแกรม โปรเซสเซอร์จะต้องทำการตัดสินใจเลือกโปรแกรมหนึ่งขึ้นมาทำงานซึ่งข้อมูลสำหรับการตัดสินใจนี้อาจถูกส่งมาพร้อมกับสัญญาณอินเทอร์รัพท์แล้ว หรือโปรเซสเซอร์อาจจะต้องส่งสัญญาณไปถามอุปกรณ์ที่เป็นผู้ส่งสัญญาณอินเทอร์รัพท์เข้ามาจึงจะสามารถเลือกโปรแกรมที่ถูกต้องได้
- ณ เวลานี้ โปรแกรมเคาน์เตอร์และ PSW ที่เกี่ยวข้องกับโปรแกรมที่ถูกขัดจังหวะการทำงานได้ถูกบันทึกไว้ในสแต็กของระบบเรียบร้อยแล้ว อย่างไรก็ตาม ยังคงมีข้อมูลอื่นที่ถือได้ว่าเป็นส่วนหนึ่งของสถานะของโปรแกรมที่กำลังถูกประมวลผลอยู่ นั่นคือข้อมูลที่เก็บอยู่ใน รีจีสเตอร์ภายในตัวโปรเซสเซอร์จะต้องถูกบันทึกไว้เช่นเดียวกัน เนื่องจากรีจีสเตอร์เหล่านี้อาจถูกใช้โดยโปรแกรมสำหรับอินเทอร์รัพท์ ดังนั้นข้อมูลในรีจีสเตอร์เหล่านี้ (และอาจหมายถึงข้อมูลแสดงสถานะอื่น ๆ ) จะต้องถูกบันทึกไว้ด้วย โดยทั่วไปโปรแกรมสำหรับอินเทอร์รัพท์จะเริ่มต้นการทำงานด้วยการบันทึกข้อมูลในรีจีสเตอร์ลงในสแต็ก
- โปรแกรมนี้ก็จะเริ่มทำงานต่อไป ด้วยการตรวจสอบสถานะที่เกี่ยวข้องกับการทำงานไอโอที่ต้องการ หรือเหตุการณ์อื่นที่ทำให้เกิดอินเทอร์รัพท์ การทำงานนี้อาจรวมถึงการส่งคำสั่งเพิ่มเติมหรือการส่งการตอบรับไปยังอุปกรณ์ไอโอ
- เมื่อโปรแกรมอินเทอร์รัพท์ทำงานเสร็จแล้ว ก็จะปิดท้ายด้วยการคืนค่าให้แก่ รีจีสเตอร์ในซีพียูที่นำมาจากสแต็กของระบบ
- การทำงานส่วนสุดท้ายคือ การคืนค่าให้แก่ PSW และโปรแกรมเคาน์เตอร์ที่นำมาจากสแต็กของระบบ ทำให้คำสั่งต่อไปที่จะถูกประมวลผลนั้นถูกอ่านมาจากคำสั่งในตำแหน่งต่อไปของโปรแกรมที่ถูกขัดจังหวะการทำงานก่อนหน้านี้

การเข้าถึงหน่วยความจำโดยตรง

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

การเชื่อมต่อโมดูลไอโอกับอุปกรณ์ต่อพ่วง

     การติดต่อสื่อสารระหว่างคอมพิวเตอร์กับอุปกรณ์ภายนอกหรืออุปกรณ์ต่อพ่วง ซึ่งมีอยู่มากหมายหลายประเภท เช่น แป้นพิมพ์ เครื่องพิมพ์ สแกน โมเด็ม เป็นต้น ซึ่งอุปกรณ์เหล่านี้จะต้องอาศัยช่องทาง (port) สำหรับส่งถ่ายข้อมูล พอร์ตหรือช่องทางนี้มีการทำงานอยู่สองแบบ คือ ทำงานแบบอนุกรม (serial) และทำงานแบบขนาน (parallel) ดังได้กล่าวมาแล้วในหัวข้อ 6.3 ในการทำงานของส่วนเชื่อมต่อแบบขนานจะมีสายสัญญาณหลายเส้นเชื่อมต่อระหว่างโมดูลไอโอและอุปกรณ์ต่อพ่วงทำให้สามารถถ่ายโอนข้อมูลได้หลายบิตพร้อม ๆ กัน ส่วนการเชื่อมต่อแบบอนุกรมจะมีสายสัญญาณเพียงเส้นเดียวเท่านั้นที่ใช้ในการถ่ายโอนข้อมูล ซึ่งจะถูกส่งออกครั้งละหนึ่งบิต การเชื่อมต่อแบบขนานมักจะใช้ เชื่อมต่อกับอุปกรณ์ต่อพ่วงที่สามารถทำได้อย่างรวดเร็ว เช่น ฮาร์ดดิสก์หรือเทปแม่เหล็ก ในขณะที่การเชื่อมต่อแบบอนุกรมจะนำไปใช้กับอุปกรณ์ที่มีความเร็วต่ำ เช่น เครื่องพิมพ์ จอภาพ เป็นต้น ในปัจจุบันได้มีการขยายการเชื่อมต่อแบบอนุกรมความเร็วสูงสุดขึ้นมาใช้งาน ซึ่งจะทำให้การเชื่อมต่อแบบขนานมีความสำคัญลดลง การเชื่อมต่อแบบอนุกรม ความเร็วสูงที่กำลังได้รับ ความนิยมก็คือ USB และ FireWire

มาตรฐานการเชื่อมต่อ USB

     USB ย่อมาจาก Universal Serial Bus เป็นมาตรฐานการเชื่อมต่ออุปกรณ์ ไอโอ ภายนอกแบบใหม่สำหรับเครื่องคอมพิวเตอร์ในระดับพีซีที่ใช้งานง่ายราคาถูก สามารถจัด คอนฟิกูเรชันได้ง่ายอีกทั้งมีความเร็วอีกทั้งมีความเร็วในการถ่ายเทข้อมูลสูงสุด ซึ่งสามารถสนับสนุนการถ่ายข้อมูลที่ความเร็ว12Mb/วินาที ลักษณะของข้อมูลสามารถเป็นได้ทั้งรูปแบบการถ่ายเทข้อมูลในลักษณะกระแสและแพ็กเก็ต (Packet ในที่นี้จะหมายถึงในลักษณะรูปแบบของข้อมูลที่มีแบบแผนตายตัวที่เรียกว่า Frame ที่ประกอบด้วยส่วนหัว ส่วนข้อมูลและส่วนหางที่ใช้ตรวจสอบความผิดพลาดของข้อมูล)
การที่ USB สนับสนุนการส่งถ่ายข้อมูลหลายรูปแบบดังกล่าว จึงทำให้ USB สามารถรับรองอุปกรณ์ ไอโอ ได้หลากหลาย เช่น เมาส์ แป้นพิมพ์ กล้องถ่ายภาพและอุปกรณ์เชื่อมต่อ ISDN นอกจากนี้ USB ยังยอมให้เชื่อมต่อแบบ Hot plug ซึ่งหมายถึงความสามารถติดตั้งอุปกรณ์ไอโอ ได้ทันที่โดยไม่ต้องปิดเครื่องคอมพิวเตอร์เสียก่อน
อุปกรณ์ที่ทำงานภายใต้ USB สามารถทำงานที่ความเร็วต่ำได้แก่ 1.5 Mb/วินาที หรือความเร็วสูงสุดคือ 12 Mb/วินาที ซึ่งข้อดีของการทำงานที่เร็วต่ำหมายถึงสัญญาณ
รบกวนที่เกี่ยวกับสนามแม่เหล็กไฟฟ้าจะมีน้อยกว่าอุปกรณ์ที่ทำงานด้วยความเร็วสูง ด้วยเหตุนี้จึงมีความน่าเชื่อถือมากกว่า
USB มีรูปแบบความเร็วในการถ่ายเทข้อมูล 2 แบบ ได้แก่ แบบความเร็วสูงสุด ซึ่ง USB ใช้เพื่อการส่งข่าวสารและถ่ายเทข้อมูลที่ความเร็ว 12 Mbps อุปกรณ์ที่ทำงานความเร็วสูงสุด ได้แก่ ซิปไดรฟ์ สแกนเนอร์ และเครื่องพิมพ์ เป็นต้น ส่วนแบบความเร็วต่ำอยู่ที่ 1.5 Mbps อุปกรณ์ที่ทำงานบนความเร็วต่ำ ได้แก่ แป้นพิมพ์ เมาส์ จอยสติก เป็นต้น โดยมี USB Host ที่ตั้งบนเมนบอร์ด ทำหน้าที่จัดการดูแลช่องสัญญาณและความเร็วของ USB ในแต่ละพอร์ต รวมทั้งควบคุมการสื่อสารและการถ่ายเทข้อมูล ระหว่าง USB Host กับอุปกรณ์ USB

ข้อดีของการใช้ USB มีหลายประการดังต่อไปนี้

- ราคาประหยัด USB ช่วยประหยัดค่าใช้จ่ายในการติดตั้งอุปกรณ์ไอโอรอบข้างของพีซี
- Hot Plug ท่านสามารถติดตั้งอุปกรณ์ ได้ทันที่โดยไม่ต้องปิดเครื่องคอมพิวเตอร์เสียก่อน การติดตั้งแบบนี้จะไม่ส่งผลกระทบต่อ USB รวมทั้งอุปกรณ์ข้างเคียง
- ใช้คอนเน็กเตอร์แบบเดี่ยว ด้วยคอนเน็กเตอร์ 1 ช่องสามารถติดตั้งอุปกรณ์ USB ใดก็ได้ แต่ถ้าต้องการเชื่อมต่ออุปกรณ์ USB มากกว่านี้ต้องติดตั้งผ่านฮับ USB
- สนับสนุนอุปกรณ์ความเร็วต่ำและความเร็วสูง USB สามารถสนับสนุนอุปกรณ์ที่ทำงานด้วยความเร็วต่ำได้แก่ 1.5 Mb/วินาที และสูงสุดที่ความเร็ว 12 Mb/วินาที ด้วยความเร็วต่ำจะทำให้ USB ทำงานได้ดีกับอุปกรณ์ USB ราคาถูก เนื่องจากสามารถใช้สายสัญญาณเชื่อมต่อที่ไม่ต้องมีระบบป้องกันการรบกวนของสนามแม่เหล็ก
- สามารถจ่ายไฟจากสายเคเบิล อุปกรณ์ไอโอที่เชื่อมต่อภายนอกสามารถรับแรงดันไฟเลี้ยงอุปกรณ์จากสายเคเบิล USB โดยเฉพาะแรงดันไฟขนาด 5.0 Vdc นอกจากนี้กระแสไฟที่ส่งออกมาผ่านทางสายเคเบิลนี้มีขนาด 100-500 mA ทั้งนี้ขึ้นอยู่กับ USB ฮับ
- มีระบบตรวจสอบและแก้ไขความผิดพลาด ระบบ USB ยังมีการตรวจสอบความผิดพลาดรวมทั้งการแก้ไขในขณะที่มีการส่งถ่ายข้อมูลไปมาระหว่างอุปกรณ์ USB กับ USB อินเทอร์เฟส กรณีที่ตรวจพบความผิดพลาดระหว่างการถ่ายเทข้อมูลจะพยายามรับส่งข้อมูลกันใหม่อีกครั้ง ซึ่งเพิ่มความน่าเชื่อถือในการขนถ่ายข้อมูล
- ประหยัดพลังงาน อุปกรณ์ USB จะเข้าสู่การหยุดทำงานชั่วคราวถ้าไม่มีการทำงานใด ๆ เกิดขึ้นบนระบบบัสหลังจาก 3 มิลลิวินาทีผ่านไป และในขณะที่อยู่ในห้วงของการหยุดทำงานชั่วคราวดังกล่าว ระบบจะกินกระแสไฟเพียง 500 ไมโครแอมแปร์เท่านั้น
- สามารถสนับสนุนรูปแบบการถ่ายเทข้อมูล 4 แบบ ระบบ USB สนับสนุนการขนถ่ายข้อมูลได้ 4 รูปแบบ ได้แก่ Bulk, Isochronous, Interrupt และ Control Transfers

มาตรฐานการเชื่อมต่อ FireWire

     การเชื่อมต่อแบบ ไฟร์ไวร์ (Fi-Wi) เป็นการเชื่อมต่อกับอุปกรณ์ต่อพ่วงแบบอนุกรม ที่กำลังได้รับความนิยมอีกแบบหนึ่งนอกจากจะเป็นมาตรฐานการเชื่อมต่อในระบบคอมพิวเตอร์แล้วยังนำไปใช้เป็นมาตรฐานการเชื่อมต่ออุปกรณ์อีเล็กทรอนิกส์ เครื่องใช้ในบ้านได้อีก ได้แก่ อุปกรณ์เกี่ยวกับภาพ เสียง และเกมส์ เป็นต้น ในปัจจุบันความเร็วของโปรเซสเซอร์ขึ้นไปถึงระดับ GHz หรือพันล้านเฮิรตซ์ต่อวินาที ในขณะที่อุปกรณ์บันทึกข้อมูลก็สามารถบันทึกข้อมูลได้ในระดับ gigabyte หรือ พันล้านไบต์ ทำให้ความต้องการทางไอโอสำหรับเครื่องคอมพิวเตอร์ส่วนบุคคล เครื่องเวิร์คสเตชัน และเครื่องเซิร์ฟเวอร์เพิ่มขึ้นอย่างมาก แม้ว่าจะมีเทคโนโลยีช่องสื่อสารไอโอความเร็วสูงที่ได้รับการพัฒนาขึ้นมาสำหรับเครื่องเมนเฟรม และซูเปอร์คอมพิวเตอร์ ซึ่งอาจนำมาใช้งานได้ แต่ก็เป็นอุปกรณ์ที่มีราคาแพงมาก และมีขนาดใหญ่เกินกว่าที่จะนำมาใช้ในเครื่องคอมพิวเตอร์ขนาดเล็ก ทำให้เกิดการค้นคว้าพัฒนาส่วนติดต่อความเร็วสูงขึ้นมาทดแทนระบบSCSI และระบบอื่น ๆ ที่ใช้อยู่ในปัจจุบัน ผลที่ได้รับจากการค้นคว้าคือมาตรฐาน IEEE 1394 ซึ่งเป็นบัสแบบอนุกรมประสิทธิภาพสูง เรียกชื่อทั่วไปว่า FireWire
FireWire มีข้อดีเหนือกว่าส่วนติดต่อไอโอแบบเก่าหลายประการ นั่นคือ เป็นระบบที่มีความเร็วสูง ราคาต่ำ และสร้างขึ้นมาใช้งานได้ง่าย อันที่จริงแล้ว ระบบนี้ไม่ได้นำมาใช้งานเฉพาะในระบบคอมพิวเตอร์เท่านั้น แต่ยังสามารถนำไปใช้ในอุปกรณ์ดิจิตอลอื่น ๆ ได้ เช่น กล้องดิจิตอล เครื่องเล่นวิดีโอ และโทรทัศน์ ในระบบเหล่านี้ FireWire ถูกนำมาใช้ในการถ่ายโอนข้อมูลทางด้านภาพ ซึ่งมีแหล่งที่มาจากอุปกรณ์ดิจิตอล
จุดเด่นของส่วนติดต่อแบบ FireWire คือการใช้การสื่อสารแบบอนุกรม การสื่อสารแบบขนาน เช่น ระบบ SCSI นั้นจะต้องใช้สายสัญญาณเป็นจำนวนมากกว่า ทำให้ต้องใช้สายขนาดใหญ่ หัวเชื่อมต่อก็ต้องมีขนาดใหญ่ตามไปด้วย มีราคาแพงกว่า และมีโอกาสที่จะชำรุดเสียหายมากกว่า สายเคเบิลที่มีสายสัญญาณอยู่ข้างในหลายเส้นมีฉนวนภายในเพื่อป้องกันสัญญาณรบกวนกันเองภายในสาย นอกจากนี้ ส่วนติดต่อแบบขนานจะต้องมีการเทียบจังหวะการทำงานของสัญญาณในสายทุกเส้น ให้ตรงกัน ซึ่งปัญหาเหล่านี้ยิ่งทวีความรุนแรงเมื่อสายมีขนาดยาวขึ้น

สรุป

     หน่วยรับส่งข้อมูลเข้าออก ทำหน้าที่เป็นตัวกลาง การถ่ายเทข้อมูลระหว่างระบบคอมพิวเตอร์กับโลกภายนอก หรือเป็นอุปกรณ์เชื่อมต่อระหว่างระบบคอมพิวเตอร์กับอุปกรณ์ ต่อพ่วง ซึ่งอาจเรียกว่า อุปกรณ์อินเตอร์เฟส เนื่องจากชุดอุปกรณ์ดังกล่าวประกอบขึ้นเป็นโมดูลชุดวงจรอีเล็กทรอนิกส์ จึงเรียกว่า โมดูลไอโอ การรับส่งข้อมูลของโมดูลไอโอจะทำได้สองรูปแบบ คือ การรับส่งข้อมูลแบบขนาน การรับส่งแบบนี้ทั้งด้านที่ติดต่อกับซีพียูและด้านที่ติดต่อกับอุปกรณ์ ต่อพ่วง จะเป็นการรับส่งแบบขนานทั้งสองด้าน การรับส่งจะกระทำได้ตั้งละหลายบิต อีกรูปแบบหนึ่งเป็นการรับส่งแบบอนุกรม การรับส่งแบบนี้ทางด้านนี้ติดต่อกับซีพียู จะเป็นการรับส่งแบบขนานส่วนทางด้านอุปกรณ์ต่อพ่วงจะเป็นการรับส่งแบบอนุกรมซึ่งจะรับส่งครั้งละหนึ่งบิต
โครงสร้างหน่วยรับส่งข้อมูล จะมีส่วนประกอบที่สำคัญ ได้แก่ รีจีสเตอร์ข้อมูล ซึ่งจะทำหน้าที่เป็นตัวพักข้อมูล รีจีสเตอร์สถานะและรีจีสเตอร์ควบคุม ซึ่งจะควบคุมและให้จังหวะการทำงานของโมดูลไอโอ นอกจากนั้นก็จะมีวงจรลอจิกเพื่อเชื่อมต่อเข้าระบบบัสของคอมพิวเตอร์ และเชื่อมต่อเข้าอุปกรณ์ต่อพ่วง การควบคุมการทำงานของโมดูลไอโอ จะทำได้ 3 วิธี ได้แก่ การควบคุมด้วยโปรแกรม การควบคุมด้วยอินเทอร์รัพท์ และการควบคุมด้วย ดีเอ็มเอ วิธีที่มีประสิทธิภาพที่สุด ได้แก่ ดีเอ็มเอ แต่อย่างไรก็ตามการทำงานจริงก็ยังใช้ทั้ง 3 วิธี
มาตรฐานการเชื่อมต่อ USB และ FireWire เป็นการเชื่อมต่อแบบอนุกรม ซึ่งปัจจุบันเป็นมาตรฐานหนึ่งที่ถูกติดตั้งมากับระบบคอมพิวเตอร์ USB ให้ความเร็วในการรับส่งข้อมูลได้ที่ 1.5 – 12 Mbps สามารถต่อพ่วงอุปกรณ์ได้มากถึง 127 อุปกรณ์ ส่วน FireWire ความเร็วในการรับส่งอยู่ที่ 200 – 800 Mbps และต่อพ่วงอุปกรณ์ได้ถึง 63 อุปกรณ์

วันพุธที่ 25 พฤศจิกายน พ.ศ. 2558

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


หน่วยความจำภายในและหน่วยความจำภายนอก
(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 เหล่านั้นอยู่

วันอังคารที่ 24 พฤศจิกายน พ.ศ. 2558

ระบบบัส

ระบบบัส (Bus System)


         ระบบบัส คือเส้นทางที่คอมพิวเตอร์ใช้ในการติดต่อสื่อสารกับอุปกรณ์ต่างๆ เข้าด้วยกันเป็นระบบเดียวกัน ทั้งภายในแผงวงจรหลัก และอุปกรณ์ที่อยู่บน Slot ของระบบบัสส่วนเชื่อมโยงต่างๆ ส่วนประกอบภายในเครื่องคอมพิวเตอร์ จะถูกเชื่อมโยงเข้าด้วยกันโดยวงจรทางไฟฟ้า ที่เรียกว่าระบบบัส
         บัสที่ใช้ในระบบคอมพิวเตอร์คือ ชุดของการเชื่อมต่อแบบขนานอย่างง่าย ซึ่งมีอยู่บนแผงวงจรหลักของระบบคอมพิวเตอร์ ชิ้นส่วนการควบคุมต่างๆ เช่น CPU Chip Peripheral ต่างๆ และระบบของหน่วยความจำ เมื่อใดก็ตามที่มีการส่ง หรืออ่านข้อมูลจากหน่วยความจำหรือ พอร์ท อินพุทเอ้าท์พุทต่างๆ ตำแหน่งที่อยู่ของหน่วยความจำ หรือพอร์ท จะถูกกำหนดโดยค่าของตัวเลข หรือหมายเลข แอดเดรส ที่ใช้บ่งชี้เป็นกรณีพิเศษ เมื่อมีการถ่ายโอนข้อมูล แอดเดรสจะถูกส่งผ่านตามส่วนของบัสที่เรียกว่า แอดเดรสบัส (Address Bus) เมื่อแอดเดรสได้ถูกกำหนดแล้ว ข้อมูลจะถูกส่งไปยังส่วนของบัสที่แยกออกไปซึ่งเรียกว่า ดาต้าบัส (Data Bus) นอกจากนี้ยังมีส่วนที่ใช้ควบคุมกิจกรรมต่างๆ ในระบบ ซึ่งแยกออกมาเฉพาะเรียกว่าบัสควบคุม (Control Bus) การควบคุม การเขียน อ่านข้อมูล เป็นต้น

ส่วนประกอบของระบบบัส

ระบบบัส จะประกอบด้วย

1. เส้นทาง หมายถึง เส้นทางที่ข้อมูลเดินทางผ่าน ส่วนใหญ่จะสังเกตเป็นเส้นบนเมนบอร์ด

2. ชิปควบคุม ทำหน้าที่ บริหารการเข้าใช้บัสของชิ้นส่วนต่าง ๆ และทำหน้าที่ป้องกันปัญหา
ขัดแย้งกันเนื่องจากการแย่งใช้บัสในเวลาเดียวกัน

3. สล๊อตต่อขยาย เป็นตัวกลางที่ใช้ติดต่อสื่อสารระหว่างเมนบอร์ดกับการ์ดเสริมต่าง ๆ ซึ่งจะถูกออกแบบมาให้ตรงกับระบบบัสนั้น ๆ เช่น ระบบบัส PCI ก็จะมีสล๊อต PCI ซึ่งใช้เสียบการ์ดแบบ PCI
            
           บัสประกอบด้วย 2 ส่วน คือ บัสข้อมูลและบัสที่อยู่ บัสข้อมูลจะส่งข้อมูลจริงๆ ส่วนบัสที่อยู่จะส่งข้อมูลเกี่ยวกับตำแหน่งที่ข้อมูลควรจะอยู่ในหน่วยความจำ





- - ขนาดของบัส สามารถวัดได้เป็นความกว้างบัส ซึ่งเป็นตัวระบุจำนวนบิทที่คอมพิวเตอร์สามารถส่งได้ในแต่ละครั้ง เช่น บัสที่มีขนาด 32 บิท (32-bit bus) จะสามารถส่งข้อมูลได้ 32 บิท หรือ 4ไบท์ในแต่ละครั้ง ถ้าเราต้องการส่งข้อมูล 8 บิท โดยใช้บัสขนาดนี้ ก็จะต้องแบ่งส่ง 2 ครั้งด้วยกัน แต่ถ้าเราใช้บัสที่มีขนาด 64 บิท ก็จะสามารถส่งข้อมูลได้ทั้งหมดภายในครั้งเดียว
- - บัสจะมีสัญญาณนาฬิกาเช่นเดียวกับหน่วยประมวลผล ซึ่งผู้ผลิตกำหนดให้ีสัญญาณนาฬิกามีความถี่เป็นเฮิร์ต (hertz หรือ Hz) คำว่าเมกะเฮิร์ต (MHz) คือสัญญาณนาฬิกา (ติ๊ก) 1 ล้านครั้งใน 1วินาที ในปัจจุบันส่วนใหญ่ หน่วยประมวลจะมีสัญญาณนาฬิกา ประมาณ 400, 533, 800 MHz ยิ่งค่าสัญญาณนาฬิกาสูงเท่าไหร่ ความเร็วในการส่งข็อมูลก็มากเท่านั้น


ชนิดเส้นทางบัส

ชนิดเส้นทางบัสแบ่งตามสัญญาณที่ส่ง

- Power Bus เส้นทางบัสสำหรับจ่ายไฟฟ้า

- Data Bus เส้นทางบัสสำหรับระบบข้อมูล

- Ground Bus เส้นทางบัสสำรหับสายดิน

ชนิดเส้นทางบัสแบ่งตามข้อมูลที่ส่ง

- Data Bus มีทั้งหมด 24 เส้น ใช้สำหรับส่งข้อมูลในรูปของสัญญาณไฟฟ้าเปิดปิด (0,1) โดยสายเหล่านี้จะถูกต่อเข้ากับอุปกรณ์ เช่น หน่วยความจำ อแดปเตอร์การ์ด ดังนั้นเมื่อมีการส่งข้อมูล ๆ นั้นก็จะผ่านอุปกรณ์เหล่านั้นทั้งหมด แต่อุปกรณ์ที่รับข้อมูลนี้ต้องมี Address ตรงกับค่าที่กำหนดใน Address Bus

- Address Bus มีทั้งหมด 20-32 เส้น ใข้สำหรับส่งข้อมูลเป็นสัญญาณ บอกตำแหน่งที่อยู่หรือแอดเดรสในหน่วยความจำ จำนวนเส้นของ Address Bus จะบอกถึงความสามารถในการอ้างถึงหน่วยความจำ ซึ่งจะแตกต่างกันไปตามซีพียูแต่ละรุ่น เช่น 8088 มี Address Bus 20 เส้น ดังนั้นจะอ้างถึงหน่วยความจำได้ขนาด 220 หรือ 1 เมกะไบต์ ส่วน 80286 มี 24 เส้น จะอ้างถึงหน่วยความจำได้ขนาด 224 หรือ 16 เมกะไบต์ เป็นต้น

- Control Bus ใช้สำหรับส่งสัญญาณควบคุมพื้นฐาน เพื่อระบุว่าให้อุปกรณ์ที่จะได้รับข้อมูลใน Data Bus นั้นจัดการอย่างไรกับข้อมูลที่ได้รับประเภทของบัสแบ่งตามลักษณะของข้อมูลที่ปรากฏบนบัส ได้ดังนี้

1. บัสข้อมูล (DATA BUS) เป็นบัสที่หน่วยประมวลผลกลาง (CPU) ใช้เป็นเส้นทางผ่านในการควบคมุการส่งถ่ายข้อมูลจากหน่วยประมวลผลกลาง (CPU) ไปยังอุปกรณ์อุปกรณ์ภายนอกหรือรับข้อมูลจากอุปกรณ์ภายนอก เพื่อทำการประมวลผลที่หน่วยประมวลผลกลาง (CPU) 

2. บัสรองรับข้อมูล (ADDRESS BUS) คือบัสที่หน่วยประมวลผลกลาง (CPU) เลือกว่าจะส่งข้อมูลหรือรับข้อมูลจากอุปกรณ์ไหนไปที่ใด โดยจะต้องส่งสัญญาณเลือกออกมาทาง ADDRESS BUS

3. บัสควบคุม (CONTROL BUS) เป็นบัสที่รับสัญญาณการควบคุมจากหน่วยประมวลผลกลาง (CPU) เพื่อบังคับว่าจะอ่านข้อมูลเข้ามา หรือจะส่งข้อมูลออกไป จากหน่วยประมวลผลกลาง (CPU) โดยระบบภายนอกจะตอบรับต่อสัญญาณควบคุมนั้น

คอมพิวเตอร์มีบัสอยู่ 2 ชนิดคือ บัสระบบ (system bus) และ บัสเสริม (expansion bus)

           บัสระบบ (system bus) เป็นส่วนหนึ่งเมนบอร์ด หรือแผงวงจรหลัก บัสระบบทำหน้าที่เป็นเส้นทางต่อระหว่างหน่วยประมวลผลกับหน่วยความจำ ส่วนบัสเสริมเป็นบัสที่ทำให้หน่วยประมวลสามารถติดต่อสื่อสารกับอุปกรณ์ต่อ พ่วงอื่นๆ ได้ ส่วนใหญ่ที่มีการอ้างถึง บัส เฉยๆ จะหมายถึง บัสระบบ
บัสเสริม (expansion bus) จะทำให้อุปกรณ์ภายนอกระบบ สามารถติดต่อกับหน่วยประมวลผลได้ อุปกรณ์ต่อพ่วงจะต่อเข้ากับพอร์ต ซึ่งพอร์ตจะต่ออยู่บน ช่องเสริม (expansion slot) ซึ่งช่องเสริมนี้จะต่อกับ บัสเสริมเพื่อส่งข้อมูลไปยังหน่วยประมวลผล รูปข้างล่างนี้เป็นรูปของการส่งข้อมูลระหว่างหน่วยประมวลผล หน่วยความจำ อุปกรณ์ต่อพ่วงต่างๆ ผ่านทางบัสระบบ และบัสเสริม บัสเสริมบนเมนบอร์ดมีหลายชนิด แต่ละชนิดบ่งบอกถึงชนิดของการ์ดที่ต่างๆ ที่ต่ออย่บนคอมพิวเตอร์ ได้แก่ บัส ISA, บัส PCI, บัส AGP, บัส USB และบัสไฟร์ไวร์
บัสท้องถิ่น (local bus) เป็นบัสเสริมที่มีความเร็ว สูง จะต่อกับอุปกรณ์ที่มีการทำงานเร็วๆ เช่น ฮาร์ดดิสก์ บัสท้องถิ่นที่ควรรู้จักได้แก่ VESA local bus (Video Electronics Standards Association local bus) ซึ่งส่วนใหญ่ใช้กับการ์ดวิดีโอเท่านั้น และบัส PCI เป็นบัสที่ใช้กับอุปกรณ์ต่างๆ ได้หลากหลายกว่า VESA lacal bus มาก และมีความเร็วในการส่งข้อมูลเป็น 4 เท่าของบัส ISA

วิวัฒนาการของคอมพิวเตอร์

วิวัฒนาการของคอมพิวเตอร์ 

จุดกำเนิดของคอมพิวเตอร์


          ต้นกำเนิดของคอมพิวเตอร์อาจกล่าวได้ว่ามาจากแนวความคิดของระบบตัวเลข ซึ่งได้พัฒนาเป็นวิธีการคำนวณต่าง ๆ รวมทั้งอุปกรณ์ที่ช่วยในการคำนวณอย่างง่าย ๆ
 คือ" กระดานคำนวณ" และ "ลูกคิด" ในศตวรรษที่ 17 เครื่องคำนวณแบบใช้เฟื่องเครื่องแรกได้กำเนิดขึ้นจากนักคณิตศาสตร์ชาวฝรั่งเศษคือ Blaise Pascalโดยเครื่องของเขาสามารถคำนวณการบวกการลบได้อย่างเที่ยงตรง และในศตวรรษเดียวกันนักคณิตศาสตร์ชาวเยอร์มัน คือ Gottried Wilhelm von Leibnizได้สร้างเครื่องคิดเลขเครื่องแรกที่สามารถคูณและหารได้ด้วยในต้นศตวรรษที่ 19 ชาวฝรั่งเศษชื่อ Joseph Marie Jacquard ได้พัฒนาเครื่องทอผ้าที่สามารถตั้งโปรแกรมได้ โดยเครื่องทอผ้านี้ใช้บัตรขนาดใหญ่ซึ่งได้เจาะรูไว้เพื่อควบคุมรูปแบบของลายที่จะปัก บัตรเจาะรู(punched card) ที่ Jacquard ใช้นี้ได้ถูกพัฒนาต่อๆมาโดยผู้อื่น เพื่อใช้เป็นอุปกรณ์ป้อนข้อมูลและโปรแกรมเข้าเครื่องคอมพิวเตอร์ในยุคแรกๆต่อมาในศตวรรษเดียวกัน ชาวอังกฤษชื่อ Charles Babbage ได้ทำการสร้างเครื่องสำหรับแก้สมการโดยใช้พลังงานไอน้ำเรียกว่า difference engineและถัดจากนั้นได้เสนอทฤษฎีเกี่ยวกับ คอมพิวเตอร์สมัยใหม่ เมื่อเขาได้ทำการออกแบบ เครื่องจักรสำหรับทำการวิเคราะห์ (analytical engine)โดยใช้พลังงานจากไอน้ำ ซึ่งได้มีการออกแบบให้ใช้บัตรเจาะรูของ Jacquard ในการป้อนข้อมูล ทำให้อุปกรณ์ชิ้นนี้มีหน่วยรับข้อมูล หน่วยประมวลผลหน่วยแสดงผล และหน่วยเก็บข้อมูลสำรอง ครบตามรูปแบบของคอมพิวเตอร์สมัยใหม่ แต่โชคไม่ดีที่แม้ว่าแนวความคิดของเขาจะถูกต้องแต่เทคโนโลยีในขณะนั้นไม่เอื้ออำนวยต่อการสร้างเครื่องที่สามารถทำงานได้จริง อย่างไรก็ดี Charles Babbage ก็ได้รับการยกย่องว่าเป็นบิดาของคอมพิวเตอร์คนแรกและผู้ร่วมงานของเขาคือ Augusta Ada Byron ก็ได้รับการยกย่องว่าเป็นนักเขียนโปรแกรมคนแรกของโลก


          จากนั้นประมาณปี ค.ศ. 1886 Dr.Herman Hollerith ได้พัฒนาเครื่องจัดเรียงบัตรเจาะรูแบบ electromechanical ขึ้นซึ่งทำงานโดยใช้พลังงานไฟฟ้าและสามารถทำการ จัดเรียง (sort) และ คัดเลือก (select) ข้อมูลได้ ต่อมาในปี ค.ศ. 1896 Hollerith ได้ทำการก่อตั้งบริษัทสำหรับเครื่องจักรในการจัดเรียงชื่อTabulating Machine Company และในปี ค.ศ.1911 Hollerith ได้ขยายกิจการโดยเข้าหุ้นกับบริษัทอื่นอีก 2 บริษัทจัดตั้งเป็นบริษัท Computing -Tabulating-Recording-Company ซึ่งประสบความสำเร็จเป็นอย่างมาก และในปี ค.ศ. 1924 ได้เปลี่ยนชื่อเป็นInternational Business Corporation หรือที่รู้จักกันต่อมาในชื่อของบริษัท IBM นั่นเอง



เครื่องจัดเรียงบัตรเจาะรูของ Dr. Her Hollerith
          ในปี ค.ศ.1939 Dr. Howard H. Aiken จาก Harvard University ได้ร่วมมือกับบริษัท IBM ออกแบบคอมพิวเตอร์โดยใช้ทฤษฎีของBabbageและในปี ค.ศ.1944 Harvard mark I ก็ได้ถือกำเนิดขึ้นเป็นคอมพิวเตอร์เครื่องแรก ซึ่งมีขนาดยาว 5 ฟุต ใช้พลังงานไฟฟ้าและใช้ relay แทนเฟือง แต่ยังทำงานได้ช้าคือใช้เวลาประมาณ 3-5 วินาทีสำหรับการคูณ การพัฒนาที่สำคัญกับ Mark I ได้เกิดขึ้นปี 1946 ดดย Jonh Preper Eckert, Jr. และ Dr. Jonh W.Msuchly จาก University of Pennsylvnia ได้ออกแบบสร้างเครื่อง ENIAC ( Electronic Numeric Integator and Calcuator ) ซึ่งทำงานได้เร็วอยู่ในหน่วยของหนึ่งส่วนล้านวินาทีในขณะที่ Mark I ทำงานอยู่ในหน่วยของหนึ่งส่วนพันล้านเท่า โดยหัวใจของความสำเร็จนี้อยู่ที่การใช้หลอดสูญญากาศมาแทนที่ relay นั่นเองและถัดจากนั้น Mauchly และ Eckert ก็ทำการสร้าง UNIVAC ซึ่งเป็นคอมพิวเตอร์อิเล็กทรอนิส์เพื่อการค้าเครื่องแรกของโลก

เครื่อง ENIAC สูง 10 ฟุต กว้าง 10 ฟุต และยาว 10 ฟุต
         การพัฒนาที่สำคัญได้เกิดขึ้นมาอีก เมื่อ Jonh von Neumann ซึ่งเป็นที่ปรึกษาของโครงการ ENIAC ได้เสนอแผนสำหรับคอมพิวเตอร์เครื่องแรกที่จะทำการเก็บโปรแกรมไว้ในหน่วยโปรแกรมไว้ในหน่วยความจำที่เหมือนกับที่เก็บข้อมูลซึ่งพัฒนาการนี้ทำให้สามารถเปลียนวงจรของคอมพิวเตอร์ได้โดยอัตโนมัติแทนที่จะต้องทำการเปลี่ยนสวิทต์ด้วยมือเหมือนช่วงก่อน นอกจากนี้ Dr. Von neumann ยังได้นำระบบเลขฐานสองมาใช้ในคอมพิวเตอร์ซึ่งหลักการต่างๆเหล่านี้ได้ทำให้เครื่อง IAS ที่สร้างโดย Dr. von Neumann เป็นเครื่องคอมพิวเตอร์เอนกประสงค์เครื่องแรกของโลกเป็นการเปิดศักราช
ของคอมพิวเตอร์อย่างแท้จริงและยังได้เป็นบิดาคอมพิวเตอร์คนที่ 2
ยุคของคอมพิวเตอร์เทคโนโลยีคอมพิวเตอร์มีการพัฒนาอย่างต่อเนื่อง สามารถแบ่งออกได้โดยแบ่งส่วนประกอบของฮาร์ดแวร์ (Hardward ) เป็น 5 ยุคด้วยกัน

ยุคที่ 1 (The First Generation)ปี ค.ศ. 1951 – 1958

คอมพิวเตอร์ในยุคแรกนี้ ใช้หลอดสูญญากาศในวงจรอิเล็กทรอนิกส์ของเครื่องคอมพิวเตอร์ ทำให้ต้องการกำลังไฟฟ้าเลี้ยงวงจรที่มีปริมาณมากและทำให้มีความร้อนเกิดขึ้นมากจึงต้องติดตั้งเครื่องในห้องปรับอากาศ ความเร็วในการทำงานเป็นวินาที เครื่องคอมพิวเตอร์มีขนาดใหญ่ สื่อที่ใช้ในการเก็บข้อมูล คือ บัตรเจาะรู
ภาษาคอมพิวเตอร์ที่ใช้ในการเขียนโปรแกรมเพื่อควบคุมการทำงาน คือ ภาษาเครื่องซึ่งเป็นภาษาที่ใช้รหัสเลขฐานสอง ทำให้เข้าใจยาก
สรุป
อุปกรณ์ : ใช้หลอดไฟสูญญากาศและวงจรไฟฟ้า
หน่วยวัดความเร็ว : วัดเป็นวินาที ( Second)
ตัวอย่างภาษาคอมพิวเตอร์ : ภาษาเครื่อง (Machine Language)
ตัวอย่างเครื่องคอมพิวเตอร์ : Univac I, IBM 650, IBM 700, IBM 704, IBM 705, IBM 709 และ MARK I


MARK I

ยุคที่ 2 (The Second Generation) ปี ค.ศ. 1959 – 1964

เครื่องคอมพิวเตอร์มีขนาดเล็กลง กินไฟน้อยลง ราคาถูกลง เพราะมีการประดิษฐ์ทรานซิสเตอร์ขึ้นมาใช้แทนหลอดสูญญากาศ ทำให้ทำงานได้เร็วขึ้น ความเร็วในการทำงานเท่ากับ 1/103 วินาที (มิลลิเซคคั่น) และได้ผลลัพธ์ที่ถูกต้องมากกว่าใช้หลอดสูญญากาศ ทรานซิสเตอร์มีขนาดเล็กกว่าหลอดสูญญากาศ 200 เท่า และได้มีการสร้างวงแหวนแม่เหล็ก (Magnetic core) มาใช้แทนดรัมแม่เหล็ก (Magnetic drum) เป็นหน่วยความจำภายในซึ่งใช้ในการเก็บข้อมูลและชุดคำสั่งภาษาคอมพิวเตอร์ที่ใช้เขียนโปรแกรมในยุคที่ 2 นี้ คือ ภาษาแอสแซมบลี้ (Assembly) ซึ่งเป็นภาษาที่ใช้สัญลักษณ์แทนคำสั่งต่าง ๆ ทำให้เขียนโปรแกรมได้ง่ายกว่าภาษาเครื่องเครื่องคอมพิวเตอร์ในยุคนี้ เช่น IBM 1620,IBM 401, Honeywell
สรุป
อุปกรณ์ : ใช้ทรานซิสเตอร์(Transistor) แทนหลอดไฟสูญญากาศ
หน่วยวัดความเร็ว : วัดเป็นมิลลิวินาที ( Millisecond)
ตัวอย่างภาษาคอมพิวเตอร์ : ภาษาแอสแซมบลี (Assembly) , ภาษาฟอร์แทรน (FORTRAN)
ตัวอย่างเครื่องคอมพิวเตอร์ : IBM 1620, IBM 1401, CDC 6600, NCR 315 , Honey Well


Honey Well

ยุคที่ 3 (The Third Generation) ปี ค.ศ. 1965 – 1970

เครื่องคอมพิวเตอร์ที่ถูกพัฒนามาใช้ในยุคนี้เป็นวงจรรวม หรือ เรียกว่าไอซี (IC : Integrated Circuit) ซึ่งเป็นวงจรอิเล็กทรอนิกส์ที่ถูกบรรจุลงในแผ่นซิลิคอน (silicon) บาง ๆ ที่ เรียกว่า ซิป (Chip) ในซิปแต่ละตัวจะประกอบด้วยวงจรอิเล็กทรอนิกส์หลายพันตัว จึงทำให้คอมพิวเตอร์มีขนาดเล็ลงกว่าเดิมแต่ความเร็วในการทำงานสูงขึ้น ความเร็วในการทำงานเป็น 1/106 วินาที่ (ไมโครเซคคั่น) กินไฟน้อยลง ความร้อนลดลงปละประสิทธิภาพในการทำงานเพิ่มขึ้น
แต่ก่อนที่คอมพิวเตอร์จะเป็นวงจรรวม คอมพิวเตอร์จะถูกออกแบบเพื่อใช้กับงานแต่ละอย่าง เช่น ใช้ในงานคำนวณหรือใช้กับงานธุรกิจ เมื่อคอมพิวเตอร์ถูกพัฒนามาใช้วงจรรวมก็สามารถใช้กับงานที่ซับซ้อนได้มากขึ้นIBM 360 เป็นหนึ่งในคอมพิวเตอร์ที่ใช้วงจรรวมที่สามารถทำงานได้ทั้งการประมวลผลแฟ้มข้อมูล และวิเคราะห์ค่าทางคณิตศาสตร์ ต่อมาบริษัท DEC (Digital Equiptment Corporation) ได้หันมามุ่งผลิตคอมพิวเตอร์ขนาดเล็ก เพื่อหลีกเลี่ยงการแข่งขันกับ IBM มินิคอมพิวเตอร์ (Minicomputer) จึงถูกพัฒนาขึ้นเป็นครั้งแรก ในช่วงยุคที่ 2 และนิยมใช้กันแพร่หลาย DEC ได้แนะนำมินิคอมพิวเตอร์เครื่องแรก และ PDP1 เป็นหนึ่งในมินิคอมพิวเตอร์ยุคแรกที่นิยมใช้กันแพร่หลายโดยเฉพาะในกลุ่มของนักวิทยาศาสตร์ นักวิศวกร และนักวิจัยตามมหาวิทยาลัย เทคโนโลยีทางด้านซอฟต์แวร์ก็เกิดขึ้น โปรแกรมมาตรฐานได้ถูกเขียนขึ้นเพื่อใช้งานกับคอมพิวเตอร์ที่เป็นวงจรรวม และใช้เครื่องมาหลังจากที่ได้มีการปรับปรุงทางด้านฮาร์ดแวร์
สรุป
อุปกรณ์ : ใช้วงจรแบบไอซี (IC) ซึ่งเป็นวงจรอิเล็กทรอนิกส์ที่ถูกบรรจุลงในแผ่น ซิลิกอน ( Silicon)ที่เรียกว่า Chip
หน่วยวัดความเร็ว : วัดเป็นไมโครวินาที ( Microsecond)
ตัวอย่างภาษาคอมพิวเตอร์ : COBOL , PL/1 , RPG , BASIC
ตัวอย่างเครื่องคอมพิวเตอร์ : IBM 360 , CDC 3300 , UNIVAC 9400 BURROUGH 7500 , PDP1



UNIVAC

ยุคที่ 4 (The fourth Generation) ปี ค.ศ. 1971

ในยุคนี้ได้มีการพัฒนาเอาวงจรรวมหลาย ๆ วงจรมารวมเป็นวงจรขนาดใหญ่ เรียกว่า LSI (Large Scalue Integrated) ลงในซิปแต่ละอัน บริษัทอินเทล (Intel) ได้สร้างไมโครโปรเซสเซอร์ (Microprocessor) ซึ่งเป็นซิป 1 อัน ที่ประกอบด้วยวงจรทั้งหมดที่ต้องใช้ในการประมวลผลโปรแกรมไมโครโปรเซสเซอร์ซิปที่ใช้ในเครื่องพีซี (PC : Personal Computer) มีขนาดกระทัดรัดประกอบด้วยส่วนประกอบของ ซีพียู (CPU) 2 ส่วน คือ หน่วยควบคุม (Control Unit) และ หน่วยคำนวณและตรรก (Arithmetic / Logic Unit)ปัจจุบันได้มีการสร้างวงจรอิเล็กทรอนิกส์หลายหมื่นวงจรรวมอยู่ในซิปเดียว เป็นวงจร LSI (Large Scalue Integrated) และ VLSI (Very Large Scale Integrated) ในยุคนี้ได้มีการสร้างเครื่องคอมพิวเตอร์ทั้งขนาดเล็ก ขนาดกลาง และขนาดใหญ่ ได้แก่ ไมโครคอมพิวเตอร์ มินิคอมพิวเตอร์ เมนเฟรมคอมพิวเตอร์ และซุปเปอร์คอมพิวเตอร์ โดยเฉพาะเครื่องไมโครคอมพิวเตอร์ ได้รับความนิยมมากเพราะมีขนาดเล็ก กระทัดรัดและราคาถูกแต่มีประสิทธิภาพเพิ่มขึ้น ทำงานเร็วขึ้น ความเร็วในการทางานเป็น 1/109 วินาที (นาโนเซคคั่น) และ 1/1012 วินาที (พิโคเซคคั่น) นอกจากนี้วงจร LSI ยังได้ถูกนำไปใช้กับเครื่องคอมพิวเตอร์ขนาดใหญ่เป็นการลด ค่าใช้จ่ายพร้อมกับเพิ่มประสิทธิภาพในการทำงาน
สรุป
อุปกรณ์ : ใช้ระบบ LSI ( Large Scale Integrated ) ซึ่งเป็นวงจรที่ประกอบด้วยทรานซิสเตอร์หลายพันตัวและต่อมาได้รับการพัฒนาปรับปรุงเป็น VLSI ซึ่งก็คือ Microprocessor หรือ CPU
หน่วยวัดความเร็ว : วัดเป็นนาโนวินาที ( Nanosecond) และพิโควินาที (Picosecond)
ตัวอย่างภาษาคอมพิวเตอร์ : ภาษาปาสคาล (PASCAL) , ภาษาซี (C)
ตัวอย่างเครื่องคอมพิวเตอร์ : IBM 370
เนื่องจากการเพิ่มความจุของหน่วยบันทึกข้อมูลสำรองนี่เอง ซอฟต์แวร์ชนิดใหม่ได้พัฒนาขึ้น เพื่อให้สามารถเก็บรวมรวบและบันทึกแก้ไขข้อมูลจำนวณมหาศาลที่ถูกจัดเก็บไว้ นั่นคือ ซอฟร์แวร์ ฐานข้อมูล (Data base ) นอกจากนี้ ยังมีการถือกำเนิดขึ้นของเครื่องคอมพิวเตอร์ส่วนบุคคลในปี 1975 คือเครื่อง Altair ซึ่งใช้ชิฟ intel 8080 และถัดจากนั้นก็เป็นยุคของเครื่อง และ ตามลำดับ ในส่วนของซอฟต์แวร์ก็ได้มีการพัฒนาให้เป็นมิตรกับผู้ใช้ มีขนาดใหญ่และซับซ้อนมากขึ้นเรื่อย ๆ รวมทั้งมีการนำเทคนิคต่าง ๆ เช่น OOP (Object-Oriented Programming) และ Visual Programming มาเป็นเครื่องมือช่วยในการพัฒนา
การพัฒนาที่สำคัญอื่นๆในยุคที่ 4 คือการพัฒนาเครื่อข่ายคอมพิวเตอร์ความเร็วสูง ทำให้คอมพิวเตอร์สามารถเชื่อมโยงและแลกเปลี่ยนกันได้ โดยการใช้งานภายในองค์กรนั้น ระบบเครื่อข่ายท้องถิ่น (Local Araa Networks) ซึ่งนิยมเรียกว่า แลน (LANs) จะมีบทบาทในการเชื่องโยงเครื่องนับร้อยเข้าด้วยกันในพื้นที่ห่างไกลกันนัก ส่วนระบบเครื่องข่ายระยะไกล ( Wide Area Networks ) หรือ แวน (WANs) จะทำหน้าที่เชื่อมโยงเครื่องคอมพิวเตอร์ที่อยู่ห่างไกลคนละซีกโลกเข้าด้วยกัน


IBM 370

ยุคที่ 5 (The Fifth Generation) ตั้งแต่ปี ค.ศ. 1980 - 1989

ในยุคที่ 4 และยุคที่ 5 ก็จัดเป็นยุคของคอมพิวเตอร์ในปัจจุบันแต่ในยุคที่ 5 นี้มีการใช้คอมพิวเตอร์ เพื่อช่วยการจัดการและนำมาใช้สนับสนุนการตัดสินใจของผู้บริหารจึงเกิดสาขา MIS (Management Information System) ขึ้น
ในปี ค.ศ 1980 ญี่ปุ่นได้พยายามที่จะสร้างเครื่องคอมพิวเตอร์ให้สามารถคิดและ ตัดสินใจได้เอง โดยสร้างเครื่องคอมพิวเตอร์ให้มี “สติปัญญา” เพื่อใช้ในการตัดสินใจแทนมนุษย์จึงเกิดสาขาใหม่ขึ้นเรียกว่า สาขาปัญญาประดิษฐ์ (AI : Artificial Intelligence) สาขาปัญญาประดิษฐ์เป็นสาขาที่เน้นถึงความพยายามในการนำเอากระบวนการทางความคิดของมนุษย์มาใช้ในการ แก้ปัญหาด้วยระบบคอมพิวเตอร์ นอกจากนี้มีการตื่นตัวในการจัดเก็บข้อมูลเป็นระบบฐานข้อมูล (Database) การนำคอมพิวเตอร์มาใช้กับงานทางด้านกราฟิก และมีการพัฒนาซอฟต์แวร์ (Software) เพื่อใช้กับงานเฉพาะอย่าง เช่น งานการเงิน งานงบประมาณ งานบัญชี งานสต๊อกสินค้า เป็นต้น


ยุคที่ 6 (Sixth Generation) ปี ค.ศ. 1990- ปัจจุบัน

ที่ผ่านมาทั้ง 5 ยุค พัฒนาการของคอมพิวเตอร์จะเป็นไปในทางการปรับปรุงการผลิต และการ เสริมสร้างความสามารถทางด้านการคำนวณของคอมพิวเตอร์
เป็นส่วนใหญ่ ซึ่งเป็นการจำกัด ความสามารถทางด้านการป้อนข้อมูล ในปัจจุบัน ความต้องการทางด้านการป้อนข้อมูลอย่างอิสระ โดยใช้เสียงและภาพ ซึ่งถือเป็น
การป้อนข้อมูลโดยธรรมชาตินั้นสูงขึ้นเรื่อยๆ ความต้องการคอมพิวเตอร์รุ่นใหม่ที่ไม่เป็นเพียงแต่เครื่องคำนวณ จึงสูงขึ้นเรื่อย ๆ โดยเฉพาะอย่างยิ่งความต้องการ
ประยุกต์ใช้คอมพิวเตอร์ในการแก้ปัญหาสังคม เศรษฐกิจ อุตสาหกรรม เทคโนโลยี การติดต่อระหว่างประเทศและอื่น ๆ ในช่วงทศวรรษปี 1990 เช่น
1) การพัฒนาด้านการผลิตของอุตสาหกรรม การตลาด ธุรกิจ
2) การพัฒนาทางด้านการติดต่อสื่อสารระหว่างประเทศ
3) การช่วยเหลือทางด้านการประหยัดพลังงาน
4) การแก้ไขปัญหาของสังคม การศึกษา การแพทย์
ความสามารถที่คอมพิวเตอร์ยุคที่ 6 ควรจะมี อาจแบ่งได้ดังนี้
1) การพัฒนาปัญญาให้คอมพิวเตอร์ เพื่อที่จะสามารถนำไปใช้เป็นผู้ช่วยของมนุษย์ได้ สำหรับการพัฒนาด้านปัญญาของคอมพิวเตอร์หรือที่เรียกว่า AI (artificial intelligence) อาจกล่าวได้ว่าเป็นการพัฒนาด้านการป้อนข้อมูลด้วยเสียงและภาพ ความสามารถในการโต้ตอบด้วยภาษาพูด ความสามารถในการเก็บข้อมูลในด้านความรู้และการนำความรู้ไปใช้ การค้นหาความรู้จากข้อมูลมหาศาสล และอื่น ๆ
2) การลดความยากลำบากในการผลิตซอฟต์แวร์ เป็นการพัฒนาทางด้านการเขียนโปรแกรม พัฒนา ภาษาของโปรแกรมให้ง่ายขึ้น วิธีการติดต่อกับผู้ใช้ และอื่น