โฮมเพจ » ทำอย่างไร » เคอร์เนล Linux คืออะไรและทำหน้าที่อะไร

    เคอร์เนล Linux คืออะไรและทำหน้าที่อะไร


    ด้วยรหัสมากกว่า 13 ล้านบรรทัดเคอร์เนล Linux เป็นหนึ่งในโครงการโอเพ่นซอร์สที่ใหญ่ที่สุดในโลก แต่สิ่งที่เป็นเคอร์เนลและสิ่งที่มันใช้สำหรับ?

    เคอร์เนลคืออะไร?

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

    ชนิดต่าง ๆ ของเมล็ด

    แน่นอนว่ามีวิธีการต่าง ๆ ในการสร้างเคอร์เนลและข้อควรพิจารณาทางสถาปัตยกรรมเมื่อสร้างหนึ่งจากศูนย์ โดยทั่วไปเมล็ดส่วนใหญ่ตกอยู่ในหนึ่งในสามประเภท: เสาหิน, microkernel และลูกผสม Linux เป็นเคอร์เนลเสาหินในขณะที่ OS X (XNU) และ Windows 7 ใช้เมล็ดพันธุ์แบบผสม ลองทัวร์สามหมวดอย่างรวดเร็วเพื่อเราจะได้เข้าไปดูรายละเอียดเพิ่มเติมในภายหลัง.


    ภาพโดย ข้าวโพดคั่วในเมือง

    microkernel
    microkernel ใช้แนวทางการจัดการสิ่งที่มี: CPU, หน่วยความจำและ IPC ค่อนข้างทุกอย่างอื่นในคอมพิวเตอร์สามารถมองเห็นเป็นอุปกรณ์เสริมและสามารถจัดการในโหมดผู้ใช้ Microkernels มีข้อดีของการพกพาเพราะพวกเขาไม่ต้องกังวลหากคุณเปลี่ยนการ์ดแสดงผลหรือแม้แต่ระบบปฏิบัติการตราบใดที่ระบบปฏิบัติการยังพยายามเข้าถึงฮาร์ดแวร์ในลักษณะเดียวกัน Microkernels มีขนาดเล็กมากทั้งสำหรับหน่วยความจำและพื้นที่ติดตั้งและพวกเขามีแนวโน้มที่จะปลอดภัยมากขึ้นเพราะมีเพียงกระบวนการเฉพาะที่ทำงานในโหมดผู้ใช้ที่ไม่มีสิทธิ์สูงในฐานะโหมดผู้ดูแล.

    ข้อดี

    • ความเบา
    • รอยเท้าติดตั้งขนาดเล็ก
    • หน่วยความจำขนาดเล็ก
    • ความปลอดภัย

    จุดด้อย

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

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

    ข้อดี

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

    จุดด้อย

    • รอยเท้าติดตั้งขนาดใหญ่
    • หน่วยความจำขนาดใหญ่
    • ปลอดภัยน้อยลงเพราะทุกอย่างทำงานในโหมดผู้ดูแล


    รูปภาพผ่าน schoschie บน Flickr

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

    ข้อดี

    • นักพัฒนาสามารถเลือกและเลือกสิ่งที่ทำงานในโหมดผู้ใช้และสิ่งที่ทำงานในโหมดหัวหน้างาน
    • การติดตั้งมีขนาดเล็กกว่าเคอร์เนลเสาหิน
    • ยืดหยุ่นกว่ารุ่นอื่น ๆ

    จุดด้อย

    • สามารถทนทุกข์ทรมานจากกระบวนการล่าช้าเช่นเดียวกับ microkernel
    • ไดรเวอร์อุปกรณ์จำเป็นต้องได้รับการจัดการโดยผู้ใช้ (โดยทั่วไป)

    ไฟล์เคอร์เนล Linux อยู่ที่ไหน?

    ไฟล์เคอร์เนลในอูบุนตูถูกเก็บไว้ในโฟลเดอร์ / boot ของคุณและเรียกว่า vmlinuz-รุ่น. ชื่อ vmlinuz มาจากโลกของยูนิกซ์ที่พวกเขาเคยเรียกว่าเมล็ดของพวกเขาเพียงแค่ "unix" ย้อนกลับไปในยุค 60 ดังนั้น Linux เริ่มเรียกเคอร์เนล "linux" ของพวกเขาเมื่อมันถูกพัฒนาขึ้นครั้งแรกใน 90.

    เมื่อหน่วยความจำเสมือนได้รับการพัฒนาเพื่อความสามารถในการทำงานหลายอย่างง่ายขึ้น“ vm” ถูกวางไว้ด้านหน้าของไฟล์เพื่อแสดงว่าเคอร์เนลรองรับหน่วยความจำเสมือน ในขณะที่เคอร์เนล Linux ถูกเรียกว่า vmlinux แต่เคอร์เนลมีขนาดใหญ่เกินไปที่จะพอดีกับหน่วยความจำบูตที่มีอยู่ดังนั้นภาพเคอร์เนลจึงถูกบีบอัดและตอนจบ x ถูกเปลี่ยนเป็น z เพื่อแสดงว่าถูกบีบอัดด้วยการบีบอัด zlib การบีบอัดแบบเดียวกันนี้ไม่ได้ถูกนำมาใช้เสมอ ๆ มักจะถูกแทนที่ด้วย LZMA หรือ BZIP2 และเมล็ดบางส่วนเรียกง่ายๆว่า zImage.

    การกำหนดหมายเลขเวอร์ชันจะอยู่ในรูปแบบ A.B.D โดยที่ A.B อาจเป็น 2.6, C จะเป็นเวอร์ชั่นของคุณและ D หมายถึงแพตช์หรือการแก้ไขของคุณ.

    ในโฟลเดอร์ / boot จะมีไฟล์สำคัญอื่น ๆ ที่เรียกว่า initrd.img-version, system.map-version และ config-version ไฟล์ initrd จะใช้เป็นดิสก์ RAM ขนาดเล็กที่แยกและดำเนินการไฟล์เคอร์เนลจริง ไฟล์ system.map ใช้สำหรับการจัดการหน่วยความจำก่อนที่เคอร์เนลจะโหลดเต็มที่และไฟล์ config จะบอกเคอร์เนลว่าตัวเลือกและโมดูลใดที่จะโหลดเข้าสู่อิมเมจเคอร์เนลเมื่อมีการรวบรวม.

    สถาปัตยกรรมเคอร์เนล Linux

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

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

    ลองนึกภาพถ้าคุณสามารถอัพเกรดเป็น Service Pack ของ Windows โดยไม่จำเป็นต้องรีบูต ...

    โมดูลเคอร์เนล

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

    โดยทั่วไปโมดูลจะเพิ่มฟังก์ชันการทำงานให้กับเคอร์เนลฐานสำหรับสิ่งต่าง ๆ เช่นอุปกรณ์ระบบไฟล์และการเรียกระบบ LKMs มีนามสกุลไฟล์. ko และโดยทั่วไปจะถูกเก็บไว้ในไดเรกทอรี / lib / modules เนื่องจากลักษณะแบบแยกส่วนคุณสามารถปรับแต่งเคอร์เนลของคุณได้อย่างง่ายดายโดยการตั้งค่าโมดูลให้โหลดหรือไม่โหลดระหว่างการเริ่มต้นด้วยคำสั่ง menuconfig หรือแก้ไขไฟล์ / boot / config ของคุณหรือคุณสามารถโหลดและยกเลิกการโหลดโมดูลได้ทันทีด้วย modprobe คำสั่ง.

    โมดูลบุคคลที่สามและโมดูลที่ปิดมีให้บริการในการแจกจ่ายบางอย่างเช่น Ubuntu และอาจไม่ได้รับการติดตั้งเป็นค่าเริ่มต้นเนื่องจากไม่มีซอร์สโค้ดสำหรับโมดูลนั้น ผู้พัฒนาซอฟต์แวร์ (เช่น nVidia, ATI และอื่น ๆ ) ไม่ได้ให้ซอร์สโค้ด แต่จะสร้างโมดูลของตนเองและรวบรวมไฟล์. ko ที่จำเป็นสำหรับการแจกจ่าย แม้ว่าโมดูลเหล่านี้จะฟรีเหมือนในเบียร์ แต่ก็ไม่ได้ฟรีเหมือนในการพูดและดังนั้นจึงไม่รวมอยู่ในการแจกแจงบางอย่างเนื่องจากผู้ดูแลรู้สึกว่า "taints" เคอร์เนลโดยการให้ซอฟต์แวร์ที่ไม่ใช่ฟรี.

    เคอร์เนลไม่ใช่เวทมนต์ แต่เป็นสิ่งจำเป็นอย่างยิ่งสำหรับคอมพิวเตอร์ทุกเครื่องที่ทำงานอย่างถูกต้อง เคอร์เนล Linux แตกต่างจาก OS X และ Windows เนื่องจากมีไดรเวอร์ในระดับเคอร์เนลและทำให้หลายสิ่งรองรับ“ ไม่ใช้งาน” หวังว่าคุณจะรู้เพิ่มเติมเล็กน้อยเกี่ยวกับการทำงานร่วมกันของซอฟต์แวร์และฮาร์ดแวร์และไฟล์ที่คุณต้องใช้ในการบูตเครื่องคอมพิวเตอร์ของคุณ.

    Kernel.org
    ภาพโดย ingridtaylar