มันหมายความว่าอย่างไรเมื่อรันโค้ดในเคอร์เนลหรือโหมดผู้ใช้?
มันหมายความว่าอย่างไรเมื่อรันโค้ดในเคอร์เนลหรือโหมดผู้ใช้?
คำตอบ:
โหมดเคอร์เนล
โปรแกรมที่ทำงานในโหมดนี้มีการเข้าถึงฮาร์ดแวร์พื้นฐานอย่างสมบูรณ์ มันสามารถดำเนินการคำสั่ง CPU ใด ๆ เข้าถึงที่อยู่หน่วยความจำและทำสิ่งที่ต้องการ
รหัสโหมดผู้ใช้ที่ทำงานในโหมดนี้ จำกัด เฉพาะการดัดแปลงฮาร์ดแวร์ผ่าน API ของระบบปฏิบัติการ มันไม่สามารถเข้าถึงฮาร์ดแวร์โดยตรงที่ทั้งหมด
สิ่งที่น่าสนใจคือในสถาปัตยกรรมทั่วไปมีการบังคับใช้ผ่านฮาร์ดแวร์ - ไม่ใช่เฉพาะระบบปฏิบัติการ โดยเฉพาะอย่างยิ่งสถาปัตยกรรม x86มีแหวนป้องกัน
ข้อได้เปรียบที่สำคัญของการแยกประเภทนี้คือเมื่อโปรแกรมขัดข้องที่ทำงานในโหมดผู้ใช้มันจะไม่ถึงกับเสียชีวิต อันที่จริงแล้วในระบบที่ทันสมัยมันมักจะไม่ได้
คำตอบสั้น ๆ คือมันแค่บอกคุณว่าโปรแกรมใช้เวลาอยู่ที่ไหน
สำหรับคำตอบที่ยาวกว่านี้ฉันจะอธิบายเรื่องนี้ในสองขั้นตอน ครั้งแรก:
1. เข้าสู่โหมดเคอร์เนล
ทุกรหัสปกติที่คุณเขียนจะทำงานใน "โหมดผู้ใช้"
โปรแกรมสามารถใช้ไลบรารีเพื่อทำงานทั่วไปสำหรับพวกเขา นี่คือรหัสโหมดผู้ใช้
ในบางจุดโปรแกรมอาจต้องการฟังก์ชั่นหลักจากระบบ ตัวอย่างเช่น:
ฟังก์ชั่นที่สำคัญนี้ - ใกล้กับฮาร์ดแวร์ - ฟังก์ชั่นเป็นส่วนหนึ่งของเคอร์เนล นั่นคือโปรแกรมกลางที่อยู่เบื้องหลังทุกสิ่งในคอมพิวเตอร์ของคุณ มันจัดการโปรแกรมทุกอย่างที่จำเป็นเพื่อให้สามารถใช้งานได้
ในการใช้ฟังก์ชั่นในเคอร์เนลพา ธ การทำงานของโปรแกรมจะทำการกระโดดจากโหมดผู้ใช้ไปยังรหัสเคอร์เนล เคอร์เนลทำหน้าที่ของมันและพับพา ธ การประมวลผลกลับสู่โหมดผู้ใช้
เมื่อโปรแกรมใช้เวลามากในโหมดเคอร์เนลมักจะหมายถึงว่ามันกำลังทำกิจกรรมที่เกี่ยวข้องกับฮาร์ดแวร์มากมาย ตัวอย่างเช่นการค้นหาดิสก์หรือการสตรีมวิดีโอ ฮาร์ดแวร์อาจชำรุด ทำให้การประมวลผลช้าลงและทำให้โปรแกรมใช้เวลาผิดปกติในพื้นที่เคอร์เนล
2 ความแตกต่าง
รหัสในพื้นที่เคอร์เนลมีประสิทธิภาพสูง ส่วนอื่น ๆ ของเคอร์เนลสามารถเรียกใช้ได้โดยตรงและรหัสมีการเข้าถึงโดยตรงไปยังทุกทรัพยากรของระบบโดยไม่มีการตรวจสอบขอบเขต การสลับระหว่างโหมดเคอร์เนล / ผู้ใช้เป็นการดำเนินการที่มีค่าใช้จ่ายสูงซึ่งหลีกเลี่ยงได้อย่างสมบูรณ์โดยการรันทุกอย่างในโค้ดเคอร์เนล
อย่างไรก็ตามภายในเคอร์เนลมีพื้นที่ไม่เพียงพอสำหรับการตรวจสอบความปลอดภัยป้องกันการล่มหรือการเขียนไปยังส่วนที่ไม่ถูกต้องของหน่วยความจำ สิ่งเหล่านี้คือบริการที่เคอร์เนลสามารถมอบให้กับโปรแกรมอื่น ๆ มันหลอกให้โปรแกรมเชื่อว่าโลกหน้าตาแตกต่างกัน (โปรแกรมอาศัยอยู่ในสภาพแวดล้อมเสมือนจริง, sandboxed / ถูก จำกัด ) และดังนั้นทุกอย่างที่เข้า / ออกจากโปรแกรมสามารถแปลและป้องกันได้
เคอร์เนลตัวเองไม่สามารถป้องกันได้มากเพราะไม่มีอะไรอยู่ข้างหลังเพื่อปกป้องมัน มันคือหัวใจของระบบและเมื่อมันหยุดลงทุกอย่างก็จะจบลง คุณได้รับความตื่นตระหนกของเคอร์เนลหรือบน Windows BSOD ที่มีชื่อเสียง
นั่นเป็นความเสี่ยงของรหัสที่ใช้เคอร์เนลและสาเหตุที่ทำให้ระบบย่อยที่มีความต้องการประสิทธิภาพต่ำกำลังถูกย้ายไปยังพื้นที่ผู้ใช้ ส่วนประกอบที่สำคัญเกี่ยวกับฮาร์ดแวร์อย่างไรก็ตามโดยทั่วไปแล้วจะเป็นรหัสเคอร์เนลซึ่งจะไม่เปลี่ยนแปลงตลอดเวลาในไม่ช้า
เป็นความแตกต่างของรหัสการดำเนินการในปัจจุบันที่ได้รับอนุญาตให้โต้ตอบโดยตรงกับฮาร์ดแวร์ต่างๆ รหัสโหมดเคอร์เนลสามารถเขียนไปยังอุปกรณ์บัสเปลี่ยนการแมปหน่วยความจำสลับกระบวนการทำงานและอื่น ๆ โหมดผู้ใช้สามารถทำการคำนวณและสามารถเรียกใช้ระบบในเคอร์เนลเพื่อโต้ตอบกับส่วนที่เหลือของโลก