กลับสู่คอร์สเรียน
AI031 Professional

ระบบคอมพิวเตอร์: มุมมองจากนักพัฒนาโปรแกรม (ฉบับโลก)

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

5.0
36.0h
955 ผู้เรียน
0 การถูกใจ
ปัญญาประดิษฐ์
เริ่มเรียน

ภาพรวมคอร์สเรียน

📚 สรุปเนื้อหา

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

เชี่ยวชาญศิลปะของการเขียนโปรแกรมระบบโดยเข้าใจพื้นที่เชื่อมต่อระหว่างฮาร์ดแวร์และซอฟต์แวร์

ผู้แต่ง: รันดาล เอ. ไบรแอนต์, เดวิด อาร์. โอฮอลลารอน

คำขอบคุณ: ได้รับการสนับสนุนจากนักเรียนและอาจารย์ผู้สอนรายวิชา 15-213 ที่มหาวิทยาลัยคาร์เนกีเมล론 คำขอบคุณรวมถึงข้อเสนอแนะจาก มานาสา เอส. และ โมฮิต ทาฮิเลียนี

🎯 เป้าหมายการเรียนรู้

  1. ระบุว่าข้อมูลถูกแทนค่าด้วยบิตและบริบทภายในระบบอย่างไร
  2. ติดตามขั้นตอนสี่ขั้นตอนของระบบการคอมไพล์ จากโค้ดต้นฉบับไปยังโปรแกรมที่สามารถทำงานได้
  3. อธิบายโครงสร้างองค์ประกอบของฮาร์ดแวร์และลักษณะเชิงลำดับชั้นของอุปกรณ์จัดเก็บข้อมูล
  4. แปลงระหว่างสัญลักษณ์ฐานสิบ ฐานสอง และฐานสิบหก และอธิบายการกำหนดที่อยู่ระดับเครื่อง (การจัดเรียงบิต - Endianness)
  5. ดำเนินการปฏิบัติการระดับบิตและตรรกะในภาษา C และทำนายผลจากการเลื่อนทางคณิตศาสตร์
  6. วิเคราะห์การเข้ารหัสจำนวนเต็มเพื่อระบุช่องโหว่ที่อาจเกิดการล้น (overflow) และข้อผิดพลาดจากการแปลงชนิดข้อมูล
  7. วิเคราะห์ ความสัมพันธ์ระหว่างโครงสร้างภาษา C (ลูป สาขา ฟังก์ชัน) กับคำสั่งในภาษาแอสเซมบลี x86-64
  8. แยกองค์ประกอบ โครงสร้างสแตกเวลาทำงาน เพื่ออธิบายว่าพารามิเตอร์ถูกส่งผ่านอย่างไร ตัวแปรท้องถิ่นถูกจัดเก็บไว้ที่ใด และการเรียกซ้ำ (recursive calls) ถูกจัดการอย่างไร
  9. ประเมิน โครงสร้างหน่วยความจำสำหรับโครงสร้างข้อมูลที่หลากหลาย และใช้กฎการจัดเรียง (alignment rules) เพื่อคำนวณความจุรวมของการจัดเก็บ
  10. กำหนดสถานะที่ผู้เขียนโปรแกรมสามารถมองเห็นได้ใน Y86-64 และเข้ารหัส/ถอดรหัสคำสั่งเป็นลำดับไบต์

🔹 บทเรียนที่ 1: การเดินทางผ่านระบบคอมพิวเตอร์

ภาพรวม: บทเรียนนี้ให้ภาพรวมที่ครอบคลุมเกี่ยวกับวิธีที่ระบบคอมพิวเตอร์แสดงข้อมูล แปลงโปรแกรม และดำเนินการคำสั่งผ่านการทำงานร่วมกันของฮาร์ดแวร์และซอฟต์แวร์ที่ซับซ้อน สำรวจเส้นทางของโปรแกรมตั้งแต่โค้ดต้นฉบับจนถึงการประมวลผล บทบาทสำคัญของลำดับชั้นหน่วยความจำในการลดช่องว่างระหว่างโปรเซสเซอร์กับหน่วยความจำ โครงสร้างความสมมุติ (abstractions) ที่ระบบปฏิบัติการมอบให้ และกฎทางคณิตศาสตร์ที่ควบคุมประสิทธิภาพของระบบและการประมวลผลแบบขนาน

ผลลัพธ์การเรียนรู้:

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

🔹 บทเรียนที่ 2: การแทนค่าและจัดการข้อมูล

ภาพรวม: บทเรียนนี้สำรวจวิธีที่คอมพิวเตอร์ดิจิทัลแทนค่าและจัดการข้อมูลในระดับบิต ครอบคลุมการเปลี่ยนจากสัญลักษณ์ฐานสิบหกและขนาดคำระดับเครื่อง ไปสู่การเข้ารหัสที่ซับซ้อนของจำนวนเต็ม (ไม่ลบและสองส่วนเสริม - Two's-Complement) และเลขทศนิยม (มาตรฐาน IEEE 754) นักเรียนจะวิเคราะห์คุณสมบัติทางคณิตศาสตร์ของการคำนวณบนคอมพิวเตอร์ รวมถึงผลกระทบด้านความปลอดภัยจากการล้น (overflow) และความละเอียดอ่อนของการปัดเศษในระบบเลขทศนิยมจำกัด

ผลลัพธ์การเรียนรู้:

  • แปลงระหว่างสัญลักษณ์ฐานสิบ ฐานสอง และฐานสิบหก และอธิบายการกำหนดที่อยู่ระดับเครื่อง (การจัดเรียงบิต - Endianness)
  • ดำเนินการปฏิบัติการระดับบิตและตรรกะในภาษา C และทำนายผลจากการเลื่อนทางคณิตศาสตร์
  • วิเคราะห์การเข้ารหัสจำนวนเต็มเพื่อระบุช่องโหว่ที่อาจเกิดการล้น (overflow) และข้อผิดพลาดจากการแปลงชนิดข้อมูล

🔹 บทเรียนที่ 3: การแทนค่าระดับเครื่องของโปรแกรม

ภาพรวม: บทเรียนนี้ให้การศึกษาอย่างลึกซึ้งเกี่ยวกับวิธีที่โปรแกรมระดับสูงในภาษา C ถูกแปลงเป็นรหัสเครื่องแบบ x86-64 ครอบคลุมสถาปัตยกรรมพื้นฐานของโปรเซสเซอร์ รวมถึงเรจิสเตอร์และสแตก กลไกของควบคุมการไหล (เงื่อนไข ลูป และสวิตช์) กลไกการเรียกฟังก์ชันและการเรียกซ้ำ (recursion) และการแทนค่าระดับเครื่องของโครงสร้างข้อมูลซับซ้อน เช่น อาเรย์ โครงสร้าง (structs) และยูเนียน (unions) สุดท้าย บทเรียนนี้กล่าวถึงด้านความปลอดภัยของระบบผ่านการวิเคราะห์การล้นแบฟเฟอร์ (buffer overflow) และคำสั่งเฉพาะสำหรับการคำนวณเลขทศนิยม

ผลลัพธ์การเรียนรู้:

  • วิเคราะห์ ความสัมพันธ์ระหว่างโครงสร้างภาษา C (ลูป สาขา ฟังก์ชัน) กับคำสั่งในภาษาแอสเซมบลี x86-64
  • แยกองค์ประกอบ โครงสร้างสแตกเวลาทำงาน เพื่ออธิบายว่าพารามิเตอร์ถูกส่งผ่านอย่างไร ตัวแปรท้องถิ่นถูกจัดเก็บไว้ที่ใด และการเรียกซ้ำ (recursive calls) ถูกจัดการอย่างไร
  • ประเมิน โครงสร้างหน่วยความจำสำหรับโครงสร้างข้อมูลที่หลากหลาย และใช้กฎการจัดเรียง (alignment rules) เพื่อคำนวณความจุรวมของการจัดเก็บ

🔹 บทเรียนที่ 4: สถาปัตยกรรมโปรเซสเซอร์

ภาพรวม: บทเรียนนี้สำรวจสถาปัตยกรรมพื้นฐานของโปรเซสเซอร์ โดยเน้นการเปลี่ยนจากแบบลำดับ (SEQ) ไปสู่แบบพิพิธภัณฑ์ประสิทธิภาพสูง (PIPE) ใช้สถาปัตยกรรมคำสั่งแบบ Y86-64 (ISA) นักเรียนจะวิเคราะห์วิธีการเข้ารหัสคำสั่ง กระบวนการผ่านขั้นตอนต่าง ๆ (ดึงข้อมูล, ถอดรหัส, ดำเนินการ, หน่วยความจำ, เขียนกลับ) และการจัดการอุปสรรคด้านฮาร์ดแวร์โดยใช้ตรรกะควบคุม การหยุดชะงัก (stalling) และการส่งผ่านข้อมูล (forwarding) เพื่อเพิ่มประสิทธิภาพการประมวลผล

ผลลัพธ์การเรียนรู้:

  • กำหนดสถานะที่ผู้เขียนโปรแกรมสามารถมองเห็นได้ใน Y86-64 และเข้ารหัส/ถอดรหัสคำสั่งเป็นลำดับไบต์
  • ออกแบบตรรกะควบคุมฮาร์ดแวร์โดยใช้ภาษาควบคุมฮาร์ดแวร์ (HCL) สำหรับวงจรเชิงพาณิชย์และวงจรลำดับ
  • ติดตามการไหลของคำสั่งผ่านหกขั้นตอนของโปรเซสเซอร์แบบลำดับ และระบุผลกระทบจากการเริ่มต้นนาฬิกา (clocking)

🔹 บทเรียนที่ 5: การปรับปรุงประสิทธิภาพโปรแกรม

ภาพรวม: บทเรียนนี้สำรวจแนวทางเชิงระบบในการปรับปรุงประสิทธิภาพของโปรแกรม โดยเข้าใจการโต้ตอบระหว่างโค้ดระดับสูง ตัวแปลงที่มีการปรับปรุง และสถาปัตยกรรมของไมโครโปรเซสเซอร์สมัยใหม่ นักเรียนจะเรียนรู้การระบุ "อุปสรรคการปรับปรุง" เช่น การเข้าถึงหน่วยความจำแบบซ้อนทับ (memory aliasing) ใช้การเปลี่ยนแปลงระดับล่าง เช่น การขยายลูป (loop unrolling) และการจัดเรียงใหม่ (reassociation) และใช้เครื่องมือตรวจสอบประสิทธิภาพอย่าง GPROF เพื่อระบุจุดที่ทำให้เกิดความล่าช้าได้อย่างมีประสิทธิภาพ

ผลลัพธ์การเรียนรู้:

  • ระบุและบรรเทาอุปสรรคการปรับปรุง รวมถึงการเข้าถึงหน่วยความจำแบบซ้อนทับและภาระงานจากการเรียกฟังก์ชัน
  • วัดประสิทธิภาพของโปรแกรมโดยใช้เมตริก "รอบต่อองค์ประกอบ" (Cycles Per Element - CPE)
  • ใช้เทคนิคการขยายลูป การใช้ตัวสะสมหลายตัว และการจัดเรียงใหม่ (reassociation) เพื่อใช้ประโยชน์จากความสามารถขนานระดับคำสั่ง

🔹 บทเรียนที่ 6: ลำดับชั้นหน่วยความจำ

ภาพรวม: บทเรียนนี้สำรวจการออกแบบเชิงโครงสร้างและฟังก์ชันของลำดับชั้นหน่วยความจำ โดยเน้นการแลกเปลี่ยนระหว่างความเร็ว ราคา และความจุในการจัดเก็บข้อมูล บทเรียนนี้อธิบายเทคโนโลยีที่ขับเคลื่อนระบบสมัยใหม่ ตั้งแต่ SRAM และ DRAM ไปจนถึงดิสก์และ SSD และอธิบายหลักการของความต่อเนื่อง (Principle of Locality) ทั้งด้านเวลาและพื้นที่ ซึ่งทำให้หน่วยความจำแคชขนาดเล็กที่เร็วสามารถเพิ่มประสิทธิภาพของโปรแกรมได้อย่างมาก นักเรียนจะเรียนรู้การวิเคราะห์การจัดแผนแคช (Direct-Mapped, Set Associative, Fully Associative) และนำเทคนิคการปรับปรุง เช่น การจัดเรียงลูปและการแบ่งกลุ่ม (blocking) มาใช้เขียนโปรแกรมที่เหมาะกับแคช

ผลลัพธ์การเรียนรู้:

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

🔹 บทเรียนที่ 7: การเชื่อมต่อ (Linking)

ภาพรวม: บทเรียนนี้สำรวจกระบวนการระดับระบบสำคัญที่เรียกว่า "การเชื่อมต่อ" ซึ่งรวบรวมโค้ดและข้อมูลเป็นไฟล์เดียวที่สามารถโหลดเข้าหน่วยความจำและทำงานได้ นักเรียนจะเปลี่ยนจากโค้ดต้นฉบับไปยังไฟล์ไบนารีที่สามารถทำงานได้ ทำความเข้าใจว่าลิงเกอร์ (linker) จัดการกับการอ้างอิงสัญลักษณ์ รวมส่วนต่าง ๆ ผ่านการปรับตำแหน่ง (relocation) และจัดการไลบรารีแบบคงที่ (static) และแบบพลวัต (dynamic) บทเรียนจบลงด้วยเทคนิคขั้นสูง เช่น การแทรกแซงไลบรารี (library interpositioning) และโค้ดที่ไม่พึ่งตำแหน่ง (Position-Independent Code - PIC) ที่ใช้ในไลบรารีร่วมสมัย

ผลลัพธ์การเรียนรู้:

  • ติดตามการเปลี่ยนแปลงจากไฟล์ต้นฉบับผ่านตัวแปลง (compiler driver) ไปยังโปรแกรมสุดท้ายที่สามารถทำงานได้
  • วิเคราะห์ไฟล์วัตถุแบบ ELF เพื่อระบุประเภทสัญลักษณ์และโครงสร้างส่วนต่าง ๆ
  • ประยุกต์กฎการแก้ไขสัญลักษณ์เพื่อจัดการชื่อซ้ำและข้อพึ่งพาในช่วงการเชื่อมต่อ

🔹 บทเรียนที่ 8: การควบคุมกระแสที่ผิดปกติ

ภาพรวม: บทเรียนนี้สำรวจการควบคุมกระแสที่ผิดปกติ (Exceptional Control Flow - ECF) ซึ่งเป็นกลไกที่ระบบคอมพิวเตอร์ใช้ตอบสนองต่อการเปลี่ยนแปลงสถานะของระบบ เราจะศึกษาวิธีการประยุกต์ใช้ ECF ทุกระดับของระบบ ตั้งแต่ ข้อผิดพลาดระดับฮาร์ดแวร์ (Exceptions) ที่ถูกเริ่มโดยฮาร์ดแวร์ ไปจนถึง การสลับสภาพแวดล้อม (Context Switching) และ การควบคุมกระบวนการ (Process Control) ระดับระบบปฏิบัติการ (เช่น fork, wait, execve) รวมถึง สัญญาณ (Signals) และ การกระโดดแบบไม่ท้องถิ่น (Nonlocal Jumps) ระดับซอฟต์แวร์ นักเรียนจะเรียนรู้การจัดการการประมวลผลแบบขนาน จัดการข้อผิดพลาดของระบบ และเขียนโค้ดที่ทนทานและปลอดภัยต่อสัญญาณ

ผลลัพธ์การเรียนรู้:

  • แยกแยะประเภทสี่ประเภทของข้อผิดพลาดระดับฮาร์ดแวร์ (การรบกวน, ทรัพป์, ความผิดพลาด, การยกเลิก) และกลไกการจัดการ
  • จัดการวงจรชีวิตของกระบวนการโดยใช้คำสั่งระบบสำหรับการสร้าง (fork), การเก็บเกี่ยว (waitpid), และการเรียกใช้ (execve)
  • ออกแบบแฮนเดอร์สัญญาณที่ปลอดภัย โดยคำนึงถึงการประมวลผลแบบขนาน ความไม่รองรับการคั่นสัญญาณ และความปลอดภัยต่อสัญญาณที่ไม่สามารถคั่นได้ (async-signal-safety)

🔹 บทเรียนที่ 9: หน่วยความจำเสมือน

ภาพรวม: บทเรียนนี้สำรวจหน่วยความจำเสมือน (Virtual Memory - VM) ซึ่งเป็นแนวคิดพื้นฐานที่มอบพื้นที่ที่ใหญ่ ต่อเนื่อง และเป็นส่วนตัวให้กับแต่ละกระบวนการ บทเรียนครอบคลุมบทบาทหลักสามประการ: เป็นเครื่องมือในการจัดเก็บข้อมูลชั่วคราวในหน่วยความจำ DRAM กลไกการจัดการและป้องกันหน่วยความจำ และพื้นฐานสำหรับการจัดแมปหน่วยความจำ นอกจากนี้ บทเรียนยังเจาะลึกกลไกการแปลที่อยู่ (TLB), การจัดสรรหน่วยความจำแบบไดนามิก (การจัดการฮีพ), และหลักการของขยะอัตโนมัติ (garbage collection) สุดท้าย บทเรียนจะนำเสนอข้อผิดพลาดที่สำคัญที่เกิดขึ้นบ่อยในโปรแกรมภาษา C ที่เกี่ยวข้องกับหน่วยความจำ

ผลลัพธ์การเรียนรู้:

  • แยกแยะการกำหนดที่อยู่แบบกายภาพกับแบบเสมือน และอธิบายบทบาทของหน่วยจัดการหน่วยความจำ (Memory Management Unit - MMU)
  • แปลงที่อยู่แบบเสมือนเป็นที่อยู่แบบกายภาพโดยใช้ตารางหน้า (Page Tables) และบัฟเฟอร์แปลที่อยู่ (Translation Lookaside Buffer - TLB)
  • วิเคราะห์และนำไปใช้กลยุทธ์การจัดสรรหน่วยความจำแบบไดนามิก รวมถึงรายการแบบไม่ชัดเจน/ชัดเจน และการรวม (coalescing)

🔹 บทเรียนที่ 10: การนำส่งข้อมูลระดับระบบ

ภาพรวม: บทเรียนนี้สำรวจอินเทอร์เฟซพื้นฐานระหว่างระบบปฏิบัติการลินุกซ์กับโปรแกรมแอปพลิเคชันสำหรับการดำเนินการอินพุตและเอาต์พุต ครอบคลุมคำสั่งระบบพื้นฐานของยูนิกซ์ ประเภทต่าง ๆ ของไฟล์ที่พบในระบบไฟล์ลินุกซ์ และโครงสร้างข้อมูลระดับเคอร์เนลที่ใช้จัดการไฟล์ บทเรียนยังแนะนำแพ็กเกจการนำส่งข้อมูลที่แข็งแรง (RIO) เพื่อจัดการกับ "จำนวนข้อมูลน้อยเกินไป" (short counts) และให้แนวทางในการเลือกระหว่างการนำส่งข้อมูลแบบมาตรฐาน (Standard I/O) และการนำส่งข้อมูลระดับระบบ (System-Level I/O) ในบริบทการเขียนโปรแกรมต่าง ๆ เช่น การเขียนโปรแกรมเครือข่าย

ผลลัพธ์การเรียนรู้:

  • ดำเนินการ การดำเนินการไฟล์พื้นฐานโดยใช้อินเทอร์เฟซยูนิกซ์ (open, close, read, write)
  • แยกแยะ ไฟล์ปกติ ไดเรกทอรี และลิงก์ โดยสอบถามข้อมูลเมตาของไฟล์โดยใช้ stat
  • ใช้งาน แพ็กเกจ RIO เพื่อดำเนินการอินพุต/เอาต์พุตแบบแข็งแรง แบบบัฟเฟอร์ และแบบไม่บัฟเฟอร์

🔹 บทเรียนที่ 11: การเขียนโปรแกรมเครือข่าย

ภาพรวม: บทเรียนนี้สำรวจสถาปัตยกรรมพื้นฐานของแอปพลิเคชันที่ใช้เครือข่าย โดยเน้นโมเดลโปรแกรมแบบลูกค้า-เซิร์ฟเวอร์ และอินเทอร์เน็ตโลก (Global IP Internet) นักเรียนจะเรียนรู้การใช้งานอินเทอร์เฟซโซเก็ต (Sockets) ซึ่งเป็น API หลักสำหรับการสื่อสารระดับระบบ และก้าวไปสู่การสร้างเซิร์ฟเวอร์เว็บที่ใช้งานได้จริง (TINY) ที่สามารถส่งไฟล์คงที่และเนื้อหาแบบไดนามิกผ่านทาง CGI (Common Gateway Interface)

ผลลัพธ์การเรียนรู้:

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

🔹 บทเรียนที่ 12: การเขียนโปรแกรมแบบขนาน

ภาพรวม: บทเรียนนี้สำรวจโมเดลพื้นฐานของการประมวลผลแบบขนาน: กระบวนการ (process), การนำส่งแบบหลายเธรด (I/O multiplexing), และเธรด (threads) บทเรียนนี้เจาะลึกการซิงโครไนซ์โดยใช้เซมิโฟร์ (semaphores) เพื่อแก้ไขปัญหาการแข่งขัน (race conditions) รูปแบบสถาปัตยกรรมที่พบบ่อย เช่น แบบผู้ผลิต-ผู้บริโภค และเซิร์ฟเวอร์แบบพร้อมใช้ (prethreaded servers) และมาตรวัดที่ใช้ประเมินประสิทธิภาพแบบขนาน บทเรียนสุดท้ายกล่าวถึงปัญหาความน่าเชื่อถือที่สำคัญ เช่น การปลอดภัยของเธรด การทำงานซ้ำได้ (reentrancy) และการป้องกันการติดขัด (deadlock)

ผลลัพธ์การเรียนรู้:

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