ประสิทธิภาพ, รอบ fetch-execute และการขัดจังหวะ
แนะนำใหม่| English | ความหมาย |
|---|---|
| interrupt/ˈɪntərʌpt/ | สัญญาณรบกวน |
| clock speed/klɒk spiːd/ | ความเร็วของนาฬิกา |
| fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ | รอบการดึงและดำเนินการ |
| cores/kɔːz/ | คอร์ |
| cache/kæʃ/ | แคช (หน่วยความจำเร็ว) |
| word size/wɜːd saɪz/ | ขนาดคำ |
| port/pɔːt/ | พอร์ต |
| peripheral/pəˈrɪfərəl/ | อุปกรณ์ต่อพ่วง |
| register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ | สัญกรณ์การถ่ายโอนรีจิสเตอร์ |
| stack/stæk/ | สตैก |
| interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ | โปรแกรมบริการ_interrupt |
| interrupt register/ˈɪntərʌpt ˈredʒɪstə/ | รีจิสเตอร์ interrupt |
ทำไมแล็ปท็อปของคุณหยุดทุกอย่างเมื่อคุณกดปุ่มคีย์บอร์ด
- โปรเซสเซอร์ทำงานหลายพันล้านรอบต่อวินาที หากมันต้องหยุดและถามคีย์บอร์ด "มีอะไรไหม?" ระหว่างคำสั่ง มันจะเสียเวลาส่วนใหญ่ไปกับคำถาม
- แทนที่จะทำเช่นนั้น คีย์บอร์ดส่ง interrupt. โปรเซสเซอร์จบคำสั่งปัจจุบัน, บันทึกตำแหน่ง, จัดการกับปุ่มคีย์บอร์ด, และกลับคืนมาราวกับว่าไม่มีอะไรเกิดขึ้น
- กลไกเดียวนี้คือเหตุผลที่โปรเซสเซอร์เดียวดูเหมือนจะเล่นเพลง, โฟลเดอร์เว็บ และการพิมพ์ของคุณพร้อมกัน
- บทเรียนนี้ครอบคลุมสิ่งที่ทำให้โปรเซสเซอร์เร็ว, วิธีเชื่อมต่อกับอุปกรณ์, วิธีทำงานของคำสั่งหนึ่งอย่างละเอียด, และวิธีที่interruptแทรกเข้ามา
สิ่งที่มีผลต่อประสิทธิภาพ
- Clock speed: รอบ fetch-execute มากขึ้นต่อวินาที ดังนั้นคำสั่ง越多ต่อวินาที จนกว่าความร้อนจะเป็นขีดจำกัด
- Number of cores: แต่ละcore ดึงและดำเนินการคำสั่งของตัวเองในเวลาเดียวกัน ดังนั้นโปรแกรมหลายรายการหรือthread จึงทำงานแบบขนาน โปรแกรมต้องเขียนเพื่อใช้งานพวกมัน ดังนั้นการเพิ่มจำนวน core เป็นสองเท่าไม่ได้ทำให้ความเร็วเพิ่มขึ้นเป็นสองเท่า
- ความกว้างของบัส: บัสข้อมูลที่มีความกว้างมากกว่าสามารถถ่ายโอนบิตได้มากขึ้นต่อการถ่ายโอนหนึ่งครั้ง จึงต้องการจำนวนครั้งในการถ่ายโอนน้อยลง; บัสที่อยู่มีความกว้างมากกว่าสามารถเข้าถึงหน่วยความจำได้มากขึ้น
- แคช (Cache): เป็นหน่วยความจำขนาดเล็กและความเร็วสูงที่อยู่ใกล้กับโปรเซสเซอร์ เพื่อเก็บคำสั่งและข้อมูลที่ใช้งานบ่อยที่สุดล่าสุด ทำให้มีการเดินทางไปยัง RAM แบบช้าๆ น้อยลง ขนาดคำ (Word size), ปริมาณ RAM และประเภทการจัดเก็บข้อมูลก็ช่วยเพิ่มประสิทธิภาพด้วยเช่นกัน
เลือก ทั้งหมด ปัจจัยที่มีผลต่อประสิทธิภาพของ CPU
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Clock speed, cores และ cache (รวม word size, RAM, storage และ bus width) มีผลต่อประสิทธิภาพ สีเคสไม่มีผล
CPU แบบ multi-core มีประโยชน์เป็นพิเศษสำหรับ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Core เพิ่มเติมรันงานแบบขนาน งาน single-threaded ล้วนได้รับประโยชน์จากความเร็วมหาศาลต่อ core มากกว่า
____ หน่วยความจำเป็นที่เก็บเล็กและเร็วข้างโปรเซสเซอร์ที่เก็บคำสั่งและข้อมูลที่เพิ่งใช้ไป เพื่อให้ลดการเดินทางช้าๆ ไป RAM ลง
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Cache มากขึ้นหมายความว่าชุดการทำงาน的大部分อยู่ข้างโปรเซสเซอร์ ซึ่งเป็นเหตุผลที่มันปรากฏในทุกการเปรียบเทียบประสิทธิภาพ
ตัวอย่างวิธีทำ: "อธิบายว่าทำไมคอมพิวเตอร์รุ่นใหม่จึงเร็วขึ้น"
- เปรียบเทียบสเปคทั้งสองบรรทัดต่อบรรทัด โดยแต่ละบรรทัดต้องมีเหตุผลประกอบ
- 3.8 GHz เทียบกับ 2.4 GHz: มีรอบการทำงานต่อวินาทีมากขึ้น จึงสามารถดำเนินการประมวลผลคำสั่งได้มากขึ้นต่อวินาที
- 8 คอร์ เทียบกับ 4: สามารถดึงและประมวลผลคำสั่งได้มากขึ้นเป็นสองเท่าในเวลาเดียวกัน สำหรับซอฟต์แวร์ที่รองรับการใช้งานหลายคอร์
- 16 MB ของแคชเมื่อเทียบกับ 4 MB: ข้อมูลในเซตที่ทำงานอยู่จะถูกเก็บไว้ใกล้กับโปรเซสเซอร์มากขึ้น ทำให้ต้องรอข้อมูลจาก RAM น้อยลง แต่ละบรรทัดมีคะแนน 2 ส่วน: ปัจจัยและผลที่ตามมา
พอร์ต
- พอร์ต คือซ็อกเก็ตทางกายภาพที่ใช้เชื่อมต่ออุปกรณ์ต่อพ่วง (peripheral)
- USB (Universal Serial Bus) เป็นแบบอเนกประสงค์: ใช้กับคีย์บอร์ด, ไดร์ฟ, โทรศัพท์ มันคือระบบเสียบแล้วใช้งานได้ทันที: คอมพิวเตอร์จะตรวจจับอุปกรณ์ ระบุชนิด โหลดไดรเวอร์ และจ่ายไฟให้โดยไม่ต้องรีบูตเครื่อง
- HDMI (High Definition Multimedia Interface) ส่งสัญญาณวิดีโอดิจิทัลและเสียงผ่านสายเดียว ดังนั้นจึงไม่ต้องแปลงเป็นสัญญาณอนาลogue และคุณภาพภาพไม่ลดลง VGA (Video Graphics Array) คือซ็อกเก็ตส่งสัญญาณวิดีโอแบบอนาลogueรุ่นเก่า
จับคู่พอร์ตแต่ละตัวกับสิ่งที่มันส่งผ่าน
Difficulty 2/5 · 140 coins + a small bonus on first completion today
สัญญาณต่างกัน, ซ็อกเก็ตต่างกัน: สาย HDMI จะไม่เข้ากับพอร์ต USB
ขั้นตอนการดึงคำสั่ง (Fetch stage)
- ทุกครั้งที่ประมวลผลหนึ่งคำสั่ง โปรเซสเซอร์จะดำเนินการตาม รอบดึง-ดำเนินการ (fetch-execute cycle) โดยขั้นตอนดึงคำสั่งมาอยู่ก่อน และข้อสอบต้องการคำตอบในรูปแบบ สัญลักษณ์การถ่ายโอนรีจิสเตอร์ (register transfer notation)
MAR ← [PC] the address of the next instruction goes to the MAR
PC ← [PC] + 1 the PC now points to the following instruction
MDR ← [[MAR]] the instruction at that address is read into the MDR
CIR ← [MDR] the instruction is copied into the CIR for decoding
- สัญญาณอ่านจะเดินทางบนบัสควบคุม ที่อยู่ของคำสั่งเดินทางบนบัสที่อยู่ และคำสั่งจะกลับมาทางบัสข้อมูล PC จะถูกเพิ่มค่าขึ้นทันทีหลังจากที่อยู่ของมันถูกคัดลอกไป เพื่อที่ว่าคำสั่งกระโดด (jump) ที่ถูกเรียกใช้ทีหลังยังสามารถมาแทนที่ค่าเดิมได้

PC → MAR → Memory → MDR → CIR, พร้อมกับการเพิ่มค่า PC ระหว่างทาง
เรียงลำดับขั้นตอนการดึงคำสั่งให้ถูกต้อง
Difficulty 3/5 · 200 coins + a small bonus on first completion today
PC → MAR, เพิ่มค่า PC, ส่งสัญญาณอ่าน, แล้วคำสั่งเดินทางจาก MDR → CIR พร้อมสำหรับการถอดรหัส
PC จะถูกเพิ่มค่าในช่วงการดึงคำสั่ง เพื่อให้รอบถัดไปดึงคำสั่งถัดไปได้
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การเพิ่มค่า PC ก่อนหน้านี้ทำให้ชี้ไปที่คำสั่งถัดไปเมื่อคำสั่งปัจจุบันดำเนินการ (ยกเว้นมีการกระโดดเปลี่ยน)
การตีความ, การดำเนินการ, และการทำซ้ำ
- การตีความ (Decode): หน่วยควบคุมจะพิจารณาจากคำสั่งใน CIR ว่าคำสั่งนี้คือการกระทำอะไร และมี operands อยู่ที่ไหน
- การดำเนินการ (Execute): การคำนวณทางคณิตศาสตร์และตรรกะจะถูกส่งไปยัง ALU โดยมีผลลัพธ์อยู่ใน ACC; คำสั่ง load หรือ store จะย้ายข้อมูลระหว่างหน่วยความจำและรีจิสเตอร์; คำสั่ง jump จะเขียนที่อยู่ใหม่เข้าไปใน PC
- จากนั้นรอบการทำงานจะวนกลับไปที่
MAR ← [PC]ในตอนท้ายของแต่ละรอบ โปรเซสเซอร์จะตรวจสอบด้วยว่ามีสัญญาณขัดจังหวะ (interrupt) รออยู่หรือไม่
*คำสั่ง LOAD หนึ่งตัวและ ADD หนึ่งตัว จะแสดงการเคลื่อนย้ายข้อมูลผ่านรีจิสเตอร์: ดึง, ตีความ, ดำเนินการ, ทำซ้ำ
รอบ fetch-execute
แตะวนรอบที่ CPU ทำซ้ำหลายพันล้านครั้งต่อวินาที ดูว่า fetch ใช้รีจิสเตอร์ PC/MAR/MDR/CIR อย่างไร แล้ว decode และ execute ทำงานกับสิ่งที่ถูกดึงมา
ตัวอย่างวิธีทำ: การดำเนินการสองคำสั่งโดยใช้สัญลักษณ์
- ดำเนินการ
LDD 200(โหลดเนื้อหาจากที่อยู่ 200 เข้าไปใน ACC):MAR ← 200, ตามด้วยMDR ← [[MAR]], แล้วACC ← [MDR] - ดำเนินการ
ADD 201:MAR ← 201,MDR ← [[MAR]],ACC ← [ACC] + [MDR] - ดำเนินการ
STO 202:MAR ← 202,MDR ← [ACC],[[MAR]] ← [MDR] - แต่ละบรรทัดจะย้ายค่าหนึ่งค่าระหว่างสองตำแหน่ง สี่เหลี่ยมคู่ (double brackets) หมายถึง "ตำแหน่งหน่วยความจำที่มีที่อยู่อยู่ใน MAR" เสมอ
วางการถ่ายโอนรีจิสเตอร์ที่ดำเนินการ LDD 200按照顺序。
Difficulty 3/5 · 200 coins + a small bonus on first completion today
ที่อยู่ไปยัง MAR เนื้อหาของที่อยู่นั้นไปยัง MDR จากนั้นเข้าสู่ Accumulator
การหยุดทำงานชั่วคราว (Interrupts)
- การหยุดทำงานชั่วคราว คือสัญญาณที่หยุดรอบการทำงานปกติชั่วคราว เพื่อให้หน่วยประมวลผลสามารถจัดการกับเหตุการณ์ฉุกเฉินได้
- สาเหตุ: อุปกรณ์ฮาร์ดแวร์ (การกดปุ่ม, บัฟเฟอร์ของเครื่องพิมพ์ว่างเปล่า,数据包 arrives), ความผิดพลาดของซอฟต์แวร์ (การหารด้วยศูนย์, คำสั่งที่ไม่ถูกต้อง, การเกินขอบเขตของการคำนวณ), นาฬิกาของระบบปฏิบัติการที่บ่งบอกถึงสิ้นสุดช่วงเวลาของงาน, หรือสัญญาณเตือนเมื่อไฟฟ้าดับ
- การหยุดทำงานชั่วคราวช่วยให้ระบบตอบสนองได้อย่างรวดเร็วโดยไม่ต้องให้หน่วยประมวลผลตรวจสอบอุปกรณ์ตลอดเวลา และเป็นกลไกที่ทำให้ระบบปฏิบัติการสามารถทำงานหลายอย่างพร้อมกันได้ (Multitasking)

วงจรนี้มีการตรวจสอบการหยุดทำงานชั่วคราวที่ท้ายของแต่ละรอบ
การขัดจังหวะ (Interrupt) คือ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การขัดจังหวะหยุดรอบ fetch-execute ชั่วคราวเพื่อให้ CPU สามารถบริการเหตุการณ์เร่งด่วน แล้วจึงดำเนินต่อ
ข้อใดต่อไปนี้สามารถทำให้เกิดการขัดจังหวะได้? เลือก ทั้งหมด ที่ถูกต้อง
Difficulty 2/5 · 140 coins + a small bonus on first completion today
เหตุการณ์ฮาร์ดแวร์ ความผิดพลาดของซอฟต์แวร์ และตัวจับเวลาของระบบปฏิบัติการ ล้วนก่อให้เกิดการขัดจังหวะ (interrupt) การสิ้นสุดของลูปเป็นการไหลของโปรแกรมปกติที่จัดการด้วยการกระโดด (jump) ไม่ใช่การขัดจังหวะ
การจัดการกับการหยุดทำงานชั่วคราว
- เสร็จสิ้นคำสั่งปัจจุบัน บันทึกสถานะ: เนื้อหาของ PC และรีจิสเตอร์อื่นๆ จะถูกส่งเข้าไปใน ส택 (Stack)
- โหลดที่อยู่ของ โปรแกรมบริการการหยุดทำงานชั่วคราว (ISR) เข้าไปใน PC แล้วดำเนินการ ISR จะจัดการกับเหตุการณ์นั้น
- กู้คืน สถานะที่บันทึกไว้จากส栈 และดำเนินต่อจากโปรแกรมที่ถูกหยุดไว้ โดยเริ่มจากตำแหน่งเดิมที่หยุดไว้พอดี

บันทึก, บริการ, กู้คืน, ดำเนินต่อ
เมื่อเกิดการขัดจังหวะ CPU จะดำเนินการคำสั่งปัจจุบันให้เสร็จสิ้นก่อน แล้วจึง:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
มันจะบันทึก PC และรีจิสเตอร์, รันโปรแกรมบริการขัดจังหวะ, แล้วคืนค่าสถานะและดำเนินต่อจากจุดที่ยังค้างอยู่
ตัวอย่างวิธีทำ: คำตอบแบบ 4 คะแนนเกี่ยวกับการหยุดทำงานชั่วคราว
- อธิบายวิธีการตรวจจับและการจัดการกับการหยุดทำงานชั่วคราวจากอุปกรณ์อินพุตในวงจรการดึงคำสั่งและดำเนินการ
- อุปกรณ์ส่งสัญญาณการหยุดทำงานชั่วคราวซึ่งจะตั้งค่าแฟล็กใน รีจิสเตอร์การหยุดทำงานชั่วคราว หน่วยประมวลผลจะตรวจสอบรีจิสเตอร์นี้ที่ ท้ายของแต่ละรอบ, หลังจากคำสั่งปัจจุบันดำเนินการเสร็จสิ้นแล้ว
- หากมีแฟล็กถูกตั้งค่า และการหยุดทำงานชั่วคราวมีระดับความสำคัญสูงกว่างานปัจจุบัน PC และรีจิสเตอร์อื่นๆ จะถูกบันทึกลงบนส栈 ที่อยู่ที่ของ ISR จะถูกโหลดเข้าไปใน PC และโปรแกรมนี้จะ被执行
- เมื่อเสร็จสิ้น รีจิสเตอร์จะถูกกู้คืนจากส栈 และโปรแกรมที่ถูกหยุดไว้จะดำเนินต่อ จุดสี่ข้อตามลำดับนี้
โปรเซสเซอร์จะตรวจสอบการขัดจังหวะที่ปลายของแต่ละรอบ fetch-execute cycle หลังจากคำสั่งปัจจุบันเสร็จสิ้น
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ช่วงเวลานี้คือสิ่งที่ทำให้สามารถบันทึกสถานะได้อย่างสะอาด: ไม่มีคำสั่งใดถูกทิ้งไว้กึ่งกลางทาง
คะแนนที่หลุดหายไป
- PC จะเพิ่มขึ้นในช่วง การดึงคำสั่ง (fetch) ไม่ใช่หลังจากการดำเนินการ (execute) ให้วาง
PC ← [PC] + 1ไว้เป็นข้อที่สอง, ตรงทันทีหลังจากMAR ← [PC] - การหยุดทำงานชั่วคราวจะถูกตรวจสอบที่ ท้าย ของรอบ NEVER ในกลางระหว่างคำสั่งใดคำสั่งหนึ่ง
- สถานะจะถูกส่งเข้าไปใน ส栈 และกลับมา又从那里 "CPU หยุด" หรือ "โปรแกรมหาย" เป็นคำตอบที่ผิด: มันจะดำเนินต่อจากตำแหน่งเดิมที่หยุดไว้
- จำนวนแกนที่มากขึ้นไม่ได้ทำให้ความเร็วเพิ่มขึ้นเป็นสองเท่า; ซอฟต์แวร์ต้องนำไปใช้ เมื่อเปรียบเทียบสเปคควรระบุไว้
คุณเข้าใจแล้ว
- ประสิทธิภาพ: ความเร็วของนาฬิกา (clock speed), จำนวนแกน, ความกว้างของบัส (bus width), แคช (รวมขนาดคำ, RAM, พื้นที่จัดเก็บ), โดยแต่ละอย่างมีผลกระทบที่แตกต่างกัน
- พอร์ต: USB เป็นอเนกประสงค์และเสียบแล้วใช้งานได้ทันที (plug-and-play), HDMI เป็นวิดีโอและเสียงแบบดิจิทัล, VGA เป็นวิดีโอแบบอนาล็อก
- ดึงข้อมูล:
MAR ← [PC],PC ← [PC] + 1,MDR ← [[MAR]],CIR ← [MDR]; จากนั้นถอดรหัส, ขบวนการตามลำดับ, ทำซ้ำ - การรบกวน (interrupt) จะถูกตรวจสอบที่จบของแต่ละรอบ: บันทึกสถานะบนสแต็ก, รัน ISR, ฟื้นฟูสถานะ, กลับมาดำเนินการต่อ