20Aug
יום אחד זה כיף להסתכל על פני השטח של חוויית המחשוב, וימים אחרים זה כיף להתעמק ישר לתוך פעולתו הפנימית.היום אנחנו לוקחים מבט על המבנה של זיכרון המחשב ורק כמה דברים אתה יכול לארוז לתוך מקל RAM.
השאלה של היום &מפגש תשובה מגיע אלינו באדיבות SuperUser - חלוקה של סטאק שערי, קהילה מונחה קיבוץ של Q & אתרי אינטרנט.
השאלה
קורא SuperUser יוהאן Smohan הוא מתמודד עם איך סוג המעבד ואת גודל הזיכרון לעבוד יחד כדי להניב מספר כולל של כתובות.הוא כותב:
כמה כתובות זיכרון אנחנו יכולים לקבל עם מעבד 32 סיביות ו 1GB RAM וכמה עם מעבד 64 סיביות?
אני חושב שזה משהו כזה:
1GB של RAM מחולק או 32 סיביות 4 סיביות( ?) כדי לקבל את מספר כתובות זיכרון?
קראתי בוויקיפדיה כי 1 כתובות זיכרון הן 32 סיביות או 4 octets( 1 octet = 8 סיביות), בהשוואה למעבד 64 סיביות שבו 1 כתובות זיכרון או מספר שלם אחד הוא 64 סיביות או 8 octets.אבל לא יודע אם הבנתי את זה נכון.
אלה הן סוג של שאלות שיכולות לשמור על חנון סקרן בלילה.כמה כתובות זמינות בכל אחת מהמערכות היפותטיות של יוהאן?
תשובה תורם SuperUser Gronostaj מציע כמה תובנות כיצד RAM מחולק ומנוצל:
תשובה קצרה: מספר הכתובות הזמינות שווה קטן יותר של אלה:
- גודל זיכרון בבתים
- הגדול ביותר חתום שלם שניתן לשמורin המילה של המכונה המכונה
תשובה ארוכה והסבר של האמור לעיל:
זיכרון מורכב בתים( B).כל בית מורכב מ -8 סיביות( b).
1 B = 8 b1 GB של RAM הוא למעשה 1 GiB( gibibyte, לא gigabyte).ההבדל הוא:
1 GB = 10 ^ 9 B = 1 000 000 000 B 1 GiB = 2 ^ 30 B = 1 073 741 824 Bלכל בית זיכרון יש כתובת משלו, לא משנה עד כמה המילה של מכונת המעבד היא.לְמָשָׁל.מעבד Intel 8086 היה 16 סיביות והוא פונה אל זיכרון של בתים, כך גם המעבדים המודרניים של 32 סיביות ו- 64 סיביות.זו הסיבה לגבול הראשון - לא ניתן לקבל יותר כתובות מאשר בתים בזיכרון.
כתובת הזיכרון היא רק כמה בתים CPU יש לדלג מתחילת הזיכרון כדי להגיע אחד שהוא מחפש.
- כדי לגשת לבית הראשון יש לדלג על 0 בתים, כך שכתובת הבית הראשונה היא 0.
- כדי לגשת אל הבית השני יש לדלג על 1 בתים, כך שכתובתו היא 1.
- ( וכן הלאה. ..)
- כדי לגשת אלהאחרון, המעבד מדלג 1073741823 בתים, ולכן הכתובת שלו היא 1073741823.
עכשיו אתה צריך לדעת מה פירוש 32 סיביות למעשה.כפי שציינתי קודם, זה בגודל של מילה מכונה.
המילה Machine היא כמות הזיכרון המשמשת את ה- CPU כדי להחזיק מספרים( ב- RAM, מטמון או רושמים פנימיים).מעבד 32 סיביות משתמש ב- 32 סיביות( 4 בתים) כדי להחזיק מספרים.גם כתובות זיכרון הן מספרים, כך שבמעבד של 32 סיביות, כתובת הזיכרון מורכבת מ -32 סיביות.
עכשיו לחשוב על זה: אם יש לך קצת, אתה יכול לשמור שני ערכים על זה: 0 או 1. הוסף עוד אחד ויש לך ארבעה ערכים: 0, 1, 2, 3. על שלושה סיביות, אתה יכול לשמור שמונהערכים: 0, 1, 2. .. 6, 7. זוהי למעשה מערכת בינארית והיא פועלת כך:
עשרוני בינארי 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111זה עובד בדיוק כמו תוספת רגילה, אבל המספר המקסימלי הוא 1, לא 9. עשרוני 0 הוא 0000, אז אתה מוסיף 1 ולקבל 0001, להוסיף אחד שוב יש לך 0010. מהhappend כאן הוא כמו עם עשרוני 09 והוספת אחד: אתה משנה 9 עד 0 ו הבא ספרה הבאה.
מהדוגמה שלעיל ניתן לראות שיש תמיד ערך מקסימלי שניתן לשמור במספר עם מספר קבוע של סיביות - מכיוון שכאשר כל הביטים הן 1 ואתה מנסה להגדיל את הערך ב -1, כל הביטים יהפכו ל -0, ובכך יתנפצוהמספר.זה נקרא גלישה שלמים וגורם לבעיות לא נעימות רבות, הן למשתמשים והן למפתחים.
= 255 + 1 ----------- 100000000 = 0( 9 סיביות כאן, אז 1 הוא trimmed)- עבור 1 bit הערך הגדול ביותר הוא 1,
- 2 סיביות - 3,
- 3 סיביות -7,
- 4 סיביות - 15
המספר הגדול ביותר האפשרי הוא תמיד 2 ^ N-1, כאשר N הוא מספר הביטים.כפי שאמרתי קודם, כתובת זיכרון היא מספר ויש לה גם ערך מקסימלי.זה למה גודל המילה של מכונה הוא גם מגבלה על מספר כתובות זיכרון זמין - לפעמים המעבד שלך פשוט לא יכול לעבד מספרים גדולים מספיק כדי לענות על יותר זיכרון.
אז על 32 סיביות אתה יכול לשמור מספרים בין 0 ל 2 ^ 32-1, וזה 4 294 967 295. זה יותר מאשר את הכתובת הגדולה ביותר 1 GB RAM, אז במקרה הספציפי שלך RAM יהיה הגורם המגביל.
מגבלת ה- RAM עבור מעבד 32 סיביות היא תיאורטית 4 GB( 2 ^ 32) ו 64-bit מעבד זה 16 EB( exabytes, 1 EB = 2 ^ 30 GB).במילים אחרות, מעבד 64 סיביות יכול לטפל בכל האינטרנט. .. 200 פעמים;)( מוערך על ידי. WolframAlpha).
עם זאת, במערכות ההפעלה האמיתית מערכות 32-bit CPUs יכול כתובת על 3 GiB של RAM.זה בגלל הארכיטקטורה הפנימית של מערכת ההפעלה - כמה כתובות שמורות למטרות אחרות.אתה יכול לקרוא עוד על זה שנקרא 3 מחסום GB על ויקיפדיה.תוכל להרים את המגבלה הזו באמצעות הרחבת כתובת פיזית.
אם כבר מדברים על זיכרון פונה, יש כמה דברים שאני צריך להזכיר: זיכרון וירטואלי , פילוח החלפה .
זיכרון וירטואלי
כפי ש- Daniel R Hicks הצביע על תשובה אחרת, מערכות ההפעלה משתמשות בזיכרון וירטואלי.מה זה אומר כי יישומים למעשה לא פועלים על כתובות זיכרון אמיתי, אבל אלה המסופקים על ידי מערכת ההפעלה.
טכניקה זו מאפשרת למערכת ההפעלה להזיז כמה נתונים מה- RAM אל מה שנקרא 'דף'( Windows) או החלפה( * NIX).HDD הוא כמה magnitudes לאט יותר מאשר RAM, אבל זה לא בעיה רצינית עבור גישה לנתונים לעתים נדירות וזה מאפשר OS לספק יישומים יותר RAM ממה שאתה באמת מותקן.
החלפה
מה שדיברנו עד כה נקרא סכמה פונה שטוח.
החלפה היא שיטה פונה אלטרנטיבית המאפשרת כתובת יותר זיכרון שאתה יכול בדרך כלל עם מילה מכונה אחת במודל שטוח.
תארו לעצמכם ספר מלא במילות 4 אותיות.נניח שיש 1024 מספרים בכל דף.כדי לענות למספר, עליך לדעת שני דברים:
- מספר העמוד שבו מודפסת המילה.
- איזו מילה בדף זה היא זו שאתה מחפש.
עכשיו זה בדיוק איך מודרני x86 CPUs לטפל בזיכרון.זה מחולק ל 4 דפי KiB( 1024 מכונת מילים כל) ודפים אלה יש מספרים.(דפים למעשה יכול להיות גם 4 MiB גדול או 2 MiB עם PAE).כאשר אתה רוצה כתובת תא זיכרון, אתה צריך את מספר הדף ואת כתובת בדף זה.שים לב כי כל תא זיכרון מופנה על ידי זוג אחד בלבד של מספרים, זה לא יהיה המקרה עבור פילוח.
פילוח
ובכן, זה אחד דומה למדי החלפה.זה היה בשימוש ב - Intel 8086, רק כדי שם דוגמה אחת.קבוצות של כתובות נקראות עכשיו מקטעי זיכרון, לא דפים.ההבדל הוא חפיפה חפיפה, והם עושים חפיפה הרבה.לדוגמה על 8086 תאים זיכרון ביותר היו זמינים מ 4096 מגזרים שונים.
דוגמה:
נניח שיש לנו 8 בייטים של זיכרון, כל אפסים מחזיקים למעט עבור בית 4 אשר שווה ל 255.
איור עבור דגם זיכרון שטוח:
_____ |0 ||0 ||0 ||255|0 ||0 ||0 ||0 |-----איור עבור זיכרון מעומעם עם דפי 4 בתים:
PAGE0 _____ |0 ||0 ||0 |PAGE1 |255_____ ----- |0 ||0 ||0 ||0 |-----איור עבור זיכרון מקוטע עם מקטעי 4 בתים שונתה על ידי 1:
SEG 0 _____ SEG 1 |0 |_____ SEG 2 |0 ||0 |_____ SEG 3 |0 ||0 ||0 |_____ SEG 4 |255|255|255|255_____ SEG 5 ----- |0 ||0 ||0 ||0 |_____ SEG 6 ----- |0 ||0 ||0 ||0 |_____ SEG 7 ----- |0 ||0 ||0 ||0 |_____ ----- |0 ||0 ||0 ||0 |כפי שניתן לראות, 4 בתים ניתן לטפל בארבע דרכים:( פונה 0)- קטע 0, לקזז 3
- קטע 1,אופסט 2
- קטע 2, לקזז 1
- קטע 3, לקזז 0
זה תמיד אותו תא זיכרון.
במקטעי חיים אמיתיים מקטעים יותר מ -1 בתים( עבור 8086 זה היה 16 בתים).
מה רע על פילוח זה מסובך( אבל אני חושב שאתה כבר יודע את זה) מה טוב, היא שאתה יכול להשתמש כמה טכניקות חכם ליצור תוכניות מודולריות.
לדוגמה, אתה יכול לטעון כמה מודול לתוך קטע, ואז להעמיד פנים הקטע הוא קטן יותר ממה שהוא באמת( רק קטן מספיק כדי להחזיק את המודול), ולאחר מכן לבחור קטע הראשון כי לא חופפים עם זה פסאודו קטן אחד לטעוןמודול הבא, וכן הלאה.בעיקרון, מה שאתה מקבל בדרך זו הוא דפים בגודל משתנה.
יש משהו להוסיף להסבר?נשמע את ההערות.רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי?בדוק את נושא הדיון המלא כאן.