את ההקדמה הזו כפתיחה לחומרי שבוע 12, אבל היא יצאה הרבה יותר ארוכה ממה שרציתי, ובסוף לא הרגשתי שיש לה פוטנציאל קישור מספיק טוב לחומר החדש.
עמדתי לגנוז אותה, אבל במקום זה נראה לי נחמד יותר לפרסם אותה עבור מי שמעוניין.
אחת השאלות הראשונות שאני שואל כשמגיעים אלי אנשים לראיון היא כנראה השאלה האהובה עליי בכל הזמנים.
זו השאלה:
קמת בבוקר עם חשק בלתי נשלט למילקשייק.
את פותחת את המחשב, מקלידה “מילקשאַקע רעסאַפּיז” (ביידיש זה טעים יותר) ונכנסת לתוצאה הראשונה.
כחצי שעה אחרי את לוגמת מכוס גבוהה מילקשייק נפלא, מבלי שהקדשת מחשבה לתהליך הטכנולוגי המשוגע שקרה כרגע מאחורי הקלעים.נסי לתאר בצורה הטובה ביותר מה התרחש מאחורי הקלעים מרגע שהקלדת את הכתובת של גוגל ועד שנכנסת לתוצאת החיפוש. נסי להיכנס לפרטי פרטים.
ובאמת, קשה מאוד להעריך את כמות הדברים המטורפים שקורים מאחורי הקלעים ומאפשרים לנו לקבל מתכוני מילקשייק תוך כמה מאיות שנייה.
הסיבה שאני מחבב את השאלה הזו היא שיש כמות פנומנלית של דברים שקורים מאחורי הקלעים, ומאחורי כל אחד מהם עולם שלם ועמוס בתוכן. כל אחד יכול להתחבר לחלק כלשהו בתהליך ולפרק אותו עוד ועוד. ככה אני מקבל הצצה על החוזקות של המועמד, ולפי השאלה הזו אני מכוון את המשך הראיון.
כשהתחלתי לכתוב את הפרק הזה חשבתי שיהיה נחמד לתת לכם סקירה של התחנות המעניינות במסע, מרגע הקלדת הכתובת של “גוגל” ועד הלחיצה על הקישור בגוגל, שמוביל לאתר של מתכון המילקשייק. לנסח “תשובה מושלמת” לשאלת הראיונות שאני שואל.
אבל אז התחלתי לכתוב, ואחרי התחנה הראשונה הבנתי שהולך לצאת לי ספר באורך של כל מה שכתבתי עד עכשיו בקורס.
השארתי לכם את הפרק הראשון כדי שתוכלו להתרשם מהמורכבות של מה שקורה בפעולה שנראית לנו הכי פשוטה ויומיומית (פרק אחד מתוך מה שהיה אמור להיות כ־15 פרקים). הנה הוא:
מה קורה כשמקלידים מילקשאַקע רעסאַפּיז בגוגל?
מה קורה כשמקלידים מילקשאַקע רעסאַפּיז בגוגל?
תחנה ראשונה: המקלדת
תחילה נרצה להכנס לגוגל. נקליד g
, ובכך נפעיל לחץ פיזי על המקש g
שבמקלדת.
לשם הפשטות, נניח שמדובר במקלדת USB ממוצעת.
- למקלדת זורם מתח חשמלי של 5 וולט שיציאת ה־USB מהמחשב מספקת לתוך אחד הפינים בבקר המקלדת.
- הלוח של המקלדת הוא למעשה מעגל חשמלי מודפס. ליד כל שורת מקשים במקלדת עובר קו מודפס שבו יכול לעבור זרם חשמלי. בשכבה נפרדת, ליד כל טור מקשים עובר קו מודפס שבו יכול לעבור זרם חשמלי. כל מקש במקלדת “מחובר” לטור ולשורה במקלדת, במעין צורה טבלאית.
- בקר המקלדת, בכל זמן נתון, שולח זרם חשמלי רק באחד מהטורים ובאחת מהשורות. אם נניח שיש במקלדת n שורות ו־m טורים, המקלדת תשלח זרם ל־n*m שילובים שונים של טור ושורה.
- בתחתית כפתור המקלדת ישנו חומר מוליך כמו פחמן, או מעין קרום ש המקלדת דוחף לעבר המעגל החשמלי. דחיפת החומר כלפי מטה מאפשרת סגירת מעגל חשמלי, ולפי השורה והטור אליהם נשלח זרם חשמלי, הבקר החשמלי של המקלדת מזהה איזה מקש נלחץ.
- כיוון שמדובר בחלקים קטנים, יתכן שבגלל תזוזות קטנות תרשמנה לחיצות רבות על המקש, בזמן שהמשתמש לחץ עליו פעם אחת בלבד. המקלדת מנטרלת את הרעשים הללו ומאחדת אותם ללחיצה אחת (תהליך שנקרא debouncing).
- המקלדת שומרת מספר שמזהה את המקש שנלחץ, ונקרא Scancode. עבור מקלדות USB, המספר שמייצג כל מקש מוגדר בתקן שנקרא USB HID. את טבלת המספרים ניתן למצוא כאן בעמוד 83.
- היא מנסחת “הודעה” למחשב שמורכבת מבייט אחד (8 פעמים 0 או 1) שמייצג את מצבם של המקשים המיוחדים במקלדת (CTRL, ALT, SHIFT, CAPSLOCK, WINKEY), בייט אחד של ערכים שמורים לשימוש עתידי, ועוד 6 בייט עבור עד 6 מקשים לחוצים בו זמנית – כל בייט מכיל Scancode של מקש לחוץ כלשהו (או 0 עבור מקש לא לחוץ). להודעה יתווסף מידע שיעזור למחשב לוודא את תקינות ההודעה שהגיעה אליו.
- המחשב יבקש מידע מהמקלדת כל כמה אלפיות השנייה, ואם ישנו מידע, המקלדת תעביר אותו ל־SIE (או Serial Interface Engine) של ה־USB, שימיר את המידע לחבילות קטנות שתואמות את הפרוטוקול של USB.
- המידע הזה ישלח על גבי ה־USB על גבי 2 פינים,
D+
ו־D-
בקידוד NRZI: מצב K הוא מצב בו הזרם ב־D+
הוא 3 וולט וב־D-
הזרם הוא 0 וולט, ומצב J הוא מצב בו הזרם ב־D+
הוא 0 וולט והזרם ב־D-
הוא 3 וולט. החלפה ממצב J ל־K או להיפך מייצגת את הביט 0, בזמן שהישארות באותו מצב מייצגת את הביט 1. אם הספרה 1 הופיעה 6 פעמים ברצף, תשלח הספרה 0 כדי לוודא שאין טעות סנכרון. - האות החשמלי מגיע לבקר ה־USB במחשב, מפוענח על ידיו ועובר לטיפול מערכת ההפעלה.
בווינדוס:
- מנהל התקן בשם
KBDHID.sys
יקבל את ההודעה ויחלץ ממנה את ה־Scancode שהמקלדת העבירה. - מנהל ההתקן
KBDHID.sys
יעביר את ה־Scancode למנהל ההתקןKBDCLASS.sys
, שתעביר אותו למנהלי התקן נוספים שמטרתם (filter drivers) שעשויים לשנות את התוצר הסופי שיועבר למערכת ההפעלה אם נראה להם לנכון. - התוצר יועבר למנהל הממשק הגראפי,
Win32K.sys
, שבעזרת הפונקציהGetForegroundWindow
תחזיר את הכתובת בזיכרון של שורת הכתובות בדפדפן שלנו. לולאת ההודעות של מערכת ההפעלה תעביר לחלון הרלוונטי הודעה בעזרת הפונקציהSendMessage
. בהודעה ידווח שנלחץ מקש (WM_KEYDOWN
) עם ה־Scancode של g, והאם היו מקשים מיוחדים שנלחצו יחד איתו. - הפונקציה שמשויכת לכתובת של שורת הכתובות בדפדפן ותפקידה לקרוא הודעות נקראת כדי לעבד את ההודעה שנשלחה.
מי שרוצה לקרוא על התהליך לפרטי פרטים, יכול להציץ כאן ולקבל תמונת מציאות לא רעה.