เคอร์เนล (Kernel) คือโปรแกรมพื้นฐานภายใต้ระบบปฏิบัติการคอมพิวเตอร์ (OS) ที่คอยทำหน้าที่เป็นสื่อกลางระหว่างฮาร์ดแวร์ กับ ซอฟต์แวร์และช่วยจัดการทรัพยากรในคอมพิวเตอร์ต่าง ๆ เช่น การใช้พื้นที่ หน่วยความจำ (RAM) , การใช้ หน่วยประมวลผลกลาง (CPU) การจัดการไฟล์ และ ระบบอื่น ๆ ส่วนใหญ่ เป็นต้น (เว้นแต่ GPU อยู่นอกเหนือหน้าที่ของเคอร์เนล) นอกจากนี้ยังมีหน้าที่เป็นตัวควบคุมอุปกรณ์ Input / Output และอุปกรณ์ต่อพ่วงอื่น ๆ อย่าง เมาส์ (Mouse), จอมอนิเตอร์ (Monitor), แป้นพิมพ์ (Keyboard) ฯลฯ ที่เชื่อมต่อระบบผ่านไดร์เวอร์ อีกด้วย
ก่อนจะว่า Kernel ทำงานอย่างไร ? เราต้องเข้าใจก่อนว่าระบบปฏิบัติการต่าง ๆ เกือบทุกชนิดมีการทำงานอยู่ 2 ส่วน คือโหมดผู้ใช้งาน (User Mode) และโหมดเคอร์เนล (Kernel Mode) บางคนก็จะเรียกว่าพื้นที่ผู้ใช้งานและพื้นที่เคอร์เนล (User / Kernel Space) เพราะว่าทั้งสองส่วนนี้มีข้อแตกต่างคือมันจัดเก็บรหัสคำสั่งไว้ในหน่วยความจำ หรือ แรมคนละภาคส่วน ไม่ปะปนกัน
และถ้าพูดถึงการทำงาน อันที่จริงต้องบอกว่าตั้งแต่ที่เราเริ่มเปิดเครื่องคอมพิวเตอร์และบูทเครื่อง ระบบเคอร์เนล (Kernel) จะเป็นส่วนแรกจากระบบปฏิบัติการที่เริ่มทำงานก่อนเลย มันจะวิ่งเข้าไปจับจองพื้นที่ในแรม จากนั้นเมื่อเราเข้าสู่ระบบปฏิบัติการหรือบูทเครื่องสำเร็จแล้ว มันก็จะเปลี่ยนเป็นโหมดผู้ใช้ (User Mode) และรันโปรแกรมของระบบปฏิบัติการ หรือ แอปพลิเคชันอื่น ๆ บนพื้นที่ของผู้ใช้
ในขณะที่การดึงทรัพยากรพื้นฐานในเครื่องมาระหว่างนั้น ก็เป็นหน้าที่ของโหมดเคอร์เนลที่ติดต่อสื่อสารกับฮาร์ดแวร์ให้เรา ซึ่งเจ้า โหมดผู้ใช้ (User Mode) และ โหมดเคอร์เนล (Kernel Mode) นี้ก็จะมีการติดต่อกันด้วย API ที่เรียกว่า System Call ตามที่เราเห็นในภาพ
การสื่อสารระหว่าง User Space และ Kernel Space และ ฮาร์ดแวร์
(ภาพจาก https://www.lakesidesoftware.com/blog/a-kernel-of-truth-security-starts-with-better-software)
สำหรับหน้าที่หลัก ๆ ของ เคอร์เนล (Kernel) ที่พบได้ทั่วไป แม้เราจะเกริ่นมาบ้างแล้วแต่ก็จะมาสรุปให้ดังต่อไปนี้
หน้าที่หลักของเคอร์เนลคือสะพานเชื่อมต่อให้ผู้ใช้งานสามารถเข้าถึงประสิทธิภาพของอุปกรณ์คอมพิวเตอร์ หรือฮาร์ดแวร์ เช่น หน่วยประมวลผลกลาง (CPU), หน่วยความจำหลัก RAM หรือ การเชื่อมต่ออุปกรณ์ Input / Output และอุปกรณ์ต่อพ่วงต่าง ๆ เช่น เมาส์, แป้นพิมพ์, จอมอนิเตอร์, เครื่องพิมพ์, และอุปกรณ์อื่น ๆ ที่เชื่อมต่อผ่านพอร์ต USB
พูดง่าย ๆ ก็คือควบคุมกระบวนการสื่อสารระหว่างโปรแกรม และ CPU รับผิดชอบในการกำหนดทิศทางเชื่อมต่อระหว่าง โปรเซส (Process) หรือ เธรด (Threads) ที่กำลังรันโค้ดทำงานอยู่ภายในคอมพิวเตอร์ หรือเรียกว่า Inter-Process Communication (IPC)
พื้นที่หน่วยความจำ หรือ แรม (RAM) เป็นส่วนสำคัญที่ใช้เก็บคำสั่งโปรแกรมและข้อมูลการทำงานบนคอมพิวเตอร์ Kernel จึงมีหน้าที่ในการจัดการพื้นที่ใช้งานแรมอย่างเหมาะสม ช่วยตัดสินใจว่าหน่วยความจำเท่าไหร่ที่คำสั่งไหนสามารถใช้ได้ และ แก้ปัญหาเมื่อมีพื้นที่หน่วยความจำไม่เพียงพอ เป็นต้น
เมื่อพูดถึงระบบปฏิบัติการแล้ว ถือว่ามีหลายตัวที่เรารู้จัก เช่น Windows, MacOS, Android, Linux, iOS หรืออื่น ๆ ดังนั้น เคอร์เนล (Kernel) เอง ก็มีหลายประเภทเช่นกัน และต่อไปเรามาพูดถึงประเภทของ Kernel ที่พบในปัจจุบัน ซึ่งมีอยู่ 5 ประเภท ดังนี้
ภาพจาก https://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg
Monolithic Kernels เป็นรูปแบบที่เรียกว่า การรันระบบทั้งหมดยกหน้าที่ให้กับ Kernel Mode (จะไม่มีการแบ่งแยกระหว่าง User Space และ Kernel Space ในประเภทนี้) ผลคือทำให้ประมวลผลรวดเร็ว ไม่มีช่องว่างในการทำงาน รวมถึงการสื่อสารกับฮาร์ดแวร์ก็ทำได้รวดเร็ว พบได้ใน ระบบปฏิบัติการ Linux หรือ Linux Kernel รวมถึง Android OS
แต่การออกแบบนี้มีข้อเสีย คือถ้าเกิดมีการล่มหรือเสียหายที่ส่วนใด คือพังทั้งระบบ และยังยากที่จะเพิ่มหรือติดตั้งไดร์เวอร์ รวมถึงเพิ่มความสามารถใหม่ ๆ ให้กับระบบปฏิบัติการ
สำหรับ Microkernel เป็นรูปแบบของเคอร์เนลที่แตกต่างกับ Monolithic Kernels เพราะจะมีการแบ่งพื้นที่ใช้งานและเก็บข้อมูลในหน่วยความจำไว้เป็น User Space กับ Kernel Space ทำให้ช่วยลดขนาดของพื้นที่ Kernel ในหน่วยความจำ และหากมี ระบบบางส่วนเสียหายภายในพื้นที่ของ User Space ก็ไม่มีผลกระทบกับระบบเคอร์เนล สามารถติดตั้งบริการใหม่ของ ๆ ระบบปฏิบัติการได้ง่าย รวมถึงไดร์เวอร์ต่าง ๆ พบได้ใน Mach Kernel ในระบบปฏิบัติการ Mac OS X เป็นต้น
แต่ข้อเสียคือเนื่องจากพอแบ่งส่วนกันไว้คนละพื้นที่แล้ว ก็ทำให้การสื่อสารกันต้องใช้เวลามากขึ้น ความเร็วในการดำเนินการแต่ละโปรเซสก็เลยลดลง
ภาพจาก https://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg
Hybrid Kernel เป็นการผสมผสานระหว่างข้อดีด้านความเร็วของ Monolithic Kernel และรูปแบบโครงสร้างของ Microkernel ที่ทำให้มีเสถียรภาพกว่ามาใช้ออกแบบ เช่น
โดย Hybrid Kernel จะมีการรันโค้ดที่ไม่จำเป็นบางส่วนในพื้นที่เคอร์เนล เพื่อให้โค้ดนั้นทำงานเร็วกว่าที่อยู่ในพื้นที่ของผู้ใช้ เช่นพวก Network Stack, File System, Application IPC และ Device Driver ในขณะที่เซิร์ฟเวอร์ต่าง ๆ ก็ยังคงทำงานอยู่ภายในพื้นที่ของผู้ใช้
https://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg
Nanokernel อาจไม่ได้อยู่ในหมวดของประเภทหลัก แต่ใช้จัดกลุ่มประเภทของเคอร์เนล ที่โค้ดมีขนาดเล็กมาก ๆ เพื่อให้พื้นที่เคอร์เนลมีขนาดเล็กยิ่งกว่า Microkernel บนหน่วยความจำ
Exokernel เป็นรูปแบบที่พัฒนาโดย MIT Parallel และกลุ่มของ Distributed Operating Systems เบื้องต้นยังพัฒนาไม่เสร็จ เพราะค่อนข้างมีความซับซ้อน แต่ประโยชน์ของมันคือเน้นออกแบบให้ช่วยเพิ่มประสิทธิภาพในการควบคุมแอปพลิเคชัน และสามารถดึงทรัพยากรจากฮาร์ดแวร์มาใช้ได้มีประสิทธิภาพยิ่งขึ้น ซึ่งจะช่วยเสริมความสามารถของระบบปฏิบัติการได้นั่นเอง
|
งานเขียนคืออาหาร ปลายปากกา ก็คือปลายตะหลิว |
ความคิดเห็นที่ 1
12 พฤศจิกายน 2566 22:54:54
|
||
GUEST |
อรรถพล จำปา
มีความรู้ จุดประกายความคิด มาก ๆๆครับมาดูครับ |
|