คำถามที่พบบ่อยในวิชา COA
* memory กับ hard disk ไม่ใช่อันเดียวกันเหรอ
- โดยทั่วไป ไม่ใช่ memory ทำงานกับ cpu โดยตรง ส่วน hard disk จะถูก accessed ผ่าน I/O
* ใน pipeline ทำไมถึงพูดถึง instruction memory กับ data memory. Memory ไม่ได้มีอันเดียวเหรอ
- (1) มันขึ้นกับออกแบบ (2) เขามักออกแบบ hierarchy หมายถึง main memory เก็บทุกอย่าง (“อันเดียว”) แต่จะส่วนของข้อมูลที่กำลังจะใช้ถูกโหลดเข้า data memory (หรืออาจเรียก data cache) แบบเดียวกับส่วนที่เป็นคำสั่งที่กำลังจะใช้จะถูกโหลดเข้า instruction memory (instruction cache)
* โปรแกรม อยู่ใน hard disk หรืออยู่ใน memory กันแน่
- เก็บถาวรใน hard disk แต่เวลาจะใช้ต้องอยู่ใน memory คือโหลดมาเข้า memory ตอนจะใช้
* ตกลง hard disk เป็น memory หรือเป็น I/O
- เป็นอุปกรณ์ I/O โดย access แบบ I/O แต่ทำงานเก็บข้อมูล/คำสั่ง ที่จะถูกโหลดไปเข้า main memory (หรือถูกย้ายโดย DMA)
* tri-state bus มีประโยชน์อะไร
- ถ้ามีอุปกรณ์ต่อ bus อยู่สามตัว เรียก A, B และ C ถ้า A กับ B เป็นตัวส่ง C เป็นตัวรับ ถ้า A จะส่ง “111…1” ไปให้ C ถ้า B ไม่อยู่ในสถานะ Z (high impedance เหมือนตัดวงจรออก) ไม่ว่า B มีค่าเป็นอะไร (ยกเว้น ค่าตรงกับ A เป๊ะ) B กับ A จะ short กัน (เช่น A ออก 1 แล้ว B เป็น 0 ก็เหมือนเอา ขั้วบวกแบต จิ้มกับขั้วลบแบต น่ะครับ /ปล อันตรายนะครับ อย่าทำ!)
* bus คือ อะไร
- กลุ่มสายสัญญาณ ที่มันจะใช้ร่วมกันสำหรับอุปกรณ์หลาย ๆ ตัว
* address มีประโยชน์อะไร
- เป็นเหมือนเลขประจำตัว ถ้าเป็น address ของอุปกรณ์จะได้รู้ว่า อ้างถึงอุปกรณ์ตัวไหน ถ้าเป็น memory จะได้รู้ว่า อ้างถึงข้อมูล byte ไหน (หรือ กลุ่ม cells ไหนใน memory cell array)
* cache กับ memory มันต่างกันยังไง
- cache เป็น คำที่มักใช้เรียก memory ที่ใน hierarchy และอยู่ใกล้ cpu มากกว่า ทำงานเร็วกว่า
* pipeline มีประโยชน์อะไร
- ก็ถ้า 1 คำสั่งมีงานย่อย ๆ ต้องทำหลายงาน หลาย ๆ ครั้งไม่จำเป็นต้องรอให้คำสั่งแรกเสร็จทุกงานย่อย ค่อยเริ่มทำคำสั่งที่สองก็ได้ แบบเดียวกัน; เหมือนพ่อครัว ทอดปลาอยู่ แต่มีดว่าง ก็หั่นกระเทียมรอซิ พอทอดปลาเสร็จ จะได้เอากระเทียมลงผัดได้เลย
* pipeline มันจะไม่ทำให้มั่วเหรอ
- ก็ขึ้นกับการจัดการไงครับ ถึงต้องเรียนว่าจะจัดการยังไง
* pipeline คือ parallel computing ใช่มั้ย
- กึ่ง ๆ แต่ไม่ใช่ parallel computing เต็มที่
* คอมพิวเตอร์มันจะรู้ได้ยังไงว่า ไอ้ที่เก็บใน memory เป็น instruction หรือ data หรือถ้าเป็น data มันจะรู้ได้ยังไงว่า เป็นตัวเลข หรือ ascii
- ไม่รู้ ขึ้นกับเอาไปใช่ ถ้าเอาไปรัน ข้อมูลก็ทำหน้าที่เป็น instruction ถ้าเอาไปใช้เป็น data มันก็เหมือนเป็น data และมันก็ไม่รู้ว่า เป็นตัวเลข หรือ ascii ถ้าเอาไปใช้เป็นตัวเลข มันก็ทำหน้าที่เป็นตัวเลข ถ้าเอาไป display (encode เป็น ascii) มันก็จะแสดงเป็น ascii.
* เวลารัน assembly มัน call function ไปแล้ว มันจะกลับมาได้ยังไง
- ตอน call ไป มันก็ต้องเก็บ address ที่จะกลับมา ไว้ก่อนไงครับ
* stack มันอยู่ตรงไหน
- อยู่ใน memory ที่เราจัดที่ไว้ให้
* os กับ compiler ใครเกิดก่อนกัน
- (1) โดยทฤษฎี เราเขียน os จาก assembly หรือแม้แต่จาก machine code ได้ แต่โครตยาก (2) compiler ไม่ได้ต้องการ os (ยกเว้น เราจะโหลด os library เช่น include os) และเราก็เขียน compiler จาก assembly หรือ machine code ได้; ประวัติศาสตร์ เป็นยังไง ไปหาดูได้ครับ แต่ถ้ามนุษย์ยุคหินจะเริ่ม ผมว่า เริ่มจาก compiler จะง่ายกว่ามั้ง