רוב הדברים במחשב הם פשוטים יחסית להבנה: זיכרון RAM, אחסון, ציוד היקפי והתוכנה, כולם עובדים יחד בכדי לגרום לתפקוד המחשב. אבל הלב של המערכת שלך, המעבד, נראה כמו קסם אפילו לאנשי טכנולוגיה רבים. הנה, אנו נעשה כמיטב יכולתנו כדי לפרק את זה.
מרבית המחקרים למאמר זה מקורם "אבל איך זה יודע?" מאת ג'יי קלארק סקוט. זו קריאה פנטסטית, נכנסת לעומק הרבה יותר ממה שמאמר זה יקבל, והיא שווה את הכסף הזוג באמזון.
הערה אחת לפני שמתחילים: מעבדים מודרניים הם סדרי גודל מורכבים יותר ממה שאנחנו מתארים כאן. זה כמעט בלתי אפשרי לאדם אחד להבין כל ניואנס של שבב עם למעלה ממיליארד טרנזיסטורים. עם זאת, העקרונות הבסיסיים לאופן שבו הכל משתלב נשארים זהים, והבנת היסודות תעניק לך הבנה טובה יותר של מערכות מודרניות.
מתחיל קטן
מחשבים פועלים בינארי . הם מבינים רק שתי מצבים: לסירוגין. כדי לבצע חישובים בינאריים, הם משתמשים במה שמכונה טרנזיסטור. הטרנזיסטור מאפשר לזרם המקור לזרום דרכו לנקז אם יש זרם מעבר לשער. בעיקרו של דבר, זה יוצר מתג בינארי, שמנתק את החוט בהתאם לאות קלט שני.
קָשׁוּר: מה זה בינארי ולמה מחשבים משתמשים בו?
מחשבים מודרניים משתמשים במיליארדי טרנזיסטורים לביצוע חישובים, אך ברמות הנמוכות ביותר, אתה רק צריך קומץ כדי ליצור את הרכיבים הבסיסיים ביותר, המכונים שערים.
שערים לוגיים
ערמו כמה טרנזיסטורים כמו שצריך, ויש לכם מה שמכונה שער לוגיקה. שערים לוגיים לוקחים שתי כניסות בינאריות, מבצעים פעולה בהן ומחזירים פלט. שער ה- OR, למשל, מחזיר נכון אם אחת מהתשומות נכונה. שער AND בודק אם שתי התשומות נכונות, XOR בודק אם רק אחת מהתשומות נכונות, וריאציות ה- N (NOR, NAND ו- XNOR) הן גרסאות הפוכות של שערי הבסיס שלהן.
עושה מתמטיקה עם שערים
עם שני שערים בלבד תוכלו לבצע תוספת בינארית בסיסית. תרשים זה לעיל מציג חצי תוספת שנוצרה באמצעות בהיגיון , מגרש משחקים מקוון חינם לשערי לוגיקה. שער ה- XOR כאן יופעל אם רק אחת מהקלטות מופעלת, אך לא את שתיהן. שער AND יופעל אם שתי הכניסות פועלות, אך יישארו כבוי אם אין קלט. אז אם שניהם פועלים, ה- XOR נשאר כבוי, ושער AND נדלק ומגיע לתשובה הנכונה של שניים:
זה נותן לנו התקנה פשוטה עם שלוש יציאות ברורות: אפס, אחד ושניים. אבל ביט אחד לא יכול לאחסן שום דבר הגבוה מ -1, ומכונה זו אינה שימושית מדי מכיוון שהיא פותרת רק את אחת הבעיות הפשוטות ביותר במתמטיקה. אבל זה רק חצי תוספת, ואם אתה מחבר שניים מהם עם קלט אחר, אתה מקבל תוספת מלאה:
לתוסף המלא יש שלוש קלטות - שני המספרים שיש להוסיף, ו"נשא ". השאת משמשת כאשר המספר הסופי עולה על מה שניתן לאחסן בסיבית בודדת. תוספות מלאות יקושרו בשרשרת, והנשיאה עוברת מתוסף אחד למשנהו. הנשיאה מתווספת לתוצאה של שער ה- XOR במחצית הראשונה, ויש שער נוסף או OR לטיפול בשני המקרים כאשר הדבר יצטרך להיות פעיל.
כששני הקלטים פועלים, המטען נדלק ושולח אותו לתוסף הבא המלא בשרשרת:
וזה מורכב בערך כמו שהתוספת נהיית. העברה ליותר ביטים בעצם פירושה רק יותר מוסיפים מלאים בשרשרת ארוכה יותר.
ניתן לבצע את מרבית פעולות המתמטיקה האחרות בתוספת; הכפל הוא רק חיבור חוזר, ניתן לבצע חיסור עם היפוך קצת מהודר, וחילוק הוא רק חיסור חוזר. ולמרות שלכל המחשבים המודרניים יש פתרונות מבוססי חומרה כדי להאיץ את הפעולות המסובכות יותר, אתה יכול לעשות זאת טכנית עם התוספת המלאה.
האוטובוס והזיכרון
כרגע המחשב שלנו הוא לא יותר ממחשבון רע. הסיבה לכך היא שהוא לא יכול לזכור כלום, ולא עושה שום דבר עם התפוקות שלו. לעיל מוצג תא זיכרון, שיכול לעשות את כל זה. מתחת למכסה המנוע, הוא משתמש בשערים רבים של NAND, ובחיים האמיתיים יכול להיות שונה למדי, תלוי בטכניקת האחסון, אך הפונקציה שלו זהה. אתה נותן לו כמה כניסות, מפעיל את ביט ה'כתיבה 'והוא יאחסן את הכניסות בתוך התא. זה לא רק תא זיכרון, מכיוון שאנחנו צריכים גם דרך לקרוא מידע ממנו. זה נעשה בעזרת מאפשר, שהוא אוסף של AND שערים לכל סיב בזיכרון, כולם קשורים לקלט אחר, סיבית "קריאה". סיביות הכתיבה והקריאה נקראות לעתים קרובות גם "סט" ו"אפשר ".
כל החבילה הזו עטופה במה שמכונה רושם. רגיסטרים אלה מחוברים לאוטובוס, שהוא צרור חוטים המתנהל ברחבי המערכת כולה, המחובר לכל רכיב. אפילו למחשבים מודרניים יש אוטובוס, אם כי ייתכן שיש להם מספר אוטובוסים לשיפור ביצועי ריבוי המשימות.
בכל רשום יש עדיין סיבוב כתיבה וקריאה, אך בהתקנה זו, הקלט והפלט הם אותו הדבר. זה ממש טוב. לדוגמה. אם תרצה להעתיק את התוכן של R1 ל- R2, תפעיל את סיבית הקריאה עבור R1, שתדחוף את התוכן של R1 לאוטובוס. בזמן שסיב הקריאה פועל, תפעיל את סיבית הכתיבה עבור R2, שתעתיק את תוכן האוטובוס ל- R2.
רישומים משמשים גם לייצור זיכרון RAM. זיכרון RAM מונח לרוב ברשת, עם חוטים העוברים לשני כיוונים:
המפענחים לוקחים קלט בינארי ומפעילים את החוט הממוספר המתאים. לדוגמא, "11" הוא 3 בבינארי, המספר הגבוה ביותר של 2 סיביות, ולכן המפענח יפעיל את החוט הגבוה ביותר. בכל צומת יש רישום. כל אלה מחוברים לאוטובוס המרכזי, ולקלט מרכזי לכתיבה וקריאה. הן קריאת הקלט והן קלט הכתיבה יופעלו רק אם שני החוטים העוברים מעל הרשמת מופעלים, ובכך מאפשרים לכם לבחור את המרשם ממנו תוכלו לכתוב ולקרוא. שוב, זיכרון RAM מודרני הוא הרבה יותר מסובך, אך התקנה זו עדיין עובדת.
השעון, הצעד והמפענח
רישומים משמשים בכל מקום והם הכלי הבסיסי להעברת נתונים ולאחסון מידע במעבד. אז מה אומר להם להזיז דברים?
השעון הוא הרכיב הראשון בליבת המעבד והוא יכבה ונדלק במרווח קבוע, נמדד בהרץ, או מחזורים לשנייה. זו המהירות שאתה רואה המפורסם לצד מעבדים; שבב של 5 ג'יגה הרץ יכול לבצע 5 מיליארד מחזורים לשנייה. מהירות השעון היא לעתים קרובות מדד טוב מאוד לכמה שמעבד מהיר.
לשעון שלושה מצבים שונים: שעון הבסיס, שעון ההפעלה והשעון שנקבע. שעון הבסיס יפעל למשך חצי מחזור, וכיבה למחצית השנייה. שעון ההפעלה משמש להפעלת רישומים ויהיה צורך להפעיל אותו זמן רב יותר כדי לוודא שהנתונים מופעלים. השעון המוגדר תמיד צריך להיות פעיל באותו זמן כמו שעון ההפעלה, אחרת ניתן לכתוב נתונים שגויים.
השעון מחובר לסטפר, שייספר מאחד לשלב המקסימלי, ויאפס את עצמו חזרה לאחד כשיסיים. השעון מחובר גם ל- AND שערים עבור כל רישום שהמעבד יכול לכתוב אליו:
שערי AND אלה מחוברים גם לפלט של רכיב אחר, מפענח ההוראות. מפענח ההוראות לוקח הוראות כמו "SET R2 TO R1" ומפענח אותה למשהו שהמעבד יכול להבין. יש לו מרשם פנימי משלו, המכונה "רישום ההוראות", שם מאוחסנת הפעולה הנוכחית. איך בדיוק זה עושה את זה מסתכם במערכת בה אתה מפעיל, אך ברגע שהיא מפוענחת, היא תפעיל את הסט הנכון ותאפשר ביטים לרשמים הנכונים, אשר יופעלו בהתאם לשעון.
הוראות התוכנית נשמרות בזיכרון RAM (או במטמון L1 במערכות מודרניות, קרוב יותר למעבד). מכיוון שנתוני התוכנית נשמרים ברשומות, בדיוק כמו כל משתנה אחר, ניתן לתפעל אותם על מנת לזנק סביב התוכנית. כך תוכניות מקבלות את המבנה שלהן, עם הצהרות לולאות ואם. הוראות קפיצה קובעות את המיקום הנוכחי בזיכרון שממנו מפענח ההוראות קורא למיקום אחר.
איך הכל משתלב
כעת, פשטנו יתר על המידה את אופן הפעולה של המעבד. האוטובוס הראשי משתרע על פני כל המערכת ומתחבר לכל הרשמים. התוספות המלאות, יחד עם שלל פעולות אחרות, ארוזות ביחידת הלוגיקה האריתמטית, או ALU. ל- ALU זה יהיו חיבורים לאוטובוס, ויהיו לו גם רושמים משלו לאחסון המספר השני בו הוא פועל.
לביצוע חישוב, נתוני התוכנית נטענים מזיכרון המערכת למקטע הבקרה. קטע הבקרה קורא שני מספרים מ- RAM, מעמיס את הראשון לרשם ההוראות של ה- ALU, ואז מעמיס את השני על האוטובוס. בינתיים, הוא שולח ל- ALU קוד הוראות שמורה לו מה לעשות. לאחר מכן ה- ALU מבצע את כל החישובים ואוחסן את התוצאה במרשם אחר, ממנו יכול המעבד לקרוא ואז להמשיך בתהליך.
אשראי תמונה: Rost9 / שוטרסטוק