ภาษา :
SWEWE สมาชิก :เข้าสู่ระบบ |การลงทะเบียน
ค้นหา
ชุมชนวิกิพีเดีย |คำตอบสารานุกรม |ส่งคำถาม |ความรู้คำศัพท์ |อัปโหลดความรู้
ก่อน 1 ต่อไป เลือกหน้า

โหมดป้องกัน

ป้องกันโหมด (โหมดป้องกันหรือบางครั้งย่อว่า pmode) เป็นโหมดการทำงานที่เข้ากันได้ x86 CPU และหลังจากที่ชุด 80286 โหมดป้องกันมีคุณสมบัติใหม่บางส่วนได้รับการออกแบบเพื่อเพิ่มมัลติทาสกิ้งและความมั่นคงของระบบเช่นการป้องกันหน่วยความจำระบบเพจและการสนับสนุนฮาร์ดแวร์สำหรับหน่วยความจำเสมือน ส่วนใหญ่ของระบบปฏิบัติการ x86 ปัจจุบันทำงานในโหมดการป้องกันรวมถึงลินุกซ์, FreeBSD, และ Microsoft Windows 2.0 และรุ่นที่ใหม่กว่าภาพรวม

โหมดป้องกันและสอดคล้องกับโหมดจริง ในหน้าที่ 80286, CPU เพียงโหมดจริงรถที่อยู่ 20 และที่อยู่หน่วยความจำคือ 16 ซึ่งเป็นความสามารถที่จะเข้าถึงได้ถึง 2 ^ 20 = 1M พื้นที่หน่วยความจำ ใน 80286 และต่อมาอยู่หน่วยความจำที่จะ 16 หรือ 32 อย่างน้อยคุณสามารถเข้าถึง 2 ^ 32 = พื้นที่หน่วยความจำ 4G แต่ในการสั่งซื้อเพื่อให้แน่ใจว่าซีพียูติดตามความสามารถในการทำงานของซีพียูเก่าเท่านั้นที่สามารถรักษาความเข้ากันได้ย้อนหลัง ดังนั้น 80286 CPU แรกและต่อมาเข้าสู่โหมดจริงโหมดป้องกันและจากนั้นป้อนผ่านทางกลไกการเปลี่ยน

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

8086/8088 ครั้งมีเพียงหนึ่งรูปแบบของการดำเนินการประมวลผล (โหมดการทำงาน) แล้วเนื่องจากไม่มีโหมดการดำเนินงานอื่น ๆ ดังนั้นโหมดนี้ไม่ได้ที่จะมีชื่อ ตั้งแต่จุดเริ่มต้นของ 80,286-80,386 ประมวลผลเพิ่มอีกสองโหมดของการดำเนิน - โหมดป้องกัน น. (โหมดป้องกัน) และระบบการจัดการโหมด SMM (โหมดระบบการจัดการ) ดังนั้น 8086/8088 รุ่นที่ถูกเสนอชื่อเป็นที่อยู่ของโหมด RM จริง ( โหมดที่อยู่ที่แท้จริง)

PM เป็นโหมดพื้นเมืองของโปรเซสเซอร์ในโหมดนี้โปรเซสเซอร์สนับสนุนคำสั่งและทุกลักษณะโครงสร้างของระบบที่ให้ประสิทธิภาพสูงสุดและเข้ากันได้ สำหรับการใช้งานใหม่และระบบการดำเนินงานที่นำเสนอการใช้งานโหมดนี้ เพื่อให้แน่ใจว่าการทำงานร่วมกัน PM โปรเซสเซอร์ RM ช่วยให้โปรแกรมดำเนินการในการป้องกันสภาพแวดล้อมการทำงานหลาย คุณลักษณะนี้จะเรียกว่าเสมือน 8086 โหมด (Virtual -8086 โหมด) แม้ว่ามันจะไม่ได้เป็นโหมดการประมวลผลจริง โหมดเสมือน 8086 เป็นจริงสถานที่ให้บริการ PM ของงานใดสามารถใช้งานได้

RM มีสภาพแวดล้อมการเขียนโปรแกรมประมวลผล Intel 8086 ในขณะที่มีบางส่วนขยาย (เช่นความสามารถในการสลับไปยัง PM หรือ SMM) เมื่อโฮสต์เป็นไฟขึ้นหรือรีเซ็ตประมวลผลอยู่ภายใต้ RM

SMM เป็นลักษณะโครงสร้างมาตรฐานของโปรเซสเซอร์อินเทลเป็นปึกแผ่นระบบ ปรากฏอยู่ในชิป Intel386 SL โหมดนี้จะมีการระบุฟังก์ชั่นการใช้งานแพลตฟอร์มระบบปฏิบัติการ (เช่นการจัดการพลังงานหรือระบบรักษาความปลอดภัย) ให้เป็นกลไกที่โปร่งใส เมื่อขา SMM ขัดจังหวะภายนอก (SMI #) ถูกเปิดใช้งานหรือ SMI ที่ได้รับจาก APIC (การเขียนโปรแกรมขั้นสูงควบคุมการขัดจังหวะ) หน่วยประมวลผลจะเข้าสู่ SMM ใน SMM, โปรแกรมที่กำลังทำงานอยู่เมื่อคุณบันทึกทั้งบริบท (Context) หน่วยประมวลผลจะเปลี่ยนไปช่องว่างที่อยู่ที่แยกต่างหาก รหัส SMM ก็อาจจะได้รับมอบหมายดำเนินการที่โปร่งใส เมื่อกลับมาจาก SMM, หน่วยประมวลผลจะกลับไปที่รัฐโดยการจัดการระบบการขัดจังหวะก่อน

ตั้งแต่เครื่องหลังจาก Power-ขึ้นหรือรีเซ็ตประมวลผลเป็นรัฐ RM, และ Intel 80386 และชิปต่อมาใช้เฉพาะ PM ในการเล่นบทบาทที่ใหญ่ที่สุด ดังนั้นเราจะต้องเจอกับสวิทช์จาก RM เป็นประเด็น PM

บทความนี้ไม่ได้หารือเกี่ยวกับ SMM ส่วนนี้จะเน้นเกี่ยวกับวิธีการที่จะเปลี่ยนขั้นตอนการบูตจาก RM เพื่อ น. สนทนาที่นี่ไม่มากเกินไป PM รายละเอียดเพราะ "Intel สถาปัตยกรรมซอฟต์แวร์ของนักพัฒนาปริมาณคู่มือ 3: ระบบการเขียนโปรแกรม" ในรายละเอียดมากและ อธิบายที่ถูกต้อง

ทั่วโลก Descriptor Table (GDT ทั่วโลก Descriptor ตาราง): ในโหมดป้องกันโครงสร้างข้อมูลที่สำคัญเป็นสิ่งจำเป็น GDT (Global Descriptor ตาราง)

ทำไมจึงควร GDT? ก่อนอื่นเราต้องพิจารณาภายใต้โหมดจริงรูปแบบการเขียนโปรแกรม:

ในโหมดจริงเราสามารถเข้าถึงหน่วยความจำที่อยู่โดยส่วน: Offset วิธีการที่อยู่ส่วนฐานเป็นส่วนที่ยาวสูงสุดของส่วน 64 กิโลไบต์ซึ่งเป็นระบบ 16 บิตสามารถแสดง ความยาวสูงสุด Offset จะสัมพันธ์กับส่วนนี้อยู่ฐานชดเชย ฐานที่อยู่ Offset ที่อยู่หน่วยความจำที่แน่นอน ดังนั้นเราจึงสามารถมองเห็นส่วนที่มีสองปัจจัยที่อยู่ฐานและขีด จำกัด (ความยาวส่วนสูงสุด), การเข้าถึงที่อยู่หน่วยความจำก็เป็นที่น่าสังเกต: ส่วนไหน เช่นเดียวกับที่เมื่อเทียบกับส่วนนี้ของที่อยู่ฐาน Offset, Offset ควรจะน้อยกว่าวงเงินส่วนนี้ แน่นอนว่าสำหรับระบบ 16 บิต จำกัด ไม่ได้ระบุค่าเริ่มต้นคือความยาวสูงสุดของ 64KB ในขณะที่ 16 บิต Offset ไม่สามารถมีขนาดใหญ่กว่าขีด จำกัด การเขียนโปรแกรมที่เกิดขึ้นจริงของเราใช้ส่วน 16 บิตที่ลงทะเบียน CS (ส่วน Code), DS (ข้อมูล Segment), เอสเอส (กอง Segment) เพื่อระบุส่วนซีพียูจะได้รับการชดเชยส่วนที่เหลือค่าลงทะเบียนใน 4 บิตใส่ ที่อยู่ 20 บิต 20 บิตออนไลน์ได้กลายเป็นที่อยู่ฐาน

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

ดังนั้นเราจะไม่พิจารณาโหมดหน้าแรก สำหรับรูปแบบส่วนในแง่ของการเข้าถึงที่อยู่หน่วยความจำยังคงใช้ส่วน: Offset วิธีนี้เป็นธรรมชาติมาก เนื่องจากปัจจัยทั้งสองโหมดป้องกันรันบนระบบ 32 บิตส่วนของ: ที่อยู่ฐานและ จำกัด นอกจากนี้ยังมี 32 บิต IA-32 ช่วยให้ที่อยู่ฐานที่ถูกกำหนดเป็นค่าของส่วนคนใดคนหนึ่งสามารถแสดงโดย 32 บิต (จำกัด สามารถตั้งค่าใดค่า 32 บิตที่สามารถแสดงได้หลายรายการ 2 ^ 12) ซึ่งแตกต่างจาก โหมดจริงภายใต้ที่อยู่ฐานเพียงส่วนหนึ่งที่หลาย ๆ คนจาก 16 (เพราะ 4 บิตการดำเนินการเปลี่ยนแปลงที่เหลือต่ำที่ผ่านมาเพียงเพื่อที่จะ 0 เพื่อที่จะใช้ 16 บิตลงทะเบียนส่วน 20 บิตที่อยู่ฐานกล่าวว่า จุดประสงค์) และวงเงินส่วนที่เป็นค่าคงที่เพียง 64 กิโลไบต์ นอกจากนี้โหมดป้องกันเป็นชื่อที่มีความหมายจะให้ความคุ้มครองสำหรับโหมดส่วนยังกล่าวจำเป็นที่จะต้องบอกส่วนเพื่อให้สามารถเข้าถึงของพวกเขาเอง (Access) ดังนั้นภายใต้โหมดป้องกันคำอธิบายของส่วนรวมถึงปัจจัยที่สาม: [ฐานอยู่ จำกัด การเข้าถึง] ร่วมกันพวกเขาจะอยู่ใน 64 บิตระยะเวลาในโครงสร้างข้อมูลที่เรียกว่าบ่งส่วน . ในกรณีนี้ถ้าเราโดยตรงผ่านบ่งส่วน 64 บิตหมายถึงส่วนของเวลาที่คุณต้องใช้ส่วน 64 บิตลงทะเบียนจะเต็มไปด้วยการอธิบายส่วนที่ยาว แต่อินเทลเพื่อรักษาความเข้ากันได้ย้อนหลังการลงทะเบียนส่วนที่ระบุไว้ยังคงเป็น 16 บิต (แม้จะมีความเป็นจริงมีส่วนต่อการลงทะเบียนส่วน 64 บิตยาวจะมองไม่เห็น แต่สำหรับโปรแกรมเมอร์ส่วนการลงทะเบียนเป็น 16 บิต ) แล้วจะเห็นได้ชัดว่าเราไม่สามารถส่งผ่านความยาวของส่วนทะเบียน 16 บิตเป็น 64 บิตอ้างอิงโดยตรงไปยังบ่งส่วน

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

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

GDT เป็นโหมดป้องกันโครงสร้างข้อมูลที่จำเป็นเท่านั้น - ไม่ควรและไม่สามารถมีมากกว่าหนึ่ง ต่อไปเช่นเดียวกับชื่อของมัน (Global Descriptor ตาราง) เผยให้เห็นว่ามันเป็นสิ่งที่มองเห็นได้ทั่วโลกเพื่อวัตถุประสงค์ในการได้รับการดังกล่าวที่ใดงานหนึ่ง

นอกจาก GDT, IA-32 ยังช่วยให้โปรแกรมเมอร์ที่จะสร้างโครงสร้างข้อมูลที่คล้ายกับ GDT ที่พวกเขาจะเรียกว่า LDT (ตาราง Descriptor ท้องถิ่น) แต่แตกต่างกันคือ GDT, LDT สามารถอยู่ในหลายระบบและจาก LDT ชื่อนี้สามารถเรียนรู้ LDT ไม่สามารถมองเห็นทั่วโลกพวกเขาเป็นเพียงการอ้างอิงปรากฏให้งานของพวกเขาและงานแต่ละคนสามารถมีได้ถึง LDT นอกจากนี้แต่ละส่วน LDT ตัวเองเป็นปัจจุบันพวกเขาจะอยู่ในส่วนอธิบายใน GDT

IA-32 สำหรับรายการที่อยู่ LDT นอกจากนี้ยังมีการลงทะเบียน LDTR เพราะในช่วงเวลาเพียงหนึ่งงานที่จะทำงานใด ๆ ดังนั้น LDT ก็เป็นเพียงแค่ที่จะมีการลงทะเบียนทั่วโลก ถ้างานมี LDT ของตัวเองจากนั้นเมื่อจะต้องมีการอ้างอิง LDT ของตัวเองก็จะต้องโดย LLDT LDT บ่งติดส่วนการลงทะเบียนนี้ คำสั่งและการสอน LLDT LGDT จะแตกต่างกัน LGDT ถูกดำเนินการเรียนการสอนที่เป็นหน่วยความจำที่อยู่ 32 บิตที่อยู่หน่วยความจำจะถูกเก็บไว้ใน 32 บิตที่อยู่ GDT รายการเป็น 16 บิต GDT จำกัด ตัวถูกดำเนินการเรียนการสอน LLDT เป็น 16 บิตย่อยเลือกเนื้อหาหลักของการเลือกย่อยนี้ส่วน LDT บอกจะโหลดลงในค่าดัชนีใน GDT ใน - และนี่คือส่วนการลงทะเบียนเพียงแค่กล่าวโดยอ้างอิงถึง ส่วนรูปแบบจะเหมือนกัน

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

GDT และส่วน LDT อ้างอิงในส่วนที่บ่งอธิบายผ่านโครงสร้างข้อมูล 16 บิตเพื่อให้บรรลุโครงสร้างข้อมูลนี้เรียกว่าตัวเลือกส่วน - ส่วนที่เลือก สูง 13 เป็นส่วนบ่งอ้างอิงใน GDT / LDT ดัชนีห้อย, บิตที่ 2 จะใช้ในการระบุบ่งส่วนที่อ้างถึงจะอยู่ใน GDT หรือ LDT ในบิต 0 และบิต 1 RPL- - ระดับสิทธิ์การร้องขอถูกใช้เพื่อให้การป้องกันที่เราไม่ได้หารือในรายละเอียดที่นี่

ลงทะเบียนส่วนภาระตามที่กล่าวไว้ก่อนหน้านี้ GDT / ดัชนี LDT เป็นตัวเลือกส่วนเมื่อคุณต้องการที่จะอ้างอิงอยู่หน่วยความจำที่ใช้ยังคงเป็นส่วนโหมด Offset การดำเนินการเฉพาะคือในส่วนของการลงทะเบียนที่เกี่ยวข้องมีการโหลดเลือกส่วน, ตามที่เลือกส่วนนี้สามารถพบได้ใน GDT หรือ LDT Descriptor ส่วนเกี่ยวข้อง Descriptor ส่วนที่บันทึกไว้ในส่วนของที่อยู่ฐานนี้แล้วเพิ่ม Offset ได้รับหน่วยความจำที่อยู่ในขั้นตอนสุดท้าย

การติดตั้งรายละเอียด

จากส่วนก่อนหน้านี้ที่กล่าวว่า GDT เป็นโหมดป้องกันจำเป็นโครงสร้างข้อมูลดังนั้นก่อนที่เราจะเข้าสู่โหมดป้องกันคุณจะต้องตั้งค่า GDT และผ่าน LGDT ถูกโหลดในการลงทะเบียนที่เหมาะสม

แม้ว่า GDT ช่วยให้หน่วยความจำจะอยู่ในสถานที่ใด ๆ แต่องค์ประกอบใน GDT - Descriptor - ความยาว 64 บิตที่ 8 ไบต​​์เพื่อที่จะให้สามารถเข้าถึงความเร็วของ GDT ที่เร็วที่สุดที่เราควรจะวางอยู่รายการ GDT ถึง 8 ไบต​​์ชิดว่ามีหลาย 8 ตำแหน่งที่อยู่

GDT บ่งแรกจะต้องบ่งว่างเปล่าซึ่งเป็นเนื้อหาทั้งหมดที่ควรจะ 0 หากคุณพูดถึงเรื่องนี้เข้าถึงหน่วยความจำที่ถูกสร้างขึ้นบ่งข้อยกเว้นการคุ้มครองทั่วไป

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

IA-32 ให้สิ่งที่เรียกว่า "Basic รุ่นแบน" โหมดการแบ่งกลุ่มสามารถบรรลุผลนี้ โหมดนี้จะต้องมีอย่างน้อยจะได้รับการกำหนดไว้ใน GDT สองอธิบายหนึ่งที่ใช้ในการอ้างอิงส่วนข้อมูลอื่นที่จะกล่าวถึงส่วนรหัส 2 ส่วนนี้มีพื้นที่เชิงเส้นทั้งหมดคือส่วนวงเงิน = 4 GB แม้ว่าหน่วยความจำกายภาพที่เกิดขึ้นจริงไม่ได้อยู่ไกลมาก แต่สำหรับอนาคตของพื้นที่นี้ถูกกำหนดโดยการจัดการหน้าจะใช้หน่วยความจำเสมือน

หลังจากที่นี่เราเป็นเพียงที่บูตเวทีดังนั้นเราจะต้องตั้งค่าเริ่มต้นเกี่ยวกับ GDT และอื่น ๆ อย่างแท้จริงเข้าสู่โหมดป้องกันเริ่มต้นระบบปฏิบัติการเคอร์เนลเฉพาะ OS ตั้งใจที่จะตั้งค่า GDT ใช้โหมดการจัดการหน่วยความจำที่กำหนดโดยเคอร์เนลตัวเอง ข้อมูลและส่วนการตั้งค่ารหัสบูตเคอร์เนลเพียงให้ทุกพื้นที่เชิงเส้นในนั้น


ก่อน 1 ต่อไป เลือกหน้า
ผู้ใช้งาน ทบทวน
ยังไม่มีความเห็น
ผมต้องการที่จะแสดงความคิดเห็น [ผู้มาเยือน (44.222.*.*) | เข้าสู่ระบบ ]

ภาษา :
| ตรวจสอบรหัส :


ค้นหา

版权申明 | 隐私权政策 | ลิขสิทธิ์ @2018 โลกความรู้สารานุกรม