แหวนป้องกัน

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

วงแหวนสิทธิ์สำหรับx86มีให้ในโหมดป้องกัน

ในสาขาวิทยาศาสตร์คอมพิวเตอร์ , โดเมนป้องกันลำดับชั้น , [1] [2]มักจะเรียกว่าแหวนป้องกันเป็นกลไกในการป้องกันข้อมูลและการทำงานจากความผิดพลาด (โดยการปรับปรุงความอดทนความผิด ) และพฤติกรรมที่เป็นอันตราย (โดยการให้การรักษาความปลอดภัยคอมพิวเตอร์ )

ระบบปฏิบัติการคอมพิวเตอร์ให้การเข้าถึงทรัพยากรในระดับต่างๆ แหวนป้องกันเป็นหนึ่งในสองคนหรือมากกว่าลำดับชั้นระดับหรือชั้นของสิทธิพิเศษภายในสถาปัตยกรรมของที่ระบบคอมพิวเตอร์ นี้โดยทั่วไปที่ใช้กับฮาร์ดแวร์โดยบางส่วนของ CPU สถาปัตยกรรมที่ให้แตกต่างกันโหมด CPUที่ฮาร์ดแวร์หรือเฟิร์มแว ระดับ. แหวนถูกจัดเรียงในลำดับชั้นจากผู้ที่มีสิทธิ์มากที่สุด (เชื่อถือได้มากที่สุด โดยปกติแล้วจะมีเลขศูนย์) ไปจนถึงผู้ที่มีสิทธิ์น้อยที่สุด (เชื่อถือน้อยที่สุด มักจะมีหมายเลขเสียงกริ่งสูงสุด) ในระบบปฏิบัติการส่วนใหญ่ Ring 0 เป็นระดับที่มีสิทธิ์มากที่สุดและโต้ตอบโดยตรงกับฮาร์ดแวร์จริง เช่น CPU และหน่วยความจำ

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

การใช้งาน

วงแหวนป้องกันหลายวงเป็นหนึ่งในแนวคิดที่ปฏิวัติวงการมากที่สุดซึ่งนำเสนอโดยระบบปฏิบัติการMulticsซึ่งเป็นรุ่นก่อนที่มีความปลอดภัยสูงของระบบปฏิบัติการตระกูลUnixในปัจจุบันGE 645เมนเฟรมคอมพิวเตอร์ก็มีบางส่วนที่ควบคุมการเข้าถึงฮาร์ดแวร์ แต่นั่นก็ไม่เพียงพอที่จะให้การสนับสนุนอย่างเต็มที่สำหรับวงในฮาร์ดแวร์เพื่อ Multics สนับสนุนพวกเขาโดยการวางกับดักเปลี่ยนแหวนในซอฟต์แวร์[3]ผู้สืบทอดตำแหน่งHoneywell 6180นำมาใช้ในฮาร์ดแวร์ด้วยการสนับสนุนแปดวง[4]อย่างไรก็ตาม ระบบเอนกประสงค์ส่วนใหญ่ใช้เพียงวงแหวนสองวง แม้ว่าฮาร์ดแวร์ที่ใช้งานจะมีโหมด CPUมากกว่าก็ตามกว่านั้น ยกตัวอย่างเช่น Windows 7 และ Windows Server 2008 (และรุ่นก่อน ๆ ) ใช้เพียงสองแหวนแหวน 0 สอดคล้องกับโหมดเคอร์เนลและแหวน 3 โหมดผู้ใช้ , [5]เพราะ Windows รุ่นก่อนหน้าวิ่งบนตัวประมวลผลที่รองรับเพียงสองระดับการป้องกัน . [6]

สถาปัตยกรรม CPU สมัยใหม่จำนวนมาก (รวมถึงสถาปัตยกรรมIntel x86ยอดนิยม) มีรูปแบบการป้องกันวงแหวนบางรูปแบบ แม้ว่าระบบปฏิบัติการWindows NTเช่น Unix จะไม่ได้ใช้คุณลักษณะนี้อย่างเต็มที่OS/2ทำได้ในระดับหนึ่งโดยใช้วงแหวนสามวง: [7]เสียงเรียกเข้า 0 สำหรับรหัสเคอร์เนลและไดรเวอร์อุปกรณ์ แหวนที่ 2 สำหรับรหัสพิเศษ (โปรแกรมผู้ใช้ที่มีสิทธิ์การเข้าถึง I/O) และเสียงเรียกเข้า 3 สำหรับรหัสที่ไม่มีสิทธิพิเศษ (ผู้ใช้เกือบทั้งหมด โปรแกรม) ภายใต้DOSเคอร์เนล ไดรเวอร์ และแอปพลิเคชันมักจะทำงานบนวงแหวน 3 (อย่างไรก็ตาม นี่เป็นเอกสิทธิ์เฉพาะในกรณีที่ไดรเวอร์โหมดที่ได้รับการป้องกันและ/หรือตัวขยาย DOS ถูกใช้ เนื่องจากเป็นระบบปฏิบัติการโหมดจริง ระบบทำงานโดยไม่มีการป้องกันอย่างมีประสิทธิภาพ ) ในขณะที่ตัวจัดการหน่วยความจำ 386 เช่นEMM386ทำงานที่ระดับ 0 นอกจากนี้DR-DOS ' EMM386 3.xx ยังสามารถเรียกใช้บางโมดูล (เช่นDPMS ) บนวงแหวน 1 แทนได้OpenVMSใช้สี่โหมดที่เรียกว่า (ตามลำดับสิทธิ์ที่ลดลง) Kernel, Executive, Supervisor และ User

ความสนใจครั้งใหม่ในโครงสร้างการออกแบบนี้มาพร้อมกับการแพร่หลายของซอฟต์แวร์Xen VMM การอภิปรายอย่างต่อเนื่องเกี่ยวกับเสาหินกับไมโครเคอร์เนล (โดยเฉพาะในกลุ่มข่าวUsenetและฟอรัมบนเว็บ ) โครงสร้างการออกแบบRing-1ของ Microsoft ซึ่งเป็นส่วนหนึ่งของการริเริ่มNGSCBและไฮเปอร์ไวเซอร์ที่ใช้ x86 virtualizationเช่นIntel VT-x (เดิมคือ Vanderpool)

ระบบ Multics ดั้งเดิมมีแปดวง แต่ระบบสมัยใหม่จำนวนมากมีน้อยกว่า ฮาร์ดแวร์ยังคงรับรู้ถึงวงแหวนปัจจุบันของเธรดคำสั่งที่ดำเนินการตลอดเวลา ด้วยความช่วยเหลือของการลงทะเบียนเครื่องพิเศษ ในบางระบบ พื้นที่ของหน่วยความจำเสมือนจะถูกกำหนดหมายเลขเรียกเข้าในฮาร์ดแวร์แทน ตัวอย่างหนึ่งคือData General Eclipse MV/8000ซึ่งสามบิตบนสุดของตัวนับโปรแกรม (PC)ทำหน้าที่เป็นริงรีจิสเตอร์ ตัวอย่างเช่น การรันโค้ดโดยตั้งค่าพีซีเสมือนเป็น 0xE200000 จะอยู่ในวงแหวน 7 โดยอัตโนมัติ และการเรียกรูทีนย่อยในส่วนอื่นของหน่วยความจำจะทำให้เกิดการถ่ายโอนเสียงกริ่งโดยอัตโนมัติ

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

ARM  v7 สถาปัตยกรรมการดำเนินการสามระดับสิทธิพิเศษ: การประยุกต์ใช้ระบบปฏิบัติการและไฮเปอร์ไวเซอร์ โดยปกติ ระดับ 0 (PL0) เป็นระดับที่มีสิทธิ์น้อยที่สุด ในขณะที่ระดับ 2 (PL2) เป็นระดับที่มีสิทธิ์มากที่สุด (ไฮเปอร์ไวเซอร์) [8]

การป้องกันวงแหวนสามารถใช้ร่วมกับโหมดโปรเซสเซอร์ ( โหมดมาสเตอร์/เคอร์เนล/สิทธิ์พิเศษ/ ผู้ควบคุมเทียบกับโหมดทาส/ไม่มีสิทธิ์/ผู้ใช้) ในบางระบบ ระบบปฏิบัติการที่ทำงานบนฮาร์ดแวร์ที่รองรับทั้งสองรูปแบบอาจใช้การป้องกันทั้งสองรูปแบบหรือเพียงรูปแบบเดียว

การใช้สถาปัตยกรรมวงแหวนอย่างมีประสิทธิภาพต้องอาศัยความร่วมมืออย่างใกล้ชิดระหว่างฮาร์ดแวร์และระบบปฏิบัติการ[ ทำไม? ] . ระบบปฏิบัติการที่ออกแบบมาให้ทำงานบนแพลตฟอร์มฮาร์ดแวร์หลายตัวอาจใช้วงแหวนได้จำกัดเท่านั้น หากไม่มีอยู่ในทุกแพลตฟอร์มที่รองรับ บ่อยครั้งที่รูปแบบการรักษาความปลอดภัยถูกทำให้ง่ายขึ้นเป็น "เคอร์เนล" และ "ผู้ใช้" แม้ว่าฮาร์ดแวร์จะให้รายละเอียดที่ละเอียดกว่าผ่านวงแหวนก็ตาม

โหมด

โหมดหัวหน้างาน

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

โหมดหัวหน้างานคือ "โหมดการดำเนินการบนโปรเซสเซอร์บางตัวซึ่งช่วยให้สามารถดำเนินการคำสั่งทั้งหมด รวมทั้งคำสั่งพิเศษ นอกจากนี้ยังอาจให้การเข้าถึงพื้นที่ที่อยู่อื่น ฮาร์ดแวร์การจัดการหน่วยความจำ และอุปกรณ์ต่อพ่วงอื่น ๆ ซึ่งเป็นโหมดที่ระบบปฏิบัติการ มักจะวิ่ง” [9]

ในเคอร์เนลเสาหินระบบปฏิบัติการจะทำงานในโหมดผู้ดูแลและแอปพลิเคชันจะทำงานในโหมดผู้ใช้ ระบบปฏิบัติการประเภทอื่นๆเช่นเดียวกับที่มีexokernelหรือmicrokernelไม่จำเป็นต้องมีพฤติกรรมเช่นนี้

ตัวอย่างบางส่วนจากโลกพีซี:

  • Linux , macOSและWindowsเป็นระบบปฏิบัติการสามระบบที่ใช้โหมดหัวหน้า/ผู้ใช้ ในการใช้งานฟังก์ชันพิเศษ โค้ดโหมดผู้ใช้ต้องทำการเรียกระบบเข้าสู่โหมดผู้ควบคุม หรือแม้แต่พื้นที่เคอร์เนลที่โค้ดที่เชื่อถือได้ของระบบปฏิบัติการจะทำงานที่จำเป็นและส่งคืนการดำเนินการกลับไปยังพื้นที่ผู้ใช้ คุณสามารถเพิ่มโค้ดเพิ่มเติมลงในพื้นที่เคอร์เนลได้โดยใช้โมดูลเคอร์เนลที่โหลดได้แต่โดยผู้ใช้ที่มีสิทธิ์ที่จำเป็นเท่านั้น เนื่องจากโค้ดนี้ไม่อยู่ภายใต้การควบคุมการเข้าถึงและข้อจำกัดด้านความปลอดภัยของโหมดผู้ใช้
  • DOS (ตราบใดที่ไม่มีการโหลดตัวจัดการหน่วยความจำ 386 เช่นEMM386 ) รวมถึงระบบปฏิบัติการทั่วไปอื่นๆ และอุปกรณ์ฝังตัวจำนวนมากที่ทำงานในโหมดผู้ดูแลอย่างถาวร หมายความว่าสามารถเขียนไดรเวอร์โดยตรงเป็นโปรแกรมผู้ใช้

โปรเซสเซอร์ส่วนใหญ่มีโหมดที่แตกต่างกันอย่างน้อยสองโหมด x86 -processors ได้สี่โหมดที่แตกต่างกันแบ่งออกเป็นสี่แหวนที่แตกต่างกัน โปรแกรมที่ทำงานใน Ring 0 สามารถทำอะไรกับระบบได้ และโค้ดที่ทำงานใน Ring 3 ควรจะล้มเหลวได้ทุกเมื่อโดยไม่กระทบต่อส่วนที่เหลือของระบบคอมพิวเตอร์ วงแหวน 1 และวงแหวน 2 ไม่ค่อยได้ใช้ แต่สามารถกำหนดค่าได้ด้วยระดับการเข้าถึงที่แตกต่างกัน

ในระบบที่มีอยู่ส่วนใหญ่ การเปลี่ยนจากโหมดผู้ใช้เป็นโหมดเคอร์เนลมีค่าใช้จ่ายสูงในด้านประสิทธิภาพ มีการวัดค่าตามคำร้องขอพื้นฐานgetpidว่ามีราคา 1,000–1500 รอบสำหรับเครื่องจักรส่วนใหญ่ ในจำนวนนี้มีเพียง 100 รายการสำหรับสวิตช์จริง (70 จากผู้ใช้ไปยังพื้นที่เคอร์เนลและ 40 หลัง) ส่วนที่เหลือคือ "โอเวอร์เฮดเคอร์เนล" [10] [11]ในไมโครเคอร์เนล L3การลดค่าใช้จ่ายนี้ทำให้ต้นทุนโดยรวมลดลงเหลือประมาณ 150 รอบ [10]

มอริซ วิลค์สเขียน: [12]

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

เพื่อให้ได้ประสิทธิภาพและความมุ่งมั่น ระบบบางระบบจะวางฟังก์ชันที่น่าจะมองว่าเป็นตรรกะของแอปพลิเคชัน แทนที่จะเป็นไดรเวอร์อุปกรณ์ในโหมดเคอร์เนล การใช้งาน (การรักษาความปลอดภัยการควบคุมการเข้าถึง , ไฟร์วอลล์ , ฯลฯ ) และระบบปฏิบัติการตรวจสอบจะอ้างเป็นตัวอย่าง ระบบจัดการฐานข้อมูลแบบฝังอย่างน้อยหนึ่งระบบe X treme DB Kernel Modeได้รับการพัฒนาโดยเฉพาะสำหรับการปรับใช้โหมดเคอร์เนล เพื่อจัดเตรียมฐานข้อมูลในเครื่องสำหรับฟังก์ชันแอปพลิเคชันที่ใช้เคอร์เนล และเพื่อขจัดการสลับบริบทที่จะเกิดขึ้นเมื่อฟังก์ชันเคอร์เนลโต้ตอบ ด้วยระบบฐานข้อมูลที่ทำงานในโหมดผู้ใช้[13]

บางครั้งฟังก์ชันต่างๆ ก็ถูกย้ายข้ามวงแหวนไปในทิศทางอื่นด้วย ตัวอย่างเช่น เคอร์เนลของลินุกซ์ แทรกส่วนvDSOในกระบวนการซึ่งมีฟังก์ชันที่ปกติจะต้องมีการเรียกระบบ เช่น การเปลี่ยนเสียงกริ่ง แต่แทนที่จะทำ syscall ฟังก์ชันเหล่านี้ใช้ข้อมูลสแตติกที่เคอร์เนลให้มา ซึ่งป้องกันความจำเป็นในการเปลี่ยนเสียงกริ่งซึ่งมีน้ำหนักเบากว่า syscall ฟังก์ชั่น gettimeofday สามารถจัดเตรียมได้ด้วยวิธีนี้

โหมดไฮเปอร์ไวเซอร์

CPU ล่าสุดจาก Intel และ AMD เสนอคำแนะนำการจำลองเสมือน x86สำหรับไฮเปอร์ไวเซอร์เพื่อควบคุมการเข้าถึงฮาร์ดแวร์ Ring 0 แม้ว่าจะเข้ากันไม่ได้ทั้งIntel VT-x (ชื่อรหัสว่า "Vanderpool") และAMD-V (ชื่อรหัสว่า "Pacifica") จะสร้าง "Ring -1" ใหม่เพื่อให้ระบบปฏิบัติการของแขกสามารถเรียกใช้การทำงาน Ring 0 ได้โดยไม่กระทบต่ออื่นๆ แขกหรือระบบปฏิบัติการโฮสต์

เพื่อช่วยเหลือการจำลองเสมือน VT-x และ SVM จะแทรกระดับสิทธิ์การใช้งานใหม่ภายใต้ Ring 0 ทั้งสองเพิ่มคำสั่งรหัสเครื่องใหม่เก้าคำสั่งที่ทำงานเฉพาะที่ "Ring -1" ซึ่งมีไว้สำหรับไฮเปอร์ไวเซอร์เท่านั้น [14]

ระดับสิทธิ์

ระดับสิทธิ์ในx 86 ชุดคำสั่งควบคุมการเข้าถึงของโปรแกรมที่กำลังทำงานอยู่บนหน่วยประมวลผลไปยังแหล่งข้อมูลเช่นพื้นที่หน่วยความจำ, I / O พอร์ตและคำสั่งพิเศษ มี 4 ระดับสิทธิ์ตั้งแต่ 0 ซึ่งเป็นสิทธิพิเศษสูงสุด 3 ระดับที่ได้รับสิทธิพิเศษน้อยที่สุด ระบบปฏิบัติการสมัยใหม่ส่วนใหญ่ใช้ระดับ 0 สำหรับเคอร์เนล/ผู้บริหาร และใช้ระดับ 3 สำหรับโปรแกรมแอปพลิเคชัน ทรัพยากรใดๆ ที่มีให้ถึงระดับ n ก็มีให้สำหรับระดับ 0 ถึง n ด้วย ดังนั้นระดับของสิทธิ์พิเศษจึงดังกึกก้อง เมื่อกระบวนการที่มีสิทธิพิเศษน้อยกว่าพยายามเข้าถึงกระบวนการที่มีสิทธิพิเศษสูงกว่าจะมีการรายงานข้อยกเว้นข้อผิดพลาดในการป้องกันทั่วไปไปยังระบบปฏิบัติการ

ไม่จำเป็นต้องใช้สิทธิ์ทั้งสี่ระดับระบบปฏิบัติการปัจจุบันที่มีส่วนแบ่งตลาดกว้างๆ ซึ่งรวมถึงMicrosoft Windows , macOS , Linux , iOSและAndroidส่วนใหญ่ใช้กลไกการเพจที่มีเพียงบิตเดียวเพื่อระบุระดับสิทธิ์เป็น Supervisor หรือ User (U/S Bit) Windows NTใช้ระบบสองระดับ[15] โปรแกรมโหมดจริงใน 8086 ทำงานที่ระดับ 0 (ระดับสิทธิ์สูงสุด) ในขณะที่โหมดเสมือนใน 8086 เรียกใช้โปรแกรมทั้งหมดที่ระดับ 3 [16]

การใช้งานในอนาคตที่มีศักยภาพสำหรับระดับสิทธิพิเศษหลายการสนับสนุนจากครอบครัว x86 ISA ได้แก่containerizationและเสมือนเครื่อง เคอร์เนลระบบปฏิบัติการโฮสต์สามารถใช้คำแนะนำด้วยการเข้าถึงสิทธิ์แบบเต็ม ( โหมดเคอร์เนล ) ในขณะที่แอปพลิเคชันที่ทำงานบนระบบปฏิบัติการแขกในเครื่องเสมือนหรือคอนเทนเนอร์สามารถใช้สิทธิ์ระดับต่ำสุดในโหมดผู้ใช้ เครื่องเสมือนและเคอร์เนล OS ของแขกสามารถใช้สิทธิ์คำสั่งระดับกลางเพื่อเรียกใช้และจำลองการทำงานของโหมดเคอร์เนลเสมือนเช่น การเรียกระบบจากมุมมองของระบบปฏิบัติการแขก [17]

IOPL

IOPL ( I / O ระดับ Privilege ) ธงธงที่พบในทุก IA-32 ที่รองรับซีพียู x86 หมกมุ่นอยู่กับมันบิตที่ 12 และ 13 ในธงลงทะเบียน ในโหมดป้องกันและโหมดยาวจะแสดงระดับสิทธิ์ I/O ของโปรแกรมหรืองานปัจจุบัน สิทธิประโยชน์ปัจจุบันระดับ (CPL) (CPL0, CPL1, CPL2, CPL3) ของงานหรือโปรแกรมต้องน้อยกว่าหรือเท่ากับ IOPL เพื่อให้งานหรือโปรแกรมที่จะเข้าถึงI / O พอร์ต

IOPL สามารถเปลี่ยนแปลงได้โดยใช้POPF(D)และIRET(D)เฉพาะเมื่อระดับสิทธิ์ปัจจุบันคือ Ring 0

นอกจาก IOPL แล้วสิทธิ์พอร์ต I/Oใน TSS ยังมีส่วนร่วมในการกำหนดความสามารถของงานในการเข้าถึงพอร์ต I/O

อื่นๆ

ในระบบ x86 การจำลองเสมือนของฮาร์ดแวร์ x86 ( VT-xและSVM ) เรียกว่า "ring -1" โหมดการจัดการระบบเรียกว่า "ring -2" บางครั้งIntel Management EngineและAMD Platform Security Processorจะเรียกว่า "แหวน -3" [18]

การใช้คุณสมบัติฮาร์ดแวร์

สถาปัตยกรรมฮาร์ดแวร์ของ CPU จำนวนมากมีความยืดหยุ่นมากกว่าระบบปฏิบัติการที่ใช้งานได้ตามปกติ การใช้โหมด CPU ที่ซับซ้อนอย่างเหมาะสมต้องอาศัยความร่วมมืออย่างใกล้ชิดระหว่างระบบปฏิบัติการและ CPU ดังนั้นจึงมีแนวโน้มที่จะเชื่อมโยง OS กับสถาปัตยกรรม CPU เมื่อ OS และ CPU ได้รับการออกแบบมาโดยเฉพาะสำหรับกันและกัน นี่ไม่ใช่ปัญหา (แม้ว่าคุณลักษณะของฮาร์ดแวร์บางอย่างอาจยังไม่ได้ถูกใช้งาน) แต่เมื่อ OS ได้รับการออกแบบให้เข้ากันได้กับสถาปัตยกรรม CPU ที่หลากหลายและแตกต่างกัน ส่วนใหญ่ของ คุณลักษณะของโหมด CPU อาจถูกละเว้นโดยระบบปฏิบัติการ ตัวอย่างเช่น เหตุผลที่ Windows ใช้เพียงสองระดับ (ring 0 และ ring 3) คือสถาปัตยกรรมฮาร์ดแวร์บางตัวที่ได้รับการสนับสนุนในอดีต (เช่นPowerPCหรือMIPS) ดำเนินการเพียงสองระดับสิทธิ์ [5]

Multicsเป็นระบบปฏิบัติการที่ออกแบบมาโดยเฉพาะสำหรับสถาปัตยกรรม CPU พิเศษ (ซึ่งได้รับการออกแบบมาโดยเฉพาะสำหรับ Multics) และใช้ประโยชน์จากโหมด CPU ที่มีอยู่อย่างเต็มที่ อย่างไรก็ตาม มันเป็นข้อยกเว้นสำหรับกฎ ในปัจจุบัน การทำงานร่วมกันในระดับสูงระหว่างระบบปฏิบัติการและฮาร์ดแวร์มักจะไม่คุ้มค่า แม้ว่าจะมีข้อได้เปรียบด้านความปลอดภัยและความเสถียรก็ตาม

ในท้ายที่สุด วัตถุประสงค์ของโหมดการทำงานที่แตกต่างกันสำหรับ CPU คือเพื่อให้การป้องกันฮาร์ดแวร์จากการทุจริตโดยไม่ได้ตั้งใจหรือโดยเจตนาของสภาพแวดล้อมของระบบ (และการละเมิดความปลอดภัยของระบบที่เกี่ยวข้อง) โดยซอฟต์แวร์ เฉพาะส่วนที่ "เชื่อถือได้" ของซอฟต์แวร์ระบบเท่านั้นที่ได้รับอนุญาตให้ดำเนินการในสภาพแวดล้อมที่ไม่จำกัดของโหมดเคอร์เนล จากนั้น ในการออกแบบกระบวนทัศน์ เฉพาะเมื่อจำเป็นเท่านั้น ซอฟต์แวร์อื่นๆ ทั้งหมดทำงานในโหมดผู้ใช้อย่างน้อยหนึ่งโหมด หากโปรเซสเซอร์สร้างความผิดปกติหรือเงื่อนไขข้อยกเว้นในโหมดผู้ใช้ ในกรณีส่วนใหญ่ความเสถียรของระบบจะไม่ได้รับผลกระทบ หากโปรเซสเซอร์สร้างข้อบกพร่องหรือเงื่อนไขข้อยกเว้นในโหมดเคอร์เนล ระบบปฏิบัติการส่วนใหญ่จะหยุดระบบด้วยข้อผิดพลาดที่ไม่สามารถกู้คืนได้ เมื่อมีลำดับชั้นของโหมด (การรักษาความปลอดภัยแบบวงแหวน)ข้อผิดพลาดและข้อยกเว้นที่ระดับสิทธิ์หนึ่งอาจทำให้ระดับสิทธิ์ที่มีหมายเลขสูงกว่าไม่เสถียรเท่านั้น ดังนั้น ข้อผิดพลาดใน Ring 0 (โหมดเคอร์เนลที่มีสิทธิ์สูงสุด) จะทำให้ทั้งระบบขัดข้อง แต่ข้อผิดพลาดใน Ring 2 จะมีผลกับ Rings 3 ขึ้นไป และ Ring 2 เท่านั้น อย่างมากที่สุด

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

ระบบปฏิบัติการMicrokernelพยายามลดจำนวนโค้ดที่ทำงานในโหมดสิทธิพิเศษให้เหลือน้อยที่สุด เพื่อความปลอดภัยและความสง่างามแต่ท้ายที่สุดก็เสียสละประสิทธิภาพ

ดูเพิ่มเติม

อ้างอิง

  1. ^ Karger, พอล .; เฮอร์เบิร์ต, แอนดรูว์ เจ. (1984). "สถาปัตยกรรมความสามารถที่เพิ่มขึ้นเพื่อรองรับความปลอดภัยของ Lattice และการตรวจสอบย้อนกลับของการเข้าถึง" 1984 IEEE ประชุมวิชาการเกี่ยวกับการรักษาความปลอดภัยและความเป็นส่วนตัว NS. 2. ดอย : 10.1109/SP.1984.110001 . ISBN 0-8186-0532-4. S2CID  14788823 .
  2. ^ Binder, W. (2001). "การออกแบบและการใช้งานเคอร์เนลตัวแทนเคลื่อนที่ J-SEAL2" Proceedings 2001 Symposium on Applications และ Internet . น. 35–42. ดอย : 10.1109/SAINT.2001.905166 . ISBN 0-7695-0942-8. S2CID  11066378 .
  3. ^ "เป็นสถาปัตยกรรมฮาร์ดแวร์สำหรับแหวนคุ้มครองการดำเนินการ" สืบค้นเมื่อ27 กันยายน 2555 .
  4. ^ "อภิธานศัพท์ Multics - แหวน" . สืบค้นเมื่อ27 กันยายน 2555 .
  5. ^ Russinovich มาร์ค E .; เดวิด เอ. โซโลมอน (2005). Microsoft Windows Internals (4 ed.) ไมโครซอฟต์ เพรส น.  16 . ISBN 978-0-7356-1917-3.
  6. ^ Russinovich มาร์ค (2012) ของ Windows Internals Part 1 6 เอ็ด เรดมอนด์ วอชิงตัน: ​​สำนักพิมพ์ของไมโครซอฟท์ NS. 17. ISBN 978-0-7356-4873-9. เหตุผลที่ Windows ใช้เพียงสองระดับคือสถาปัตยกรรมฮาร์ดแวร์บางตัวที่ได้รับการสนับสนุนในอดีต (เช่นCompaq AlphaและSilicon Graphics MIPS ) ใช้สิทธิ์เพียงสองระดับเท่านั้น
  7. ^ "การนําเสนออ้างอิง Device Driver สำหรับ OS / 2 - 5. รู้เบื้องต้นเกี่ยวกับระบบปฏิบัติการไดรเวอร์ / 2 นำเสนอ" เก็บถาวรจากต้นฉบับเมื่อ 15 มิถุนายน 2558 . สืบค้นเมื่อ13 มิถุนายน 2558 .
  8. ^ "ARM Architecture 3.3.4: ระดับสิทธิ์"
  9. ^ "โหมดหัวหน้างาน" . โฟลด์ค . 15 กุมภาพันธ์ 1995.
  10. ^ a b Jochen Liedtke . เกี่ยวกับ µ-Kernel Construction , Proc. การประชุมวิชาการ ACM ครั้งที่ 15 เรื่องหลักการระบบปฏิบัติการ (SOSP)ธันวาคม 2538
  11. ^ Outerhout, JK 1990.เหตุใดระบบปฏิบัติการจึงไม่เร็วเท่าฮาร์ดแวร์? ใน Usenix Summer Conference, Anaheim, CA, หน้า 247–256
  12. มอริซ วิลค์ส (เมษายน 1994) "ระบบปฏิบัติการในโลกที่เปลี่ยนแปลง". ACM SIGOPS รีวิวระบบปฏิบัติการ 28 (2): 9–21. ดอย : 10.1145/198153.198154 . ISSN 0163-5980 . S2CID 254134 .  
  13. ^ Gorine อังเดรและ Krivolapov, อเล็กซานเด "ฐานข้อมูลโหมดเคอร์เนล: เทคโนโลยี DBMS สำหรับการใช้งานที่มีประสิทธิภาพสูง" , Dr. Dobb's Journal , พฤษภาคม 2008
  14. ^ ดอร์แนน, แอนดี้ (1 พฤศจิกายน 2548) "Intel VT กับ AMD Pacifica" . ซีเอ็มพี เก็บถาวรจากต้นฉบับเมื่อ 30 พฤษภาคม 2556 . สืบค้นเมื่อ11 พฤศจิกายน 2555 .
  15. ^ Russinovich มาร์ค E .; เดวิด เอ. โซโลมอน (2005). Microsoft Windows Internals (4 ed.) ไมโครซอฟต์ เพรส หน้า 16. ISBN 978-0-7356-1917-3 
  16. ^ Sunil Mathur "ไมโครโปรเซสเซอร์ 8086: สถาปัตยกรรม การเขียนโปรแกรมและการเชื่อมต่อ", Eastern Economy Edition, PHI Learning
  17. ^ แอนเดอร์สัน โธมัส; ดาห์ลิน, ไมเคิล (21 สิงหาคม 2014). "2.2" ระบบปฏิบัติการ: หลักการและการปฏิบัติ (ฉบับที่ 2) หนังสือแบบเรียกซ้ำ ISBN 978-0985673529.
  18. ^ Gelas โจฮานเดอ "การจำลองเสมือนของฮาร์ดแวร์: ถั่วและสลักเกลียว" . www.anandtech.com . สืบค้นเมื่อ13 มีนาคม 2021 .
  • ข้อมูลอ้างอิงของโปรแกรมเมอร์ Intel 80386

อ่านเพิ่มเติม