คุณอาจเคยได้ยินว่าแอปพลิเคชันทำงานในโหมด "Kernel" หรือ "User" ทั้งหมดขึ้นอยู่กับวิธีการทำงานของระบบปฏิบัติการ (Operating System) เมื่อเข้าใจเรื่องนี้แล้ว การแยกแยะ User Mode และ Kernel Mode จะง่ายขึ้น
ทำความเข้าใจว่าระบบปฏิบัติการทำอะไร
คอมพิวเตอร์ประกอบด้วย Hardware (อุปกรณ์อิเล็กทรอนิกส์) และ Software (โค้ดคอมพิวเตอร์ที่ฮาร์ดแวร์ประมวลผล) แต่สิ่งที่อาจไม่ชัดเจนคือพวกมันทำงานร่วมกันอย่างไร
องค์ประกอบสำคัญที่สุดของคอมพิวเตอร์คือ Bit หรือ "Binary Digit" ทุกอย่างที่คอมพิวเตอร์ทำ ถูกแทนด้วย 0 และ 1 อุปกรณ์ต่างๆ แทน Bit แบบต่างกัน ใน CPU ทรานซิสเตอร์ขนาดจุลมיקרอ แทน 0 และ 1 ด้วยสถานะ On/Off ทรานซิสเตอร์เหล่านี้จัดเรียงเป็นโครงสร้างตรรกะ เรียกว่า Logic Gates
ในหน่วยความจำอิเล็กทรอนิกส์ Bit แทนด้วย Memory Cell ที่มีประจุสูงหรือต่ำกว่าเกณฑ์ บน Hard Disk แบบกลไก Bit แทนด้วยการเปลี่ยนแปลงแม่เหล็กบนแผ่นหมุน บน Optical Discs ร่อง (pits) และพื้นราบ (lands) ที่สะท้อนหรือไม่สะท้อนแสงเลเซอร์ ทำหน้าที่เดียวกัน
ไม่ว่าจะแทน Binary Code ทางกายภาพอย่างไร สุดท้ายคอมโพเนนท์ทุกตัวของคอมพิวเตอร์ผู้บริโภค สามารถลดรูปลงสู่ Machine Code ระดับต่ำสุดได้
แต่จะไปจาก Interface ที่มนุษย์ใช้งานง่าย ไปสู่ Low-level processes ในคอมพิวเตอร์ได้อย่างไร? นี่คือที่ที่ Operating System เข้ามา OS ควบคุม Hardware ของคอมพิวเตอร์โดยตรง แปลงทุกอย่างที่ Applications (และ User) ต้องการ ให้กลายเป็น Machine Code Instructions ที่ CPU และคอมโพเนนท์อื่นๆ เข้าใจ สิ่งสำคัญที่สุดในกระบวนการนี้คือ Kernel
Kernel คืออะไร
Kernel ตามชื่อ คือแก่นกลางของ Operating System เป็นซอฟต์แวร์ที่อยู่ใน RAM และควบคุมทุกอย่างที่คอมพิวเตอร์ทำ เมื่อมีการเขียนข้อมูลลงหน่วยความจำ Kernel คือตัวกำหนดการ Execute
Kernel รู้จักวิธี Interface กับฮาร์ดแวร์อย่าง GPU และ Network Card แต่อาจไม่รู้จักวิธีใช้งานให้เกิดศักยภาพเต็มที่ ต้องพึ่งมาตรฐานทั่วไปในอุตสาหกรรมคอมพิวเตอร์
Hardware Drivers เข้ามามีบทบาทที่นี่ Drivers บอก OS ว่าทำงานกับคอมโพเนนท์เฉพาะอย่างไร จึงต้องมี Driver ต่างกันสำหรับ Nvidia และ AMD GPU
เมื่อมี Drivers ที่ถูกต้อง Kernel คืออำนาจสูงสุดภายในคอมพิวเตอร์ รวมถึงทำสิ่งที่อาจทำลายข้อมูลอย่างร้ายแรง
บทบาทของ Application Programming Interfaces (APIs)
ในยุค MS-DOS นักพัฒนาซอฟต์แวร์ต้องเขียนโปรแกรมเฉพาะสำหรับฮาร์ดแวร์ของผู้ใช้ ตัวอย่างโชคชะตาคือ Sound Card Drivers บน MS-DOS
เกมวิดีโอตัวหนึ่งต้องรองรับการ์ดยอดนิยม (Sound Blaster, Ad-lib, Gravis Ultrasound ฯลฯ) และหวังว่าผู้เล่นส่วนใหญ่จะได้รับการรองรับ วันนี้สิ่งต่างๆ ทำงานต่างออกไป เพราะ APIs
Microsoft DirectX เป็นตัวอย่างดี หากต้องการคำอธิบายลึก อ่าน "What Is DirectX and Why Is It Important?" แต่สำคัญคือ API ให้วิธีมาตรฐานสำหรับนักพัฒนาขอทรัพยากรฮาร์ดแวร์จากคอมโพเนนท์อย่าง GPU นอกจากนี้ ผู้ผลิตฮาร์ดแวร์ต้องเพียงรับรองว่าผลิตภัณฑ์เป็นไปตาม DirectX เพื่อความเข้ากันได้เต็มที่กับซอฟต์แวร์ที่เป็นไปตาม DirectX เช่นกัน
APIs ให้ชั้นแปลง (Translation Layer) ระหว่าง Software Applications และ Low-level Kernel พร้อม Hardware Drivers ใช่ มี Performance Penalty เล็กน้อย แต่บนคอมพิวเตอร์สมัยใหม่ น้อยมาก และมาพร้อมข้อดีหลายอย่าง ซึ่งนำพาเราไปสู่ User Mode และ Kernel Mode
User Mode vs Kernel Mode
OS สมัยใหม่รัน "Processes" หลายร้อยหรือหลายพันพร้อมกัน แบ่งเวลา CPU ให้แบบไดนามิก ตาม Priority และความต้องการพลังคำนวณ
เมื่อคุณเปิดแอปพลิเคชัน มันสร้าง Processes และ CPU สามารถ Execute ได้ใน User Mode หรือ Kernel Mode
Windows Process ที่รันใน User Mode มีเพียงการเข้าถึง Private Virtual Memory Address Space และ Handle Table ของตัวเอง ซอฟต์แวร์ใช้ตารางเหล่านี้เก็บข้อมูลใน RAM และขอทรัพยากร ไม่มีการเข้าถึง Memory หรือ Hardware โดยตรง OS เป็นผู้ Map Virtual Spaces ไปยัง Hardware จริงของคอมพิวเตอร์
สิ่งนี้ดีหลายประการ แต่ประโยชน์สำคัญที่สุดคือ Application ไม่สามารถเขียนทับหรือเปลี่ยนแปลงข้อมูลนอก Virtual Memory Address Space ของมันได้ นอกจากนี้ ฟังก์ชันบางอย่างถูกห้ามสำหรับ User-mode processes โดยเฉพาะฟังก์ชันที่อาจ Crash ระบบหรือทำลายข้อมูล
เมื่อ Process เริ่มต้นหรือถูกยกระดับ (Elevated) เป็น Kernel Mode มันจะมี Full Access ไปยัง System Resources แม้แต่ Resources ที่สงวนไว้สำหรับ OS ดังนั้นในทฤษฎี มันอาจเขียนทับข้อมูลสำคัญที่ OS ต้องการเพื่อทำงานได้
Traps และ Exceptions
สำคัญคือโหมดทั้งสองถูก Enforce (บังคับใช้) ที่ระดับ Hardware โดย CPU เอง หาก Application ที่รันใน User Mode พยายามทำสิ่งที่ต้องการ Kernel-mode Access มันจะ Generate "Trap" หรือ "Exception" OS จะจัดการกับ Application โดยปกติจะปิดมันลงและสร้าง Crash Log ให้นักพัฒนาเห็นว่าเกิดอะไรขึ้นใน Memory เมื่อสิ่งผิดปกติเกิดขึ้น
อันตรายของ Kernel Mode: Blue Screen of Death (BSOD)
หากเคยเจอ Blue Screen of Death (ใครไม่เคย?) ที่บังคับให้คอมพิวเตอร์ปิดหรือรีสตาร์ท โอกาสมากที่มันมาจาก Kernel-mode Process
เมื่อ Process ใน Kernel Mode ทำสิ่งที่ไม่ควรทำ OS ไม่สามารถ Recover ได้ และคอมพิวเตอร์ทั้งเครื่องหยุดทำงาน เมื่อ User-mode Process ผิดปกติ แค่ Application Crash เพียงอย่างเดียว ส่วน Software อื่นและ OS ยังทำงานต่อได้ปกติ
นี่คือพื้นที่ที่ APIs มีบทบาทสำคัญ เพราะมันคือ API ที่ขอ Kernel-mode Privileges User-mode Applications ในทางปฏิบัติ Delegate คำขอที่ต้องการ Kernel-mode Privileges ให้ API
นี่คือเหตุผลที่ Kernel-mode มักให้เฉพาะ Low-level System Processes ที่ต้องเข้าถึง Hardware โดยตรง ปกติสิทธิ์นี้จะให้กับ Process เพราะมันต้องการ Performance มากกว่าที่ User Mode ให้ บาง CPU Instructions ทำงานได้เฉพาะใน Kernel Mode ดังนั้นหาก Process ต้องใช้ฟังก์ชันเหล่านั้น ต้องถูก Elevate
หากคุณมีปัญหา Blue Screen of Death อ่านคู่มือ Troubleshooting BSOD สำหรับ Windows 10 ของเรา!