HTG מסביר כיצד מעבד באמת עובד?
רוב הדברים במחשב הם פשוטים יחסית להבין: זיכרון RAM, אחסון, ציוד היקפי, ואת התוכנה כל לעבוד יחד כדי להפוך את המחשב לתפקד. אבל הלב של המערכת שלך, המעבד, נראה כמו קסם אפילו אנשי טק רבים. הנה, נעשה כמיטב יכולתנו לשבור אותו.
רוב המחקר עבור מאמר זה מגיע "אבל איך זה יודע?" על ידי ג 'יי קלארק סקוט. זה לקרוא פנטסטי, נכנס לעומק הרבה יותר מאשר במאמר זה יהיה, והוא שווה את הזוג דולר על אמזון.
פתק אחד לפני שנתחיל: המעבדים המודרניים הם בסדר גודל מורכב יותר ממה שאנחנו מתארים כאן. זה כמעט בלתי אפשרי עבור אדם אחד כדי להבין כל ניואנס של שבב עם מעל מיליארד טרנזיסטורים. עם זאת, העקרונות הבסיסיים של איך כל זה משתלב ביחד נשארים אותו דבר, והבנת היסודות ייתן לך הבנה טובה יותר של מערכות מודרניות.
החל קטן
מחשבים פועלים בבינארי. הם מבינים רק שתי מדינות: לסירוגין. כדי לבצע חישובים בינאריים, הם משתמשים במה שמכונה טרנזיסטור. הטרנזיסטור מאפשר רק את זרם המקור לזרום דרכו אל בור הניקוז, אם יש זרם על פני השער. בעיקרו של דבר, זה יוצר מתג בינארי, אשר חותך את החוט בהתאם אות קלט השני.
מחשבים מודרניים משתמשים במיליארדי טרנזיסטורים כדי לבצע חישובים, אבל ברמות הנמוכות ביותר, אתה רק צריך קומץ כדי ליצור את המרכיבים הבסיסיים ביותר, הידועה בשם שערים.
שערים לוגיים
מחסנית כמה טרנזיסטורים כראוי, ויש לך מה שמכונה שער ההיגיון. השערים לוגיים לקחת שתי כניסות בינאריות, לבצע פעולה עליהם, ולהחזיר פלט. שער ה- OR, לדוגמה, חוזר נכון אם אחת מהתשומות נכונה. שער ה- AND בודק אם שתי התשומות נכונות, XOR בודק אם רק אחד מהתשומות נכון, וה- N-varants (NOR, NAND ו- XNOR) הם גרסאות הפוכות של שערי הבסיס שלהם.
מתמטיקה עם שערים
עם רק שני שערים אתה יכול לעשות תוספת בינארי בסיסי. דיאגרמה זו מראה חצי adder, שנוצר באמצעות Logicly, משחק מקוון חינם עבור שערי ההיגיון. השער XOR כאן יופעל אם רק אחד התשומות הוא על, אבל לא את שניהם. שער AND יופעל אם שתי הקלטות מופעלות, אך התרחק אם אין קלט. אז אם שניהם מופעלים, ה- XOR נשאר כבוי, ושער ה- AND נדלק, מגיע לשאלה הנכונה של שניים:
זה נותן לנו התקנה פשוטה עם שלושה פלטים נפרדים: אפס, אחד, ושניים. אבל אחד לא יכול לאחסן שום דבר גבוה מ 1, ואת המכונה הזאת היא לא שימושית מדי כמו זה רק פותר את אחת הבעיות הפשוטות במתמטיקה אפשרית. אבל זה רק חצי adder, ואם אתה מחבר שניים מהם עם קלט אחר, אתה מקבל מלא Adder:
לתוספת המלאה יש שלושה תשומות - שני המספרים להוספה, ו- "לשאת". הסריקה משמשת כאשר המספר הסופי עולה על מה שניתן לאחסן בסיבית אחת. המלאים המלאים יקושרו בשרשרת, והעובר יועבר ממאגר אחד למשנהו. הסחינה מתווספת לתוצאה של שער XOR במחצית הראשונה של התוספת, ויש שער נוסף או לטפל בשני המקרים, כך שיהיה צורך ב.
כאשר שתי הקלטות מופעלות, הנשיאה מופעלת, ושולחת אותה למפתח הבא הבא בשרשרת:
וזה בערך מורכב כמו מקבל מקבל. העברת עד פיסות יותר בעצם פירושה רק יותר מלאים מלאים בשרשרת ארוכה יותר.
רוב פעולות מתמטיות אחרות ניתן לעשות עם תוספת; הכפלה היא רק חזר על עצמו, חיסור יכול להיעשות עם קצת היפוך קצת מהודר, ואת החטיבה הוא חזר רק חיסור. ובעוד כל המחשבים המודרניים יש פתרונות מבוססי חומרה כדי להאיץ פעולות מסובך יותר, אתה יכול מבחינה טכנית לעשות את כל זה עם התוספת המלאה.
האוטובוס והזיכרון
כרגע, המחשב שלנו הוא לא יותר ממחשבון רע. הסיבה לכך היא כי היא לא יכולה לזכור שום דבר, ולא עושה כלום עם התפוקות שלה. המוצג לעיל הוא תא זיכרון, אשר יכול לעשות את כל זה. מתחת למכסה המנוע, הוא משתמש הרבה שערים NAND, ועל בחיים האמיתיים יכול להיות שונה לגמרי בהתאם טכניקת האחסון, אבל הפונקציה שלו זהה. אתה נותן לו כמה תשומות, להפעיל את "לכתוב" קצת, וזה יהיה לאחסן את התשומות בתוך התא. זה לא רק תא זיכרון, כי אנחנו גם צריכים דרך לקרוא מידע ממנו. זה נעשה עם Enabler, שהוא אוסף של שערים AND עבור כל חלק בזיכרון, כל קשור קלט אחר, את "לקרוא" קצת. לכתוב ולקרוא סיביות נקראים לעתים קרובות "סט" ו "לאפשר" גם כן.
זה כל החבילה הוא עטוף במה שמכונה קופה. רישומים אלה מחוברים לאוטובוס, שהוא צרור של חוטים המתרוצצים סביב המערכת כולה, המחוברים לכל רכיב. גם מחשבים מודרניים יש אוטובוס, אם כי הם עשויים להיות מספר אוטובוסים כדי לשפר את הביצועים ריבוי משימות.
כל רישום עדיין יש לכתוב ולקרוא קצת, אבל זה ההתקנה, קלט פלט הם אותו דבר. זה ממש טוב. לדוגמה. אם אתה רוצה להעתיק את התוכן של R1 לתוך R2, היית מפעיל את קצת לקרוא עבור R1, אשר היה לדחוף את התוכן של R1 על האוטובוס. בעוד קצת לקרוא את הקטע, אתה מפעיל את חתיכת לכתוב עבור R2, אשר היה להעתיק את תוכן האוטובוס לתוך R2.
רישומים משמשים לעשות RAM גם כן. RAM הוא לעתים קרובות הניח ברשת, עם חוטי הולך בשני כיוונים:
מפענחי לקחת קלט בינארי ולהדליק את החוט המספרי המקביל. לדוגמה, "11" הוא 3 בינארי, המספר הגבוה ביותר של 2 סיביות, כך שהמפענח יפעיל את החוט הגבוה ביותר. בכל צומת יש קופה. כל אלה מחוברים לאוטובוס המרכזי, וכדי לכתוב מרכזי ולקרוא קלט. גם לקרוא את הכתיבה לכתוב רק להפעיל אם שני חוטים מעבר מעל לרשום גם על, ומאפשרים לך למעשה לבחור את הקופה ממנה לכתוב ולקרוא. שוב, RAM המודרני הוא הרבה יותר מסובך, אבל זה עדיין עובד ההתקנה.
את השעון, את צעד, ואת מפענח
רישומים משמשים בכל מקום והם כלי בסיסי להעברת נתונים סביב ואחסון מידע במעבד. אז מה אומר להם להעביר דברים מסביב?
השעון הוא הרכיב הראשון בליבת המעבד, והוא יכבה ויפעל במרווח קבוע, שנמדד בהרט, או מחזורים לשנייה. זוהי המהירות שאתה רואה המפורסם לצד המעבדים; שבב 5 GHz יכול לבצע 5 מיליארד מחזורים בשנייה. מהירות השעון היא לעתים קרובות ערך טוב מאוד עבור כמה מהר מעבד.
לשעון יש שלוש מצבים שונים: שעון הבסיס, השעון המאפיין והשעון המוגדר. שעון הבסיס יהיה על חצי מחזור, ולמחצית השנייה. השעון המאפיין משמש להפעלה של רישומים ויהיה צורך להמשיך לפעול כדי לוודא שהנתונים מופעלים. השעון הקבוע תמיד צריך להיות מופעל באותו זמן כמו שעון לאפשר, או אחר נתונים שגויים ניתן לכתוב.
השעון מחובר לסטרט, שיספור מאחד עד השלב המקסימלי, ויאפס את עצמו חזרה לאחד כאשר הוא נעשה. השעון מחובר גם לשערי AND עבור כל רישום שהמעבד יכול לכתוב אליו:
אלה השערים האלה מחוברים גם את הפלט של רכיב אחר, מפענח ההוראה. מפענח ההוראה מקבל הוראה כגון "SET R2 to R1" ומפענח אותה למשהו שהמעבד יכול להבין. יש לה מרשם פנימי משלה, שנקרא "הרשמה הרשמה", שבו הוא מאוחסן המבצע הנוכחי. איך בדיוק זה עושה את זה מגיע למערכת אתה מפעיל, אבל ברגע זה מפוענח, זה יהיה להפעיל את הסט הנכון ולאפשר סיביות עבור רושמים הנכון, אשר יורה בהתאם לשעון.
הוראות התוכנית מאוחסנות ב- RAM (או מטמון L1 במערכות מודרניות, קרוב יותר למעבד). מאז נתוני התוכנית מאוחסן ברשומות, בדיוק כמו כל משתנה אחר, זה יכול להיות מניפולציה על לטוס כדי לקפוץ סביב התוכנית. זה איך תוכניות לקבל את המבנה שלהם, עם לולאות ואם הצהרות. הוראה לקפיצה קובעת את המיקום הנוכחי בזיכרון שמפעיל מפענח ההוראה קורא אליו ממיקום אחר.
איך הכל ביחד
עכשיו, oversimplification ברוטו שלנו איך עובד מעבד הוא שלם. האוטובוס הראשי משתרע על כל המערכת ומתחבר לכל הרישומים. את כל adders, יחד עם חבורה של פעולות אחרות, הם ארוזים לתוך יחידת לוגיקה אריתמטית, או ALU. זה ALU יהיו חיבורים לאוטובוס, וגם יהיה משלה רושמת לאחסון את המספר השני הוא פועל על.
כדי לבצע חישוב, נתוני התוכנית נטענים מ - RAM של המערכת לתוך מקטע הבקרה. סעיף הבקרה קורא שני מספרים מ - RAM, טוען את הראשון לתוך לרשום הוראה של ALU, ולאחר מכן טוען את השני על האוטובוס. בינתיים, הוא שולח את ALU קוד הוראה אומר את זה מה לעשות. לאחר מכן, ה- ALU מבצע את כל החישובים ומאחסן את התוצאות במרשם אחר, שהמעבד יכול לקרוא ממנו ולאחר מכן להמשיך בתהליך.
אשראי תמונה: Rost9 / Shutterstock