มันหมายความว่าอย่างไรเมื่อรันโค้ดในโหมด [เคอร์เนล | ผู้ใช้]?


14

มันหมายความว่าอย่างไรเมื่อรันโค้ดในเคอร์เนลหรือโหมดผู้ใช้?

คำตอบ:


15

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

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

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

สิ่งที่น่าสนใจคือในสถาปัตยกรรมทั่วไปมีการบังคับใช้ผ่านฮาร์ดแวร์ - ไม่ใช่เฉพาะระบบปฏิบัติการ โดยเฉพาะอย่างยิ่งสถาปัตยกรรม x86มีแหวนป้องกัน

ข้อได้เปรียบที่สำคัญของการแยกประเภทนี้คือเมื่อโปรแกรมขัดข้องที่ทำงานในโหมดผู้ใช้มันจะไม่ถึงกับเสียชีวิต อันที่จริงแล้วในระบบที่ทันสมัยมันมักจะไม่ได้

ตรวจสอบการเขียนของ Jeff มันเป็นสิ่งที่ดีตามปกติของเขา


3

คำตอบสั้น ๆ คือมันแค่บอกคุณว่าโปรแกรมใช้เวลาอยู่ที่ไหน

สำหรับคำตอบที่ยาวกว่านี้ฉันจะอธิบายเรื่องนี้ในสองขั้นตอน ครั้งแรก:

1. เข้าสู่โหมดเคอร์เนล

ทุกรหัสปกติที่คุณเขียนจะทำงานใน "โหมดผู้ใช้"

โปรแกรมสามารถใช้ไลบรารีเพื่อทำงานทั่วไปสำหรับพวกเขา นี่คือรหัสโหมดผู้ใช้

ในบางจุดโปรแกรมอาจต้องการฟังก์ชั่นหลักจากระบบ ตัวอย่างเช่น:

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

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

ในการใช้ฟังก์ชั่นในเคอร์เนลพา ธ การทำงานของโปรแกรมจะทำการกระโดดจากโหมดผู้ใช้ไปยังรหัสเคอร์เนล เคอร์เนลทำหน้าที่ของมันและพับพา ธ การประมวลผลกลับสู่โหมดผู้ใช้

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


2 ความแตกต่าง

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

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

เคอร์เนลตัวเองไม่สามารถป้องกันได้มากเพราะไม่มีอะไรอยู่ข้างหลังเพื่อปกป้องมัน มันคือหัวใจของระบบและเมื่อมันหยุดลงทุกอย่างก็จะจบลง คุณได้รับความตื่นตระหนกของเคอร์เนลหรือบน Windows BSOD ที่มีชื่อเสียง

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


2

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.