ידוע שקוד נכתב על ידי מפתח וכיצד בני אדם מתקשרים למחשבים. עם זאת, האם אי פעם חשבת על האופן שבו תוכנה כגון קוד מקיימת אינטראקציה עם חומרת מחשב כגון מעבד (יחידת עיבוד מרכזית)? אם התשובה היא כן, אז הגעתם למקום הנכון.
כדי להבין כיצד מבוצע קוד במחשב, עליך להבין מה גורם למחשב לתקתק וכיצד ניתן לתפעל אותו. ראשית, בואו נדבר תחילה על הרעיונות הבסיסיים של חומרת מחשב לפני שנתקדם לצד התוכנה של הדברים.
מה זה בינארי?
בינארי היא מערכת מספרי בסיס 2 שמעבדים וזיכרון משתמשים בה כדי להפעיל קוד. מספרים בינאריים יכולים להיות רק 1 או 0, ומכאן שמו. אם אתה מקבץ שמונה מספרים בינאריים (00000000), אתה מקבל מה שמכונה בייט, בעוד שמספר בינארי בודד (0) נקרא ביט.
כיצד מתג פשוט מייצר אותות בינאריים
כל מה שהגיוני במחשוב עם מכונות מתחיל עם המתג הפשוט. למתג פשוט יש שני מוליכים ומנגנון חיבור וניתוק. חיבור שני המוליכים מאפשר זרימת זרם, מה שמייצר אות לקצה השני של המוליך. מצד שני, אם המוליכים מנותקים, הזרם לא יזרום, כלומר לא יופק אות.
מכיוון שמתג יכול להיות מופעל או כבוי רק במקרה מסוים, הם מספקים את המנגנון האידיאלי ליצור את האותות הגבוהים והנמוכים המשמשים להפקת אותות גל ריבועי.
כאשר אתה מפעיל מתג, הוא מייצר אות או סיביות אחת של נתונים. תמונה רגילה שצולמה מסמארטפון תהיה בסביבות חמישה מגה-בייט של נתונים, השווים ל-40,000,000 סיביות. זה אומר שתצטרך להפעיל את המתג עשרות מיליוני פעמים רק כדי לייצר מספיק נתונים לתמונה אחת שצולמה מהסמארטפון שלך.
עם המגבלות המכניות של מתג, המהנדסים היו צריכים משהו שלא היו בו חלקים נעים וסיפק מהירויות מיתוג מהירות יותר.
טרנזיסטורים המשמשים כמתג
הודות לגילוי של סימום (מניפולציה של המוליכות החשמלית של מוליכים למחצה כמו סיליקון), מהנדסים הצליחו לייצר מתגים מבוקרים חשמליים הידועים כטרנזיסטורים. המצאה חדשה זו אפשרה מהירויות עיבוד מהירות יותר שהצריכו מתח קטן כדי להפעיל, בסופו של דבר אפשרה לערום למעלה ממיליארד מהטרנזיסטורים הללו על מעבד מודרני יחיד.
מהי ארכיטקטורת מעבד?
לאחר מכן, הטרנזיסטורים מסודרים בצורה חכמה כדי ליצור שערים לוגיים, חצי-מוסיפים, חיבורים, כפכפים, מרבבים, רגיסטרים ורכיבים שונים שהופכים את ה-CPU פונקציונלי. האופן שבו רכיבים אלה נערמו מגדיר את מה שמכונה ארכיטקטורת CPU.
ארכיטקטורת ה-CPU מכתיבה גם את ה-ISA של המעבד (Instruction Set Architecture). ISA מחזיק רשימה מובנית של הוראות שמעבד יכול לבצע באופן מקורי. לאחר מכן מערבבים הוראות אלה ברצף באמצעות שפת תכנות כדי ליצור מה שמכונה תוכנית. בדרך כלל, מאות הוראות זמינות בקלות במעבד, כולל חיבור, חיסור, הזזה, שמירה וטעינה.
הנה דוגמה של ערכת הוראות:
לכל פקודה בערכת הוראות יש כתובת בינארית משלה המכונה opcode. ה-opcode יהיו הסיביות הבינאריות הראשונות שמספרות באיזו פעולה ממערכת ההוראות להשתמש.
אחרי ה-opcode נמצא האופרנד. האופרנד מכיל ערכים וכתובות שבהם ישמש ה-opcode.
התרשים מציג הוראה של 8 סיביות. אם למעבד יש ארכיטקטורה של 64 סיביות, אז ההוראות יכולות להשתרע על עד 64 סיביות ברוחב הוראות, מה שהופך אותו למעבד בעל יכולת גבוהה יותר.
קָשׁוּר: במה שונים מעבדי RISC ו-CISC?
האסמבלר
כעת לאחר שאתה מבין אותות בינאריים, אתה יכול ללמוד כיצד המחשב שלך מפרש אותות כאלה. האופן שבו יש לפרש את קוד המכונה תלוי בסוג ההיגיון המשמש ב-assembler (תוכנית ברמה נמוכה המשמשת לפענוח ולהרכיב קוד לבינארי תקין).
לדוגמה, אם האסמבלר שלנו משתמש בתקן ASCII (קוד אמריקאי לחילופי מידע), האסמבלר שלנו ייקח את קוד המכונה שניתן ויפרש אותו כמו מה-ASCII בטבלה לְהַלָן.
00101001 | א | 00101111 | G | 00110101 | M | 00111011 | ס | 01000001 | י |
00101010 | ב | 00110000 | ח | 00110110 | נ | 00111100 | ט | 01000010 | ז |
00101011 | ג | 00110001 | אני | 00110111 | 0 | 00111101 | U | ||
00101100 | ד | 00110010 | י | 00111000 | פ | 00111110 | V | ||
00101101 | ה | 00110011 | ק | 00111001 | ש | 00111111 | W | ||
00101110 | ו | 00110100 | ל | 00111010 | ר | 0100000 | איקס |
מכיוון שהאסמבלר שלנו משתמש ב-ASCII (גרסת 8 סיביות), כל שמונה מספרים בינאריים בבינארי מתפרשים כתו אחד. האסמבלר ייקח בייט זה ויפרש אותו לפי הסטנדרטים שניתנו. לדוגמה, 01000001 01101001 01010100 יתורגם למילה "ביט".
הבנת שפת האסיפה
Assembly Language היא שפת תכנות ברמה נמוכה הניתנת לקריאה על ידי אדם, המבצעת מניפולציה ישירה של האופקודים והאופרנדים של ארכיטקטורת ה-CPU.
הנה דוגמה לקוד הרכבה פשוט באמצעות ערכת ההוראות שהוצגה קודם לכן:
1. LODA #5
2. LODB #7
3. הוסף R3
4. STRE M12
גוש קוד זה מאוחסן ב-RAM עד שה-CPU מביא כל שורת קוד בזה אחר זה.
מחזור האחזור, הפענוח והביצוע של המעבד
ה-CPU מבצע קוד באמצעות מחזור המכונה Fetch, Decode ו-Execute. רצף זה מראה כיצד מעבד מעבד כל שורת קוד.
לְהָבִיא: מונה ההוראות בתוך ה-CPU לוקח שורת הוראות אחת מ-RAM כדי לאפשר ל-CPU לדעת איזו פקודה לבצע לאחר מכן.
לְפַעֲנֵחַ: ה-Assembler יפענח את גוש הקוד הניתן לקריאה על ידי אדם ומרכיב אותו כקבצים בינאריים מעוצבים כהלכה כדי שהמחשב יוכל להבין.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
לבצע: לאחר מכן, ה-CPU מבצע את הקבצים הבינאריים על-ידי החלת ההוראות המצוינות על-ידי ה-opcode על האופרנדים שסופקו.
המחשב יעשה זאת לבצע זה כדלקמן:
- טען את הרישום הראשון עם 5
- טען את הפנקס השני עם 7
- 5 + 7 = 12, שמור 12 לרישום השלישי
- אחסן את הערך של האוגר השלישי בכתובת RAM M12
המחשב הוסיף שני מספרים בהצלחה ואחסן את הערך בכתובת ה-RAM שצוינה.
גדול! עכשיו אתה יודע איך מחשב מבצע קוד. עם זאת, זה לא נעצר שם.
הולך רחוק יותר
עם החומרה המתאימה, אסמבלר ושפת אסמבלי, אנשים יכלו לבצע קוד בקלות סבירה. עם זאת, ככל שגם התוכנות וגם חומרת המחשב נעשו מורכבות עוד יותר, מהנדסים ומתכנתים נאלצו לחשוב על דרך להפוך את התכנות לפחות מייגע ולהבטיח תאימות עם סוגים שונים של CPU ארכיטקטורה. כך נוצרו מהדרים ומתורגמנים.
מה זה מהדר ומתורגמן?
המהדר והמתורגמן הן תוכנות תרגום שלוקחות קוד מקור (תוכניות העשויות מ שפות תכנות ברמה גבוהה) ותתרגם אותן לשפת assembly, שאותה האסמבלר יפענח. לבינארי.
א מְתוּרגְמָן ייקח שורת קוד אחת ויבצע אותה מיד. זה משמש בדרך כלל על מסופים כמו מסוף Linux Bash Shell ומסוף Windows PowerShell. מעולה לביצוע משימות חד פעמיות פשוטות.
לעומת זאת, א מַהְדֵר ייקח מספר שורות קוד ויקמפל אותן כדי ליצור תוכנית. דוגמאות לתוכניות אלו יהיו Microsoft Word, Photoshop, Google Chrome, Safari ו-Steam.
עם יצירת המהדרים והמתורגמנים, נוצרו שפות תכנות ברמה גבוהה.
שפות תכנות ברמה גבוהה
שפות תכנות ברמה גבוהה הן כל שפה לאחר קוד ההרכבה. חלק מהשפות הללו שאולי אתה מכיר הן C, Python, Java ו- Swift. שפות התכנות הללו הפכו את התכנות לקריאה יותר ולפשוטה יותר משפת האסמבלי.
הנה השוואה זה לצד זה כדי להמחיש כמה קשה יותר לתכנת בהרכבה מאשר בשפת תכנות ברמה גבוהה כמו Python:
שני הקודים ידפיסו "Hello World".
עם שפות תכנות אלו, מפתחים יכולים לתכנת משחקים, אתרים, אפליקציות ומנהלי התקנים בפרקי זמן סבירים.
קָשׁוּר: פייתון נגד. Java: השפה הטובה ביותר לשנת 2022
מחשבים יכולים להפעיל את כל סוגי הקוד
מחשב הוא מכשיר שיכול לקרוא רק בינארי. קבצים בינאריים אלה מיוצרים על ידי יותר ממיליארד טרנזיסטורים בגודל מיקרוסקופי ארוזים בתוך מעבד. סידור הטרנזיסטור מכתיב את ה-ISA (Instruction Set Architecture) של המעבד, המספק מאות הוראות שמעבד יכול לבצע בקלות ברגע שה-opcode שלו נקרא החוצה באמצעות קוד. מפתחים מערבבים ומתאימים את ההוראות הללו ברצף, מה שיוצר תוכנית שלמה כגון מנועי משחק, דפדפני אינטרנט, יישומים ומנהלי התקנים.
מעבד מבצע קוד באמצעות רצף המכונה מחזור אחזור, פענוח, ביצוע. ברגע שחתיכת קוד נטענת ל-RAM, ה-CPU יביא את התוכן שלו בזה אחר זה, יפענח את התוכן לבינארי דרך האסמבלר, ואז יבצע את הקוד.
מכיוון שהאסמבלר יכול לתרגם רק קוד שנעשה במפורש עבור ארכיטקטורת המעבד, מהדרים ו מתורגמנים נבנו על גבי האסמבלר (בדומה למתאם) כדי לעבוד על סוגים שונים של CPU ארכיטקטורה. מתורגמן ייקח פקודה אחת ויבצע אותה מיד. לעומת זאת, מהדר ייקח את כל הפקודות שלך ויקמפל אותן לתוכנית לשימוש חוזר.
שפות תכנות ברמה גבוהה כגון Python, C ו-Java נוצרו כדי להפוך את התכנות לקל, מהיר ונוח יותר. הרוב הגדול של המתכנתים כבר לא צריך לקודד בשפת assembly, שכן שפות התכנות הקלות לשימוש שלהם ניתנות לתרגום ל-assembly באמצעות מהדר.
אני מקווה שכעת יש לך הבנה טובה יותר של היסודות של מחשבים וכיצד הם מבצעים קוד.
זו שאלה פשוטה, אבל שאלה שכולם מתלבטים בה מדי פעם: איך המחשב הזה שלפניכם עובד בעצם?
קרא הבא
- טכנולוגיה מוסברת
- תִכנוּת
- מעבד מחשב
- מעבד
בהשתוקקות ללמוד איך הדברים עובדים, ג'יריק מאנינג התחיל להתעסק עם כל מיני מכשירים אלקטרוניים ואנלוגיים במהלך שנות העשרה המוקדמות שלו. הוא למד מדע משפטי באוניברסיטת בגויו, לשם התוודע לזיהוי פלילי מחשבים ואבטחת סייבר. כרגע הוא עושה הרבה לימוד עצמי ומתעסק בטכנולוגיה כדי להבין איך הם עובדים ואיך אנחנו יכולים להשתמש בהם כדי להפוך את החיים לקלים יותר (או לפחות מגניבים יותר!).
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
לחץ כאן כדי להירשם