ใจกลาง

[thumb|แผนภาพโดยสังเขปแสดงการที่ใจกลางเชื่อมต่อ[โปรแกรมประยุกต์กับฮาร์ดแวร์ของคอมพิวเตอร์]]

**ใจกลาง** หรือ **เคอร์เนล** () เป็นโปรแกรมคอมพิวเตอร์ที่เป็นแกนกลางของระบบปฏิบัติการของคอมพิวเตอร์ โดยทั่วไปแล้ว ใจกลางจะสามารถควบคุมทุกอย่างในระบบได้อย่างสมบูรณ์ ใจกลางยังรับผิดชอบในการป้องกันและบรรเทาข้อขัดแย้งระหว่างกระบวนการต่าง ๆ อีกด้วย ใจกลางเป็นส่วนระบบปฏิบัติการที่จะคงอยู่ในหน่วยความจำเสมอ และอำนวยความสะดวกในการโต้ตอบระหว่างส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ ใจกลางแบบเต็มจะควบคุมทรัพยากรฮาร์ดแวร์ทั้งหมด (เช่น อินพุต/เอาต์พุต หน่วยความจำ การเข้ารหัส) ผ่านโปรแกรมขับอุปกรณ์ ไกล่เกลี่ยข้อขัดแย้งระหว่างกระบวนการที่เกี่ยวข้องกับทรัพยากรดังกล่าว และปรับการใช้ทรัพยากรทั่วไปให้เหมาะสม เช่น การใช้หน่วยประมวลผลกลางกับแคช ระบบไฟล์ และซ็อกเก็ตเครือข่าย ในระบบส่วนใหญ่ ใจกลางเป็นหนึ่งในโปรแกรมแรก ๆ ที่โหลดเมื่อ เริ่มต้นระบบ (หลังจาก บูตโหลดเดอร์) โดยจะจัดการส่วนที่เหลือของการเริ่มต้นระบบ เช่นเดียวกับหน่วยความจำ อุปกรณ์ต่อพ่วง และคำขอ อินพุต/เอาท์พุต จากซอฟต์แวร์ โดยแปลเป็นคำสั่งในการประมวลผล ข้อมูลสำหรับ หน่วยประมวลผลกลาง

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

ใจกลางนี้มีหน้าที่รับผิดชอบในการรันโปรแกรม ใจกลางทำหน้าที่ตัดสินใจว่าควรมอบหมายโปรแกรมที่กำลังทำงานอยู่ให้กับโปรเซสเซอร์ตัวใด

## หน่วยความจำเข้าถึงโดยสุ่ม
หน่วยความจำเข้าถึงโดยสุ่ม (RAM) ใช้เพื่อจัดเก็บทั้งคำสั่งโปรแกรมและข้อมูล โดยทั่วไปแล้ว ทั้งสองจะต้องมีอยู่ในหน่วยความจำเพื่อให้โปรแกรมดำเนินการได้ บ่อยครั้งที่หลายโปรแกรมต้องการเข้าถึงหน่วยความจำ โดยมักต้องการหน่วยความจำมากกว่าที่คอมพิวเตอร์มีอยู่ ใจกลางมีหน้าที่ในการตัดสินใจเลือกหน่วยความจำที่แต่ละกระบวนการสามารถใช้ได้ และกำหนดสิ่งที่ต้องทำเมื่อมีหน่วยความจำไม่เพียงพอ

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

## แนวทางการออกแบบใจกลาง
thumb|317x317px|แผนผังของใจกลางแบบโมโนลิทิก

### ใจกลางแบบโมโนลิทิก (Monolithic kernel)

ในใจกลางแบบโมโนลิทิก บริการระบบปฏิบัติการทั้งหมดทำงานพร้อมกับเคอร์เนลเธรดหลัก ดังนั้นจึงอยู่ในพื้นที่หน่วยความจำเดียวกันด้วย แนวทางนี้ให้การเข้าถึงฮาร์ดแวร์ที่สมบูรณ์และมีประสิทธิภาพ ผู้พัฒนายูนิกซ์ เคน ทอมป์สัน ระบุว่า "ในความเห็น [ของเขา] ใจกลางแบบโมโนลิทิกนั้นนำไปใช้ได้ง่ายกว่า" ข้อเสียเปรียบหลักของใจกลางแบบโมโนลิทิกคือการพึ่งพาระหว่างส่วนประกอบของระบบจุดบกพร่องในโปรแกรมขับอุปกรณ์อาจทำให้ระบบเสียหายทั้งหมดและความจริงที่ว่าใจกลางแบบโมโนลิทิกนั้นยากต่อการดูแลรักษา ทอมป์สันยังระบุด้วยว่า "[ใจกลางแบบโมโนลิทิก]เนี่ย ถ้าไม่ระมัดระวังก็มีสิทธิจะเละตุ้มเป๊ะ"

ใจกลางแบบโมโนลิทิกสมัยใหม่ เช่นใจกลางลินุกซ์, ใจกลางฟรีบีเอสดี, ใจกลางไอบีเอ็ม AIX, ใจกลาง HP-UX และใจกลาง Solaris ซึ่งทั้งหมดนี้จัดอยู่ในหมวดหมู่ของระบบปฏิบัติการเหมือนยูนิกซ์ รองรับ โมดูลใจกลางที่โหลดได้ ทำให้โมดูลต่าง ๆ เพื่อโหลดลงในใจกลางขณะรันไทม์ ทำให้สามารถขยายขีดความสามารถของใจกลางได้ง่ายตามต้องการ ขณะเดียวกันก็ช่วยลดปริมาณรหัสที่ทำงานในพื้นที่ใจกลางให้เหลือน้อยที่สุด

### ไมโครเคอร์เนล (Microkernel)
thumb|289px|right|รูปภาพแสดงหลักการทำงานของไมโครเคอร์เนล

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

ตัวอย่างของไมโครเคอร์เนล และ ระบบปฏิบัติการที่มีพื้นบน ไมโครเคอร์เนล:
* AIX
* AmigaOS
* Amoeba
* Chorus microkernel
* EROS
* Haiku
* K42
* LSE/OS
* KeyKOS
* The L4 microkernel family
* Mach, used in GNU Hurd, NEXTSTEP, OPENSTEP, and Mac OS X
* MERT
* Minix
* MorphOS
* NewOS
* QNX
* Phoenix-RTOS
* RadiOS
* Spring operating system
* VSTa
* Symbian OS

### เคอร์เนลแบบผสม (Hybrid kernel)

เคอร์เนลแบบผสม เป็นเคอร์เนลที่รวมความสามารถของไมโครเคอร์เนลและโมโนลิทิกเคอร์เนลเข้าด้วยกันเพื่อเลียนแบบประสิทธิภาพและเสถียรภาพของโมโนลิทิกเคอร์เนลและไมโครเคอร์เนล

* BeOS kernel
* DragonFly BSD
* Haiku kernel
* NetWare kernel
* Plan 9 kernel
* ReactOS kernel
* NT kernel Windows NT kernel (Windows 2000, Windows XP, Windows 2003, and Windows Vista)
* XNU kernel (ใช้ใน Mac OS X)

## หมายเหตุ

## อ้างอิง

* Andrew Tanenbaum, *Operating Systems - Design and Implementation (Third edition) *;
* Andrew Tanenbaum, *Modern Operating Systems (Second edition) *;
* Daniel P. Bovet, Marco Cesati, *The Linux Kernel*;
* David A. Peterson, Nitin Indurkhya, Patterson, *Computer Organization and Design*, Morgan Koffman  (ISBN 1-55860-428-6) ;
* B.S. Chalk, *Computer Organisation and Architecture*, Macmillan P. (ISBN 0-333-64551-0).

## แหล่งข้อมูลอื่น
* Kernel คืออะไร - แหล่งข้อมูลความรู้ภาษาไทย
หมวดหมู่:เทคโนโลยีระบบปฏิบัติการ