ระบบปฏิบัติการจำกัดความสามารถของโปรแกรมอย่างไรหากทำงานโดยตรงกับ cpu?
เมื่อโปรแกรมโหลดลงในหน่วยความจำและเริ่มทำงานซีพียูจะโหลดแต่ละคำสั่งจากโค้ดและรันคำสั่งตาม opcode และอาร์กิวเมนต์ดังนั้นโปรแกรมจึงขัดจังหวะเพื่อให้พูดกับ cpu โดยตรง
อย่างไรก็ตามระบบปฏิบัติการ (linux / win) ไม่อนุญาตให้คุณทำทุกอย่างดังนั้นคุณต้องขออนุญาตบางอย่างด้วยการเรียกระบบ แต่ฉันสงสัยว่ารหัสผู้ใช้ไม่สามารถทำบางสิ่งที่ระบบปฏิบัติการทำได้อย่างไร - มันสร้างความแตกต่างอะไรให้กับซีพียูไม่ว่ารหัสเคอร์เนลของระบบปฏิบัติการจะรันคำสั่งหรือหากผู้ใช้ทำ
ระบบปฏิบัติการตรวจสอบโค้ดของฉันก่อนที่จะโหลดหรือไม่และดูว่าฉันกำลังใช้คำสั่งบางอย่างที่ฉันไม่ได้รับอนุญาตให้ใช้หรือไม่และหากเป็นเช่นนั้นก็จะไม่ดำเนินการ
มีการจัดการอย่างไร?
Btw ถือว่าแอสเซมบลีเป็นภาษาโปรแกรมดังนั้นโปรแกรมเมอร์สามารถเลือกคำสั่งใด ๆ ที่จะใช้ในโค้ดได้
คำตอบ
ซีพียูสมัยใหม่มีโหมดสิทธิพิเศษที่ระบบปฏิบัติการใช้โดยล็อกคำสั่งบางอย่าง ตัวอย่างเช่นในuser
โหมดคำสั่งที่แก้ไข (เพิ่ม) โหมดสิทธิ์หรือเข้าถึงทรัพยากรระบบเช่นตารางหน้าที่กำหนดค่าไว้ในปัจจุบันทำให้เกิดข้อยกเว้น สิ่งนี้ช่วยให้ระบบปฏิบัติการตัดสินใจว่าจะยกเลิกกระบวนการผู้ใช้ของคุณหรือเลียนแบบการดำเนินการ
ระบบปฏิบัติการตรวจสอบโค้ดของฉันก่อนที่จะโหลดหรือไม่และดูว่าฉันกำลังใช้คำสั่งบางอย่างที่ฉันไม่ได้รับอนุญาตให้ใช้หรือไม่และหากเป็นเช่นนั้นก็จะไม่ดำเนินการ
ไม่จำเป็น - ระบบปฏิบัติการกำหนดให้โปรเซสเซอร์เข้าสู่โหมด "ผู้ใช้" เมื่อใดก็ตามที่รันโค้ดผู้ใช้ สิ่งนี้จะเปิดใช้งานกลไกการยกเว้นของฮาร์ดแวร์หากพบคำสั่งที่มีสิทธิพิเศษ - ในโหมดผู้ใช้ข้อยกเว้นจะเกิดขึ้นแทนที่จะดำเนินการตามคำสั่งที่มีสิทธิพิเศษ (การเรียกใช้ข้อยกเว้นคือการดำเนินการของคำสั่งนั้นแทนที่จะเป็นการดำเนินการที่มีสิทธิพิเศษ)
Btw ประเภทการเรียกระบบของคำสั่งที่ใช้โดยรหัสโหมดผู้ใช้เพื่อขอบริการจากระบบปฏิบัติการยังเปิดใช้งานกลไกการยกเว้นฮาร์ดแวร์
มีการจัดการอย่างไร?
ระบบปฏิบัติการจะเรียกใช้รหัสผู้ใช้ที่โหมดผู้ใช้เสมอหรือที่เรียกว่าสิทธิ์ระดับผู้ใช้และโดยทั่วไปจะเรียกใช้รหัสของตนเองด้วยสิทธิ์ที่สูงกว่า โหมดเหล่านี้จะแจ้งให้โปรเซสเซอร์ทราบถึงวิธีจัดการกับคำสั่งพิเศษ รหัสโหมดผู้ใช้ส่วนใหญ่ไม่ต้องกังวลกับการพยายามเรียกใช้คำสั่งที่มีสิทธิพิเศษเนื่องจากไม่มีประโยชน์ แต่ถ้าเป็นเช่นนั้นกลไกการยกเว้นฮาร์ดแวร์จะเข้ามาและบอกระบบปฏิบัติการอย่างมีประสิทธิภาพว่าสิ่งนี้เกิดขึ้นและช่วยให้สามารถจัดการกับสถานการณ์ได้
ในการรันโค้ดโหมดผู้ใช้ระบบปฏิบัติการอาจใช้คำสั่ง "return from interrupt" เพื่อรีสตาร์ทรหัสผู้ใช้ (ไม่ว่าจะมีการเริ่มต้นทางเทคนิคหรือยังไม่ได้เริ่มต้นก่อนหน้านี้ก็ไม่สำคัญ) ผลตอบแทนจากการขัดจังหวะเป็นคำสั่งประเภทหนึ่งที่เป็นวิธีหนึ่งในการเปลี่ยนระดับสิทธิ์ในขณะเดียวกันก็เปลี่ยนสตรีมคำสั่งด้วย (aka branching) คำสั่งดังกล่าวมีสิทธิพิเศษซึ่งหมายความว่าโปรเซสเซอร์จะไม่อนุญาตให้ใช้ในโหมดผู้ใช้
เมื่อโปรเซสเซอร์ได้รับอินเทอร์รัปต์โปรเซสเซอร์จะบันทึกสถานะของ CPU ที่สำคัญบางอย่าง - สถานะของ CPU ที่สำคัญคือสถานะที่จำเป็นต้องแก้ไขเพื่อให้บริการอินเตอร์รัปต์ ให้บริการการควบคุมการถ่ายโอนการขัดจังหวะของฟีดสตรีมคำสั่งไปยัง CPU โดยการแก้ไขตัวนับโปรแกรมหรือที่เรียกว่าตัวชี้คำสั่ง ในการขัดจังหวะโปรเซสเซอร์จะทำการแยกสาขาไปยังรูทีนเซอร์วิสการขัดจังหวะอย่างกะทันหัน นอกจากนี้ยังทำการเปลี่ยนโหมดอย่างกะทันหันเป็นสิทธิ์ที่สูงขึ้นเพื่อให้ ISR เข้าถึงคำแนะนำเพิ่มเติม เนื่องจากจำเป็นต้องมีการเปลี่ยนแปลงอย่างกะทันหันทั้งสองนี้เพื่อเปิดใช้งาน ISR ฮาร์ดแวร์จะบันทึกค่าก่อนหน้านี้เพื่อให้ซอฟต์แวร์ใช้ในภายหลังเมื่อเรียกคืนรหัสโหมดผู้ใช้ที่ถูกขัดจังหวะ ดังนั้นฮาร์ดแวร์และระบบปฏิบัติการจึงรวมตัวกันเพื่อเรียกใช้ระบบปฏิบัติการโดยมีสิทธิ์สูงและรหัสผู้ใช้มีสิทธิ์ต่ำ
เมื่อโปรแกรมโหมดผู้ใช้ใช้คำสั่งประเภท syscall (ร้องขอบริการระบบปฏิบัติการเช่น I / O) กลไกการยกเว้นฮาร์ดแวร์เดียวกันจะโอนการควบคุมไปยัง ISR เมื่อระบบปฏิบัติการต้องการกลับสู่กระบวนการโหมดผู้ใช้ขึ้นอยู่กับฮาร์ดแวร์อาจต้องเลื่อนตัวนับโปรแกรมของกระบวนการโหมดผู้ใช้ด้วยตนเองในคำสั่ง syscall ก่อนที่จะดำเนินการต่อ - เหมือนกับว่าในกระบวนการโหมดผู้ใช้ ระบบปฏิบัติการจำลอง / จำลองการเรียกระบบ
นอกจากนี้คำสั่ง CPU ของโปรแกรมทั้งหมดของคุณจะดำเนินการในพื้นที่หน่วยความจำเสมือนของตัวเอง โดยพื้นฐานแล้วจะปิดใช้งานคำสั่งใด ๆ ที่คุณเขียนโค้ดเพื่อเข้าถึงหรือแก้ไขข้อมูลระบบประมวลผลข้อมูลอื่น ๆ หรือข้อมูลเคอร์เนล
โดยทั่วไปคุณสามารถทำให้บ้านของคุณยุ่งได้ตามที่คุณต้องการ แต่คุณไม่สามารถมองเข้าไปในบ้านของใครก็ได้
หากคุณต้องการดำเนินการบางอย่างนอกพื้นที่ที่อยู่ของคุณคุณไม่มีทางเลือกอื่นใดนอกจากการเรียกใช้งานประจำ / บริการของระบบที่ทำเพื่อคุณ - และผู้ที่ตรวจสอบการอนุญาต / สิทธิ์ของกระบวนการของคุณ
ตามภาพด้านบนคุณต้องใช้บริการที่เชื่อถือได้หากคุณต้องการอะไรกับบ้านของคนอื่น - กิจวัตรเคอร์เนลของระบบปฏิบัติการ
คำตอบนี้จะถือว่าคุณใช้ระบบปฏิบัติการมัลติทาสกิ้งที่ทันสมัย (Windows, MacOS, Linux ฯลฯ ) บนโปรเซสเซอร์ที่รองรับฮาร์ดแวร์เฉพาะ (ARM, x86, PowerPC ฯลฯ ) มันดึงคำตอบก่อนหน้านี้โดย Erik Eidt และ Aganju
ระบบเหล่านี้ได้พัฒนาขึ้นในช่วงหลายปีที่ผ่านมาเพื่อให้มีข้อ จำกัด มากขึ้นสำหรับโปรแกรมผู้ใช้ทั่วไป
ในเครื่องดังกล่าวโปรแกรมของคุณไม่สามารถเข้าถึงหน่วยความจำกายภาพได้โดยตรง ที่อยู่หน่วยความจำทั้งหมดผ่านตัวจัดการหน่วยความจำเสมือน หากมีการจัดสรรที่อยู่เฉพาะในพื้นที่ที่อยู่ของคุณที่อยู่นั้นจะถูกจับคู่กับที่อยู่หน่วยความจำทางกายภาพ หากไม่เป็นเช่นนั้นการเข้าถึงจะล้มเหลวและสร้างกับดัก ระบบปฏิบัติการอาจยุติโปรแกรมของคุณ ตัวจัดการหน่วยความจำช่วยให้มั่นใจได้ว่าไม่มีกระบวนการใดที่สามารถทำให้หน่วยความจำของกระบวนการอื่นเสียหายได้
อุปกรณ์ฮาร์ดแวร์มักจะแมปหน่วยความจำ อีกครั้งตัวจัดการหน่วยความจำบล็อกการเข้าถึงโดยตรงใด ๆ คุณต้องเรียกคนขับมาทำแทนคุณ
มีคำแนะนำรหัสเครื่องพิเศษที่ระบบปฏิบัติการใช้ในการตั้งค่าทุกอย่างและยังใช้ไดรเวอร์อุปกรณ์ คำแนะนำเหล่านี้มีระดับสิทธิ์ที่แตกต่างกันที่จำเป็นในการเรียกใช้ เมื่อโปรแกรมของคุณเปิดตัวระบบปฏิบัติการจะถูกทำเครื่องหมายเป็นโปรแกรมผู้ใช้ซึ่งมีสิทธิ์ต่ำสุด ดังนั้นความพยายามใด ๆ ที่จะใช้คำแนะนำเหล่านั้นเพื่อแก้ไขหรือข้ามการจัดการหน่วยความจำจะถูกดักจับ อีกครั้งโปรแกรมของคุณมีแนวโน้มที่จะยุติลง