דף הבית » איך ל » מדוע מעבדי x86 משתמשים רק בשני מתוך ארבעה טבעות?

    מדוע מעבדי x86 משתמשים רק בשני מתוך ארבעה טבעות?

    כאשר לומדים יותר על האופן שבו מערכות ההפעלה והחומרה הם רצים על עבודה ולפעול אחד עם השני, אתה עלול להיות מופתע לראות מה שנראה מוזר או ניצול תת-קרקעי של "משאבים" המתרחשים. למה? היום של SuperUser Q & A פוסט יש את התשובה לשאלה הקורא סקרן.

    מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ מונחה על ידי הקהילה של אתרי אינטרנט של Q & A.

    באדיבות Lemipmatt (Flickr).

    השאלה

    קורא SuperUser AdHominem רוצה לדעת מדוע מעבדי x86 משתמשים רק בשתי מתוך ארבע צלצולים:

    לינוקס ו- Windows מבוסס מערכות x86 רק להשתמש טבעת 0 עבור מצב הקרנל טבעת 3 עבור מצב משתמש. למה מעבדי אפילו להבחין ארבע טבעות שונות אם כולם בסופו של דבר רק באמצעות שניים מהם בכל זאת? האם זה השתנה עם הארכיטקטורה AMD64?

    מדוע מעבדי x86 משתמשים רק בשתי מתוך ארבע צלצולים?

    התשובה

    לתמיכת הסופר ג'יימי הנרהן יש את התשובה עבורנו:

    ישנן שתי סיבות עיקריות.

    הראשון הוא שלמרות שהמעבדים של x86 מציעים ארבעה טבעות להגנת הזיכרון, רמת הפירוט של ההגנה המוצעת היא רק ברמת הפלח. כלומר, כל קטע יכול להיות מוגדר טבעת ספציפית (רמת הרשאות) יחד עם הגנות אחרות כמו לכתוב נכים. אבל אין זה מתארים קטע רבים זמינים. רוב מערכות ההפעלה רוצה להיות הרבה יותר עדין פירוט של הגנת הזיכרון, כמו ... עבור דפים בודדים.

    לכן, הזן הגנה מבוססת טבלת עמודים. רוב מערכות ההפעלה x86 המודרניות, אם לא כולן, מתעלמות פחות או יותר ממנגנון הפילוח (ככל שהן יכולות בכל זאת), ומסתמכות על ההגנה הזמינה מהביטים בסדר נמוך בעמודי טבלת העמודים. אחד מהם נקרא "חסוי" קצת. זה קצת שולט אם או לא המעבד צריך להיות באחד הרמות "חסוי" כדי לגשת לדף. רמות "חסוי" הם PL 0, 1 ו- 2. אבל זה רק קצת אחד, כך ברמת דף אחר דף הגנה, מספר "מצבים" זמין בכל הנוגע להגנת הזיכרון הוא רק שני: דף יכול להיות נגיש ממצב לא מיוחס, או לא. לפיכך, רק שתי צלצולים. כדי לקבל ארבע טבעות אפשריות עבור כל דף, הם יצטרכו להיות שני סיביות הגנה בכל טבלת טבלת דפים כדי לקודד אחד מארבעת מספרי הטבעות האפשריים (בדיוק כמו מתארי הפלח). עם זאת, הם לא.

    הסיבה האחרת היא הרצון לניידות של מערכת ההפעלה. זה לא רק על x86; יוניקס לימדה אותנו שמערכת הפעלה יכולה להיות ניידת יחסית לארכיטקטורות מרובות מעבדים, ושזה היה דבר טוב. וכמה מעבדי תמיכה רק שתי טבעות. על ידי לא תלוי במספר טבעות בארכיטקטורה, מיישמי מערכת ההפעלה עשה את מערכות ההפעלה ניידים יותר.

    יש סיבה שלישית הספציפית לפיתוח Windows NT. המעצבים של NT (דיוויד קטלר וצוותו, שאותם שכרה מיקרוסופט ממעבדת DEC Western Labs), היו בעלי ניסיון קודם נרחב ב- VMS; למעשה, קטלר וכמה אחרים היו בין המעצבים המקוריים של VMS. ואת מעבד VAX אשר VMS תוכנן יש ארבע צלצולים (VMS משתמש ארבע צלצולים).

    אבל את הרכיבים אשר רץ VMS של טבעות 1 ו -2 (Record Management Services ו- CLI, בהתאמה) נותרו מחוץ לתכנון NT. טבעת 2 ב VMS לא ממש על אבטחת מערכת ההפעלה, אלא על שמירה על הסביבה של המשתמש CLI מתוכנית אחת לאחרת, ו- Windows לא היה מושג זה; CLI פועל כתהליך רגיל. באשר VMS של טבעת 1, קוד ה- RMS טבעת 1 היה צריך להתקשר טבעת 0 לעתים קרובות למדי, ומעברים טבעת הם יקרים. התברר שזה הרבה יותר יעיל פשוט ללכת טבעת 0 ולסיים עם זה ולא יש הרבה טבעת 0 העברות בתוך טבעת 1 קוד (שוב, לא NT יש משהו כמו RMS בכל מקרה).

    למה x86 מיושם ארבע צלצולים בזמן מערכות ההפעלה לא להשתמש בהם, אתה מדבר על מערכות הפעלה של עיצוב האחרונות הרבה יותר מאשר x86. הרבה תכונות תכנות המערכת של x86 נועדו הרבה לפני NT או אמיתי יוניקס- Ish גרעינים יושמו על זה, והם לא ממש יודע מה מערכת ההפעלה ישתמש. זה לא היה עד שהגענו ההחלפה על x86 כי נוכל ליישם אמיתי יוניקס- IH או VMS דמויי גרעינים.

    לא רק מערכות ההפעלה x86 המודרניות מתעלמות במידה רבה מהקטגוריות (הן פשוט הגדירו את הקטעים C, D ו- S עם כתובת בסיס של 0 וגודל של 4 GB; מקטעי F ו- G משמשים לעתים להצביע על מבני נתונים מרכזיים של מערכת ההפעלה ), הם גם מתעלמים בעיקר מדברים כמו "קטעים של מדינת משימה". מנגנון ה- TSS תוכנן בצורה ברורה עבור מיתוג הקשר של פתיל, אך מתברר שיש לו יותר מדי תופעות לוואי, ולכן מערכות הפעלה מודרניות של x86 עושות זאת "ביד". הפעם היחידה x86 NT שינויים במשימות החומרה היא עבור כמה תנאים יוצאי דופן באמת, כמו חריגה כפולה תקלה.

    לגבי הארכיטקטורה x64, הרבה תכונות אלה disused נותרו בחוץ. לזכותם, AMD ממש דיבר עם צוותי הקרנל של מערכת ההפעלה ושאל מה הם צריכים מ x86, מה הם לא צריכים או לא רוצה, ומה הם רוצים להוסיף. מקטעים על x64 קיימים רק במה שיכול להיקרא טופס vestigial, החלפת מצב משימה אינו קיים, וכו ', ומערכות הפעלה להמשיך להשתמש רק שתי צלצולים.


    יש לך משהו להוסיף להסבר? נשמע את ההערות. רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי מתמצא? בדוק את נושא הדיון המלא כאן.