อะไรคือความแตกต่างระหว่างโหมดผู้ใช้และโหมดเคอร์เนลเหตุใดคุณจึงเปิดใช้งานโหมดใดโหมดหนึ่งและกรณีการใช้งานคืออะไร
อะไรคือความแตกต่างระหว่างโหมดผู้ใช้และโหมดเคอร์เนลเหตุใดคุณจึงเปิดใช้งานโหมดใดโหมดหนึ่งและกรณีการใช้งานคืออะไร
คำตอบ:
โหมดเคอร์เนล
ในโหมดเคอร์เนลโค้ดการดำเนินการมีการเข้าถึงฮาร์ดแวร์พื้นฐานที่สมบูรณ์และไม่ จำกัด มันสามารถรันคำสั่ง CPU และอ้างอิงที่อยู่หน่วยความจำใดก็ได้ โดยทั่วไปแล้วโหมดเคอร์เนลจะสงวนไว้สำหรับฟังก์ชันระดับต่ำสุดและน่าเชื่อถือที่สุดของระบบปฏิบัติการ การขัดข้องในโหมดเคอร์เนลถือเป็นความหายนะ พวกเขาจะหยุดพีซีทั้งเครื่อง
โหมดผู้ใช้
ในโหมดผู้ใช้รหัสดำเนินการไม่มีความสามารถในการเข้าถึงฮาร์ดแวร์หรือหน่วยความจำอ้างอิงโดยตรง โค้ดที่ทำงานในโหมดผู้ใช้ต้องมอบสิทธิ์ให้กับ API ระบบเพื่อเข้าถึงฮาร์ดแวร์หรือหน่วยความจำ เนื่องจากการป้องกันที่ได้รับจากการแยกประเภทนี้ข้อขัดข้องในโหมดผู้ใช้จึงสามารถกู้คืนได้เสมอ โค้ดส่วนใหญ่ที่ทำงานบนคอมพิวเตอร์ของคุณจะทำงานในโหมดผู้ใช้
อ่านเพิ่มเติม
นี่คือสองโหมดที่แตกต่างกันซึ่งคอมพิวเตอร์ของคุณสามารถทำงานได้ ก่อนหน้านี้เมื่อคอมพิวเตอร์เป็นเหมือนห้องขนาดใหญ่หากมีสิ่งใดขัดข้องคอมพิวเตอร์จะหยุดทำงานทั้งเครื่อง ดังนั้นสถาปนิกคอมพิวเตอร์จึงตัดสินใจที่จะเปลี่ยนมัน ไมโครโปรเซสเซอร์สมัยใหม่ใช้ในฮาร์ดแวร์อย่างน้อย 2 สถานะที่แตกต่างกัน
โหมดผู้ใช้:
โหมดเคอร์เนล:
สวิตช์เกิดขึ้นได้อย่างไร
การเปลี่ยนจากโหมดผู้ใช้เป็นโหมดเคอร์เนลไม่ได้ดำเนินการโดยอัตโนมัติโดย CPU CPU ถูกขัดจังหวะโดยอินเทอร์รัปต์ (ตัวจับเวลาแป้นพิมพ์ I / O) เมื่อเกิดการขัดจังหวะ CPU จะหยุดการเรียกใช้โปรแกรมที่กำลังทำงานอยู่ในปัจจุบันเปลี่ยนเป็นโหมดเคอร์เนลเรียกใช้ตัวจัดการขัดจังหวะ ตัวจัดการนี้จะบันทึกสถานะของ CPU ดำเนินการเรียกคืนสถานะและกลับสู่โหมดผู้ใช้
http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode
http://tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html
โปรเซสเซอร์ในคอมพิวเตอร์ที่ใช้ Windows มีสองโหมดที่แตกต่างกัน ได้แก่ โหมดผู้ใช้และโหมดเคอร์เนล โปรเซสเซอร์จะสลับไปมาระหว่างสองโหมดขึ้นอยู่กับชนิดของโค้ดที่รันบนโปรเซสเซอร์ แอปพลิเคชันทำงานในโหมดผู้ใช้และส่วนประกอบของระบบปฏิบัติการหลักจะทำงานในโหมดเคอร์เนล ในขณะที่ไดรเวอร์จำนวนมากทำงานในโหมดเคอร์เนลไดรเวอร์บางตัวอาจทำงานในโหมดผู้ใช้
เมื่อคุณเริ่มแอปพลิเคชันโหมดผู้ใช้ Windows จะสร้างกระบวนการสำหรับแอปพลิเคชัน กระบวนการจัดเตรียมแอปพลิเคชันด้วยพื้นที่ที่อยู่เสมือนส่วนตัวและตารางจัดการส่วนตัว เนื่องจากพื้นที่ที่อยู่เสมือนของแอปพลิเคชันเป็นแบบส่วนตัวแอปพลิเคชันหนึ่งจึงไม่สามารถเปลี่ยนแปลงข้อมูลที่เป็นของแอปพลิเคชันอื่นได้ แต่ละแอปพลิเคชันจะทำงานแยกกันและหากแอปพลิเคชันขัดข้องข้อขัดข้องจะ จำกัด เฉพาะแอปพลิเคชันนั้นเท่านั้น แอปพลิเคชันอื่น ๆ และระบบปฏิบัติการจะไม่ได้รับผลกระทบจากข้อขัดข้อง
นอกจากความเป็นส่วนตัวแล้วพื้นที่ที่อยู่เสมือนของแอปพลิเคชันโหมดผู้ใช้ยังมี จำกัด โปรเซสเซอร์ที่ทำงานในโหมดผู้ใช้ไม่สามารถเข้าถึงแอดเดรสเสมือนที่สงวนไว้สำหรับระบบปฏิบัติการ การ จำกัด พื้นที่แอดเดรสเสมือนของแอ็พพลิเคชันโหมดผู้ใช้จะป้องกันไม่ให้แอปพลิเคชันเปลี่ยนแปลงและอาจทำให้ข้อมูลระบบปฏิบัติการที่สำคัญเสียหายได้
โค้ดทั้งหมดที่ทำงานในโหมดเคอร์เนลจะแชร์พื้นที่แอดเดรสเสมือนเดียว ซึ่งหมายความว่าไดรเวอร์ในโหมดเคอร์เนลจะไม่แยกออกจากไดรเวอร์อื่นและระบบปฏิบัติการเอง หากโปรแกรมควบคุมโหมดเคอร์เนลเขียนไปยังที่อยู่เสมือนผิดโดยไม่ได้ตั้งใจข้อมูลที่เป็นของระบบปฏิบัติการหรือไดรเวอร์อื่นอาจถูกบุกรุก หากไดรเวอร์ในโหมดเคอร์เนลขัดข้องระบบปฏิบัติการทั้งหมดจะขัดข้อง
หากคุณเป็นผู้ใช้ Windows เมื่อผ่านลิงค์นี้คุณจะได้รับมากขึ้น
วงแหวน CPU เป็นความแตกต่างที่ชัดเจนที่สุด
ในโหมดป้องกัน x86 CPU จะอยู่ในวงแหวน 4 วงเสมอ เคอร์เนล Linux ใช้ 0 และ 3 เท่านั้น:
นี่คือคำจำกัดความที่ยากและรวดเร็วที่สุดของ kernel vs userland
เหตุใด Linux จึงไม่ใช้วงแหวน 1 และ 2: วงแหวนสิทธิ์ของ CPU: เหตุใดจึงไม่ใช้วงแหวน 1 และ 2
วงแหวนปัจจุบันถูกกำหนดอย่างไร?
วงแหวนปัจจุบันถูกเลือกโดยการรวมกันของ:
global descriptor table: ตารางในหน่วยความจำของรายการ GDT และแต่ละรายการจะมีฟิลด์Privl
ที่เข้ารหัสวงแหวน
คำสั่ง LGDT ตั้งค่าแอดเดรสเป็นตาราง descriptor ปัจจุบัน
ดูสิ่งนี้ด้วย: http://wiki.osdev.org/Global_Descriptor_Table
กลุ่มจะลงทะเบียน CS, DS ฯลฯ ซึ่งชี้ไปที่ดัชนีของรายการใน GDT
ตัวอย่างเช่นCS = 0
หมายความว่ารายการแรกของ GDT กำลังทำงานอยู่สำหรับโค้ดเรียกใช้งาน
แหวนแต่ละวงทำอะไรได้บ้าง?
ชิป CPU ถูกสร้างขึ้นทางกายภาพเพื่อให้:
แหวน 0 สามารถทำอะไรก็ได้
วงแหวน 3 ไม่สามารถเรียกใช้คำสั่งหลาย ๆ คำสั่งและเขียนไปยังการลงทะเบียนหลายรายการโดยเฉพาะอย่างยิ่ง:
ไม่สามารถเปลี่ยนแหวนของตัวเองได้! มิฉะนั้นมันสามารถตั้งค่าตัวเองเป็นแหวน 0 และแหวนจะไร้ประโยชน์
กล่าวอีกนัยหนึ่งคือไม่สามารถแก้ไขตัวบอกเซ็กเมนต์ปัจจุบันซึ่งกำหนดวงแหวนปัจจุบัน
ไม่สามารถแก้ไขตารางเพจได้: x86 เพจจิ้งทำงานอย่างไร?
กล่าวอีกนัยหนึ่งคือไม่สามารถแก้ไขการลงทะเบียน CR3 และการเพจเองจะป้องกันการแก้ไขตารางเพจ
ซึ่งจะป้องกันไม่ให้กระบวนการหนึ่งเห็นหน่วยความจำของกระบวนการอื่น ๆ เพื่อความปลอดภัย / เหตุผลในการเขียนโปรแกรมที่ง่าย
ไม่สามารถลงทะเบียนตัวจัดการขัดจังหวะ สิ่งเหล่านี้ได้รับการกำหนดค่าโดยการเขียนไปยังตำแหน่งหน่วยความจำซึ่งป้องกันด้วยการเพจ
ตัวจัดการทำงานในวงแหวน 0 และจะทำลายโมเดลความปลอดภัย
กล่าวอีกนัยหนึ่งคือไม่สามารถใช้คำแนะนำ LGDT และ LIDT
ไม่สามารถทำคำสั่ง IO เช่นin
และout
และทำให้มีการเข้าถึงฮาร์ดแวร์โดยพลการ
มิฉะนั้นเช่นสิทธิ์ของไฟล์จะไม่มีประโยชน์หากโปรแกรมใด ๆ สามารถอ่านจากดิสก์ได้โดยตรง
ต้องขอบคุณMichael Petchอย่างแม่นยำยิ่งขึ้น: เป็นไปได้จริงที่ระบบปฏิบัติการจะอนุญาตคำแนะนำ IO บนวงแหวน 3 ซึ่งจริง ๆ แล้วจะถูกควบคุมโดยส่วนสถานะงานส่วนงานรัฐ
สิ่งที่เป็นไปไม่ได้คือวงแหวน 3 จะอนุญาตให้ตัวเองทำเช่นนั้นหากไม่มีตั้งแต่แรก
Linux ปิดการใช้งานเสมอ ดูเพิ่มเติม: เหตุใด Linux จึงไม่ใช้สวิตช์บริบทฮาร์ดแวร์ผ่าน TSS
โปรแกรมและระบบปฏิบัติการเปลี่ยนไปมาระหว่างวงแหวนได้อย่างไร?
เมื่อ CPU เปิดอยู่มันจะเริ่มรันโปรแกรมเริ่มต้นในวงแหวน 0 (เป็นแบบที่ดี แต่ก็เป็นค่าประมาณที่ดี) คุณสามารถคิดว่าโปรแกรมเริ่มต้นนี้เป็นเคอร์เนล (แต่โดยปกติแล้วจะเป็น bootloader ที่เรียกเคอร์เนลที่ยังคงอยู่ในวงแหวน 0 )
เมื่อกระบวนการของผู้ใช้ต้องการให้เคอร์เนลทำอะไรบางอย่างเช่นเขียนลงไฟล์จะใช้คำสั่งที่สร้างการขัดจังหวะเช่นint 0x80
หรือsyscall
เพื่อส่งสัญญาณเคอร์เนล x86-64 Linux syscall hello world ตัวอย่าง:
.data
hello_world:
.ascii "hello world\n"
hello_world_len = . - hello_world
.text
.global _start
_start:
/* write */
mov $1, %rax
mov $1, %rdi
mov $hello_world, %rsi
mov $hello_world_len, %rdx
syscall
/* exit */
mov $60, %rax
mov $0, %rdi
syscall
รวบรวมและเรียกใช้:
as -o hello_world.o hello_world.S
ld -o hello_world.out hello_world.o
./hello_world.out
เมื่อสิ่งนี้เกิดขึ้น CPU จะเรียกตัวจัดการการเรียกกลับขัดจังหวะซึ่งเคอร์เนลลงทะเบียนในเวลาบูต นี่คือตัวอย่างที่เป็นรูปธรรมที่ BareMetal ลงทะเบียนจัดการและการใช้งานมัน
ตัวจัดการนี้ทำงานในวงแหวน 0 ซึ่งจะตัดสินใจว่าเคอร์เนลจะอนุญาตการดำเนินการนี้หรือไม่ดำเนินการและรีสตาร์ทโปรแกรม userland ในวงแหวน 3 x86_64
เมื่อมีการexec
ใช้การเรียกระบบ (หรือเมื่อเคอร์เนลจะเริ่มทำงาน/init
) เคอร์เนลจะเตรียมรีจิสเตอร์และหน่วยความจำของกระบวนการยูสเซอร์แลนด์ใหม่จากนั้นจะข้ามไปที่จุดเริ่มต้นและเปลี่ยนซีพียูเป็นวงแหวน 3
หากโปรแกรมพยายามทำบางสิ่งที่ซุกซนเช่นเขียนลงทะเบียนต้องห้ามหรือที่อยู่หน่วยความจำ (เนื่องจากการเพจ) CPU จะเรียกตัวจัดการการเรียกกลับเคอร์เนลบางตัวในวงแหวน 0
แต่เนื่องจาก userland นั้นซุกซนเคอร์เนลอาจฆ่ากระบวนการในครั้งนี้หรือแจ้งเตือนด้วยสัญญาณ
เมื่อเคอร์เนลบู๊ตระบบจะตั้งค่านาฬิกาฮาร์ดแวร์ด้วยความถี่คงที่ซึ่งจะสร้างการขัดจังหวะเป็นระยะ
นาฬิกาฮาร์ดแวร์นี้สร้างอินเทอร์รัปต์ที่รันเสียงเรียกเข้า 0 และอนุญาตให้กำหนดเวลาที่กระบวนการของผู้ใช้จะเริ่มทำงาน
ด้วยวิธีนี้การตั้งเวลาสามารถเกิดขึ้นได้แม้ว่ากระบวนการต่างๆจะไม่ได้ทำการเรียกระบบใด ๆ ก็ตาม
อะไรคือจุดที่มีวงแหวนหลายวง?
มีข้อดีสองประการในการแยกเคอร์เนลและยูสเซอร์แลนด์:
จะเล่นกับมันได้อย่างไร?
ฉันได้สร้างการตั้งค่าโลหะเปล่าที่น่าจะเป็นวิธีที่ดีในการจัดการแหวนโดยตรง: https://github.com/cirosantilli/x86-bare-metal-examples
ฉันไม่มีความอดทนในการสร้างตัวอย่าง userland แต่ฉันทำไปได้ไกลถึงการตั้งค่าเพจดังนั้น userland ควรจะเป็นไปได้ ฉันชอบที่จะเห็นคำขอดึง
หรืออีกวิธีหนึ่งโมดูลเคอร์เนลของลินุกซ์จะทำงานในวงแหวน 0 ดังนั้นคุณสามารถใช้มันเพื่อทดลองใช้การดำเนินการที่มีสิทธิพิเศษเช่นอ่านรีจิสเตอร์ควบคุม: จะเข้าถึงรีจิสเตอร์คอนโทรล cr0, cr2, cr3 จากโปรแกรมได้อย่างไร? รับข้อผิดพลาดในการแบ่งส่วน
นี่คือการตั้งค่า QEMU + Buildroot ที่สะดวกเพื่อทดลองใช้โดยไม่ต้องฆ่าโฮสต์ของคุณ
ข้อเสียของโมดูลเคอร์เนลคือ kthreads อื่น ๆ กำลังทำงานอยู่และอาจรบกวนการทดลองของคุณ แต่ในทางทฤษฎีคุณสามารถควบคุมตัวจัดการขัดจังหวะทั้งหมดด้วยโมดูลเคอร์เนลของคุณและเป็นเจ้าของระบบนั่นจะเป็นโครงการที่น่าสนใจจริงๆ
วงแหวนเชิงลบ
แม้ว่าวงแหวนเชิงลบจะไม่ได้อ้างอิงในคู่มือของ Intel แต่ก็มีโหมด CPU ที่มีความสามารถมากกว่าวงแหวน 0 เองดังนั้นจึงเหมาะกับชื่อ "แหวนลบ"
ตัวอย่างหนึ่งคือโหมดไฮเปอร์ไวเซอร์ที่ใช้ในการจำลองเสมือน
สำหรับรายละเอียดเพิ่มเติมโปรดดู:
แขน
ใน ARM วงแหวนจะเรียกว่า Exception Levels แทน แต่แนวคิดหลักยังคงเหมือนเดิม
มีข้อยกเว้น 4 ระดับใน ARMv8 ซึ่งมักใช้เป็น:
EL0: userland
EL1: เคอร์เนล ("ผู้ควบคุม" ในคำศัพท์ ARM)
ป้อนด้วยsvc
คำสั่ง (SuperVisor Call) ซึ่งก่อนหน้านี้รู้จักกันในชื่อswi
ก่อนแอสเซมบลีแบบรวมซึ่งเป็นคำสั่งที่ใช้ในการเรียกระบบ Linux สวัสดีชาวโลก ARMv8 ตัวอย่าง:
สวัสดีส
.text
.global _start
_start:
/* write */
mov x0, 1
ldr x1, =msg
ldr x2, =len
mov x8, 64
svc 0
/* exit */
mov x0, 0
mov x8, 93
svc 0
msg:
.ascii "hello syscall v8\n"
len = . - msg
ทดสอบกับ QEMU บน Ubuntu 16.04:
sudo apt-get install qemu-user gcc-arm-linux-gnueabihf
arm-linux-gnueabihf-as -o hello.o hello.S
arm-linux-gnueabihf-ld -o hello hello.o
qemu-arm hello
นี่เป็นตัวอย่างที่เป็นรูปธรรมที่ BareMetal ลงทะเบียนการจัดการ SVC และไม่รับสายเรียก
EL2: hypervisorsเช่นXen
ป้อนhvc
คำสั่ง (HyperVisor Call)
ไฮเปอร์ไวเซอร์คือระบบปฏิบัติการระบบปฏิบัติการคืออะไรสำหรับผู้ใช้
ตัวอย่างเช่น Xen ช่วยให้คุณสามารถเรียกใช้ระบบปฏิบัติการหลายระบบเช่น Linux หรือ Windows บนระบบเดียวกันในเวลาเดียวกันและแยกระบบปฏิบัติการออกจากกันเพื่อความปลอดภัยและง่ายต่อการดีบักเช่นเดียวกับที่ Linux ทำกับโปรแกรมของผู้ใช้
ไฮเปอร์ไวเซอร์เป็นส่วนสำคัญของโครงสร้างพื้นฐานระบบคลาวด์ในปัจจุบัน: อนุญาตให้เซิร์ฟเวอร์หลายเครื่องทำงานบนฮาร์ดแวร์ตัวเดียวทำให้การใช้ฮาร์ดแวร์ใกล้เคียง 100% เสมอและประหยัดเงินได้มาก
AWS เช่นใช้ Xen จนกระทั่ง 2017 เมื่อย้ายไป KVM ทำข่าว
EL3: อีกระดับ ตัวอย่างสิ่งที่ต้องทำ
ป้อนsmc
คำแนะนำ (การโทรโหมดปลอดภัย)
ARMv8 สถาปัตยกรรมแบบอ้างอิง DDI 0487C.a - บท D1 - ระดับ AArch64 ระบบโปรแกรมเมอร์รุ่น - รูปที่แสดงให้เห็นถึง D1-1 นี้สวยงาม:
สถานการณ์การเปลี่ยนแปลง ARM bit กับการถือกำเนิดของARMv8.1 Virtualization ส่วนขยายโฮสต์ (VHE) ส่วนขยายนี้ช่วยให้เคอร์เนลทำงานใน EL2 ได้อย่างมีประสิทธิภาพ:
VHE ถูกสร้างขึ้นเนื่องจากโซลูชันการจำลองเสมือนในเคอร์เนลในลินุกซ์เช่น KVM มีพื้นฐานเหนือ Xen (ดูเช่นการย้าย AWS ไปยัง KVM ที่กล่าวถึงข้างต้น) เนื่องจากไคลเอนต์ส่วนใหญ่ต้องการเพียง Linux VMs และอย่างที่คุณสามารถจินตนาการได้ว่าทั้งหมดอยู่ในเครื่องเดียว โครงการ KVM นั้นง่ายกว่าและอาจมีประสิทธิภาพมากกว่า Xen ตอนนี้เคอร์เนลของโฮสต์ Linux ทำหน้าที่เป็นไฮเปอร์ไวเซอร์ในกรณีเหล่านั้น
สังเกตว่า ARM อาจเป็นเพราะประโยชน์ของการมองย้อนกลับมีรูปแบบการตั้งชื่อที่ดีกว่าสำหรับระดับสิทธิ์มากกว่า x86 โดยไม่จำเป็นต้องใช้ระดับลบ: 0 คือต่ำกว่าและ 3 สูงสุด ระดับที่สูงขึ้นมักจะถูกสร้างขึ้นบ่อยกว่าระดับที่ต่ำกว่า
EL ปัจจุบันสามารถสอบถามได้ด้วยMRS
คำสั่ง: โหมดการดำเนินการปัจจุบัน / ระดับข้อยกเว้นคืออะไร ฯลฯ ?
ARM ไม่จำเป็นต้องมีระดับข้อยกเว้นทั้งหมดเพื่อให้สามารถนำไปใช้งานที่ไม่ต้องการคุณสมบัติเพื่อประหยัดพื้นที่ชิปได้ ARMv8 "ระดับข้อยกเว้น" กล่าวว่า:
การใช้งานอาจไม่รวมถึงระดับข้อยกเว้นทั้งหมด การใช้งานทั้งหมดต้องมี EL0 และ EL1 EL2 และ EL3 เป็นอุปกรณ์เสริม
QEMU เช่นค่าเริ่มต้นเป็น EL1 แต่ EL2 และ EL3 สามารถเปิดใช้งานได้ด้วยตัวเลือกบรรทัดคำสั่ง: qemu-system-aarch64 ป้อน el1 เมื่อจำลองการเปิดเครื่อง a53
ตัวอย่างโค้ดทดสอบบน Ubuntu 18.10
in
และout
พร้อมใช้งานสำหรับ Ring 3 TSS สามารถชี้ไปที่ตารางการอนุญาต IO ในงานปัจจุบันที่ให้สิทธิ์ในการอ่าน / เขียนพอร์ตทั้งหมดหรือเฉพาะ
ฉันจะแทงในความมืดและเดาว่าคุณกำลังพูดถึง Windows สรุปได้ว่าโหมดเคอร์เนลสามารถเข้าถึงฮาร์ดแวร์ได้เต็มรูปแบบ แต่โหมดผู้ใช้ไม่มี ตัวอย่างเช่นหลายคนหากไม่ใช่ไดรเวอร์อุปกรณ์ส่วนใหญ่จะเขียนในโหมดเคอร์เนลเนื่องจากต้องการควบคุมรายละเอียดปลีกย่อยของฮาร์ดแวร์
ดูวิกิตำรานี้ด้วย
คำตอบอื่น ๆ ได้อธิบายความแตกต่างระหว่างโหมดผู้ใช้และโหมดเคอร์เนลแล้ว หากคุณต้องการลงรายละเอียดจริงๆคุณควรได้รับสำเนาของ Windows Internalsซึ่งเป็นหนังสือที่ยอดเยี่ยมที่เขียนโดย Mark Russinovich และ David Solomon ซึ่งอธิบายถึงสถาปัตยกรรมและรายละเอียดภายในของระบบปฏิบัติการ Windows ต่างๆ
อะไร
โดยทั่วไปความแตกต่างระหว่างโหมดเคอร์เนลและโหมดผู้ใช้ไม่ได้ขึ้นอยู่กับระบบปฏิบัติการและทำได้โดยการ จำกัด คำสั่งบางคำสั่งให้ทำงานในโหมดเคอร์เนลโดยการออกแบบฮาร์ดแวร์เท่านั้น วัตถุประสงค์อื่น ๆ ทั้งหมดเช่นการป้องกันหน่วยความจำสามารถทำได้โดยข้อ จำกัด นั้นเท่านั้น
อย่างไร
หมายความว่าโปรเซสเซอร์มีชีวิตอยู่ในโหมดเคอร์เนลหรือในโหมดผู้ใช้ การใช้กลไกบางอย่างสถาปัตยกรรมสามารถรับประกันได้ว่าเมื่อใดก็ตามที่เปลี่ยนเป็นโหมดเคอร์เนลโค้ด OS จะถูกดึงมาเพื่อเรียกใช้
ทำไม
การมีโครงสร้างพื้นฐานฮาร์ดแวร์นี้สามารถทำได้ในระบบปฏิบัติการทั่วไป: