ระบบปฏิบัติการ
สิ่งที่ kernel ทำอยู่จริงใต้ทุกโปรแกรมที่คุณรัน
สำหรับผู้เรียนที่ใช้ Linux shell และอ่าน C ได้ Lab บังคับใช้ Linux/WSL เพราะต้องใช้ /proc, strace, taskset, dmesg และ lscpu ผู้เรียนบน macOS ต้องใช้ Linux VM/container สำหรับขั้นตอนเดียวกัน บน Debian/Ubuntu ติดตั้งเครื่องมือเสริมด้วย sudo apt install build-essential make gdb strace util-linux acl libcap2-bin ส่วนคอร์สตั้งต้นให้พร้อมครอบคลุม toolchain ฐาน
ตัวอย่างโครงสร้างคอร์ส
เมื่อจบคอร์ส คุณจะทำอะไรได้บ้าง
- อธิบายได้ว่า system call มีราคาเท่าไร และตามรอยมันจากโค้ดของคุณลงไปใน kernel แล้วกลับขึ้นมาได้
- เริ่ม รอ และเก็บกวาดโปรเซสได้ถูกต้อง รวมถึงรูปแบบความผิดพลาดที่ทำให้โปรเซสค้างสะสม
- เขียนโค้ดหลาย thread ที่แชร์ข้อมูลกันได้อย่างปลอดภัย และมองออกว่าตรงไหนเป็น race condition ก่อนของจะขึ้น production
- วินิจฉัย deadlock จากเงื่อนไขสี่ข้อของมัน แทนการเดา
- อ่านแผนที่หน่วยความจำของโปรเซสได้ และอธิบาย page fault, copy-on-write และการ map ไฟล์เข้าหน่วยความจำได้
- ตัดสินได้ว่าโปรแกรมที่มีสิทธิ์พิเศษปลอดภัยหรือไม่ และทำไมช่องโหว่ระดับเครื่องจำนวนมากถึงอยู่ที่ setuid
ก่อนเริ่มเรียน
แผนการเรียน
ภาษาไทยพร้อมสำหรับทุกขั้นการเรียน.
นี่คือเส้นทางการเรียนทั้งหมด แต่ละบทต่อยอดจากบทก่อนหน้า และด่านบังคับคือจุดที่คุณได้แสดงสิ่งที่ทำได้จริง.
- 01
สองโลก: kernel mode กับ user mode
บทเรียน · 16 นาที
- 02
โปรแกรมขอให้ kernel ทำอะไรให้ได้อย่างไร
บทเรียน · 18 นาที
ต่อยอดจาก: สองโลก: kernel mode กับ user mode
- 03
ตามรอย system call หนึ่งตัวลงไปให้สุด
ด่านบังคับ · 20 นาที
ต่อยอดจาก: โปรแกรมขอให้ kernel ทำอะไรให้ได้อย่างไร
- 04
โปรแกรมหนึ่งเริ่มอีกโปรแกรมหนึ่งได้อย่างไร
บทเรียน · 20 นาที
ต่อยอดจาก: ตามรอย system call หนึ่งตัวลงไปให้สุด
- 05
zombie, orphan และใครเป็นคนเก็บกวาด
บทเรียน · 16 นาที
ต่อยอดจาก: โปรแกรมหนึ่งเริ่มอีกโปรแกรมหนึ่งได้อย่างไร · signal: ระบบปฏิบัติการขัดจังหวะคุณ
- 06
signal: ระบบปฏิบัติการขัดจังหวะคุณ
บทเรียน · 18 นาที
ต่อยอดจาก: โปรแกรมหนึ่งเริ่มอีกโปรแกรมหนึ่งได้อย่างไร
- 07
signal handler ทำอะไรได้บ้าง
บทเรียน · 17 นาที
ต่อยอดจาก: signal: ระบบปฏิบัติการขัดจังหวะคุณ
- 08
thread กับ process: อะไรที่แชร์กันจริง
บทเรียน · 16 นาที
ต่อยอดจาก: โปรแกรมหนึ่งเริ่มอีกโปรแกรมหนึ่งได้อย่างไร
- 09
เขียนโปรแกรมที่มีหลาย thread
บทเรียน · 18 นาที
ต่อยอดจาก: thread กับ process: อะไรที่แชร์กันจริง
- 10
race condition: เมื่อจังหวะเวลาเป็นตัวตัดสินคำตอบ
บทเรียน · 19 นาที
ต่อยอดจาก: เขียนโปรแกรมที่มีหลาย thread
- 11
การกันไม่ให้เข้าพร้อมกัน และราคาที่ต้องจ่าย
บทเรียน · 18 นาที
ต่อยอดจาก: race condition: เมื่อจังหวะเวลาเป็นตัวตัดสินคำตอบ
- 12
รอให้ถูกวิธี: semaphore และ condition variable
บทเรียน · 19 นาที
ต่อยอดจาก: การกันไม่ให้เข้าพร้อมกัน และราคาที่ต้องจ่าย
- 13
สร้างคิว producer-consumer ที่ข้อมูลไม่พัง
ด่านบังคับ · 22 นาที
ต่อยอดจาก: รอให้ถูกวิธี: semaphore และ condition variable
- 14
deadlock: เงื่อนไขสี่ข้อ และการหักข้อใดข้อหนึ่ง
บทเรียน · 18 นาที
ต่อยอดจาก: การกันไม่ให้เข้าพร้อมกัน และราคาที่ต้องจ่าย · รอให้ถูกวิธี: semaphore และ condition variable
- 15
ตัวจัดคิวตัดสินอย่างไรว่าใครได้รันต่อ
บทเรียน · 18 นาที
ต่อยอดจาก: thread กับ process: อะไรที่แชร์กันจริง
- 16
สิ่งที่โปรเซสมองเห็น: virtual address space
บทเรียน · 18 นาที
ต่อยอดจาก: โปรแกรมหนึ่งเริ่มอีกโปรแกรมหนึ่งได้อย่างไร
- 17
จาก virtual ไป physical: page table และ TLB
บทเรียน · 19 นาที
ต่อยอดจาก: สิ่งที่โปรเซสมองเห็น: virtual address space
- 18
การโหลดหน้าเมื่อต้องใช้ และ page fault คืออะไรกันแน่
บทเรียน · 18 นาที
ต่อยอดจาก: จาก virtual ไป physical: page table และ TLB
- 19
copy-on-write และการ map ไฟล์เข้าหน่วยความจำ
ด่านบังคับ · 21 นาที
ต่อยอดจาก: การโหลดหน้าเมื่อต้องใช้ และ page fault คืออะไรกันแน่
- 20
ระดับสิทธิ์ที่ฮาร์ดแวร์บังคับเอง
บทเรียน · 15 นาที
ต่อยอดจาก: สองโลก: kernel mode กับ user mode
- 21
สองวิธีตอบคำถามว่า 'อันนี้ทำได้ไหม'
บทเรียน · 17 นาที
ต่อยอดจาก: ระดับสิทธิ์ที่ฮาร์ดแวร์บังคับเอง
- 22
setuid: บิตที่อันตรายที่สุดบนระบบไฟล์
ด่านบังคับ · 20 นาที
ต่อยอดจาก: สองวิธีตอบคำถามว่า 'อันนี้ทำได้ไหม'
เริ่มเรียนด้วยบัญชี CYBERSKILLS เมื่อเปิดให้ใช้งาน
บัญชี CYBERSKILLS จะเก็บความก้าวหน้าและผลจากด่านบังคับไว้ด้วยกัน ระหว่างนี้ คุณใช้แผนการเรียนนี้เลือกเส้นทางที่ตรงกับเป้าหมายได้.
ดูตัวอย่างคอร์สทั้งหมด