ההקדמה הגנוזה לשבוע 12

תגיות:

את ההקדמה הזו כפתיחה לחומרי שבוע 12, אבל היא יצאה הרבה יותר ארוכה ממה שרציתי, ובסוף לא הרגשתי שיש לה פוטנציאל קישור מספיק טוב לחומר החדש.
עמדתי לגנוז אותה, אבל במקום זה נראה לי נחמד יותר לפרסם אותה עבור מי שמעוניין.


אחת השאלות הראשונות שאני שואל כשמגיעים אלי אנשים לראיון היא כנראה השאלה האהובה עליי בכל הזמנים.

זו השאלה:

קמת בבוקר עם חשק בלתי נשלט למילקשייק.
את פותחת את המחשב, מקלידה “מילקשאַקע רעסאַפּיז” (ביידיש זה טעים יותר) ונכנסת לתוצאה הראשונה.
כחצי שעה אחרי את לוגמת מכוס גבוהה מילקשייק נפלא, מבלי שהקדשת מחשבה לתהליך הטכנולוגי המשוגע שקרה כרגע מאחורי הקלעים.

נסי לתאר בצורה הטובה ביותר מה התרחש מאחורי הקלעים מרגע שהקלדת את הכתובת של גוגל ועד שנכנסת לתוצאת החיפוש. נסי להיכנס לפרטי פרטים.

ובאמת, קשה מאוד להעריך את כמות הדברים המטורפים שקורים מאחורי הקלעים ומאפשרים לנו לקבל מתכוני מילקשייק תוך כמה מאיות שנייה.
הסיבה שאני מחבב את השאלה הזו היא שיש כמות פנומנלית של דברים שקורים מאחורי הקלעים, ומאחורי כל אחד מהם עולם שלם ועמוס בתוכן. כל אחד יכול להתחבר לחלק כלשהו בתהליך ולפרק אותו עוד ועוד. ככה אני מקבל הצצה על החוזקות של המועמד, ולפי השאלה הזו אני מכוון את המשך הראיון.


כשהתחלתי לכתוב את הפרק הזה חשבתי שיהיה נחמד לתת לכם סקירה של התחנות המעניינות במסע, מרגע הקלדת הכתובת של “גוגל” ועד הלחיצה על הקישור בגוגל, שמוביל לאתר של מתכון המילקשייק. לנסח “תשובה מושלמת” לשאלת הראיונות שאני שואל.
אבל אז התחלתי לכתוב, ואחרי התחנה הראשונה הבנתי שהולך לצאת לי ספר באורך של כל מה שכתבתי עד עכשיו בקורס.
השארתי לכם את הפרק הראשון כדי שתוכלו להתרשם מהמורכבות של מה שקורה בפעולה שנראית לנו הכי פשוטה ויומיומית (פרק אחד מתוך מה שהיה אמור להיות כ־15 פרקים). הנה הוא:

מה קורה כשמקלידים מילקשאַקע רעסאַפּיז בגוגל?

מה קורה כשמקלידים מילקשאַקע רעסאַפּיז בגוגל?

תחנה ראשונה: המקלדת

תחילה נרצה להכנס לגוגל. נקליד g, ובכך נפעיל לחץ פיזי על המקש g שבמקלדת.
לשם הפשטות, נניח שמדובר במקלדת USB ממוצעת.

  1. למקלדת זורם מתח חשמלי של 5 וולט שיציאת ה־USB מהמחשב מספקת לתוך אחד הפינים בבקר המקלדת.
  2. הלוח של המקלדת הוא למעשה מעגל חשמלי מודפס. ליד כל שורת מקשים במקלדת עובר קו מודפס שבו יכול לעבור זרם חשמלי. בשכבה נפרדת, ליד כל טור מקשים עובר קו מודפס שבו יכול לעבור זרם חשמלי. כל מקש במקלדת “מחובר” לטור ולשורה במקלדת, במעין צורה טבלאית.
  3. בקר המקלדת, בכל זמן נתון, שולח זרם חשמלי רק באחד מהטורים ובאחת מהשורות. אם נניח שיש במקלדת n שורות ו־m טורים, המקלדת תשלח זרם ל־n*m שילובים שונים של טור ושורה.
  4. בתחתית כפתור המקלדת ישנו חומר מוליך כמו פחמן, או מעין קרום ש המקלדת דוחף לעבר המעגל החשמלי. דחיפת החומר כלפי מטה מאפשרת סגירת מעגל חשמלי, ולפי השורה והטור אליהם נשלח זרם חשמלי, הבקר החשמלי של המקלדת מזהה איזה מקש נלחץ.
  5. כיוון שמדובר בחלקים קטנים, יתכן שבגלל תזוזות קטנות תרשמנה לחיצות רבות על המקש, בזמן שהמשתמש לחץ עליו פעם אחת בלבד. המקלדת מנטרלת את הרעשים הללו ומאחדת אותם ללחיצה אחת (תהליך שנקרא debouncing).
  6. המקלדת שומרת מספר שמזהה את המקש שנלחץ, ונקרא Scancode. עבור מקלדות USB, המספר שמייצג כל מקש מוגדר בתקן שנקרא USB HID. את טבלת המספרים ניתן למצוא כאן בעמוד 83.
  7. היא מנסחת “הודעה” למחשב שמורכבת מבייט אחד (8 פעמים 0 או 1) שמייצג את מצבם של המקשים המיוחדים במקלדת (CTRL, ALT, SHIFT, CAPSLOCK, WINKEY), בייט אחד של ערכים שמורים לשימוש עתידי, ועוד 6 בייט עבור עד 6 מקשים לחוצים בו זמנית – כל בייט מכיל Scancode של מקש לחוץ כלשהו (או 0 עבור מקש לא לחוץ). להודעה יתווסף מידע שיעזור למחשב לוודא את תקינות ההודעה שהגיעה אליו.
  8. המחשב יבקש מידע מהמקלדת כל כמה אלפיות השנייה, ואם ישנו מידע, המקלדת תעביר אותו ל־SIE (או Serial Interface Engine) של ה־USB, שימיר את המידע לחבילות קטנות שתואמות את הפרוטוקול של USB.
  9. המידע הזה ישלח על גבי ה־USB על גבי 2 פינים, D+ ו־D- בקידוד NRZI: מצב K הוא מצב בו הזרם ב־D+ הוא 3 וולט וב־D- הזרם הוא 0 וולט, ומצב J הוא מצב בו הזרם ב־D+ הוא 0 וולט והזרם ב־D- הוא 3 וולט. החלפה ממצב J ל־K או להיפך מייצגת את הביט 0, בזמן שהישארות באותו מצב מייצגת את הביט 1. אם הספרה 1 הופיעה 6 פעמים ברצף, תשלח הספרה 0 כדי לוודא שאין טעות סנכרון.
  10. האות החשמלי מגיע לבקר ה־USB במחשב, מפוענח על ידיו ועובר לטיפול מערכת ההפעלה.

בווינדוס:

  1. מנהל התקן בשם KBDHID.sys יקבל את ההודעה ויחלץ ממנה את ה־Scancode שהמקלדת העבירה.
  2. מנהל ההתקן KBDHID.sys יעביר את ה־Scancode למנהל ההתקן KBDCLASS.sys, שתעביר אותו למנהלי התקן נוספים שמטרתם (filter drivers) שעשויים לשנות את התוצר הסופי שיועבר למערכת ההפעלה אם נראה להם לנכון.
  3. התוצר יועבר למנהל הממשק הגראפי, Win32K.sys, שבעזרת הפונקציה GetForegroundWindow תחזיר את הכתובת בזיכרון של שורת הכתובות בדפדפן שלנו. לולאת ההודעות של מערכת ההפעלה תעביר לחלון הרלוונטי הודעה בעזרת הפונקציה SendMessage. בהודעה ידווח שנלחץ מקש (WM_KEYDOWN) עם ה־Scancode של g, והאם היו מקשים מיוחדים שנלחצו יחד איתו.
  4. הפונקציה שמשויכת לכתובת של שורת הכתובות בדפדפן ותפקידה לקרוא הודעות נקראת כדי לעבד את ההודעה שנשלחה.

מי שרוצה לקרוא על התהליך לפרטי פרטים, יכול להציץ כאן ולקבל תמונת מציאות לא רעה.

22 לייקים

מגניב, אני מנחש שזה ההסבר המקוצר?
אין התייחסות כאן לזיכרון, מעבד וכל מה שקורה ב"קופסת המחשב" מעבר למערכת הפעלה

כמו שכתבתי, זה פרק 1 מתוך 15 שתוכננו שטכנית היה אפשר להרחיב לספר :slight_smile:
תחשוב שהמטרה הייתה להסביר על התהליך של לחפש בגוגל ולהכנס לתוצאת חיפוש, ובפועל מתוך זה הוסבר על מה קורה כשלוחצים g :dizzy_face:

3 לייקים

תמיד מסקרן להבין איך הדברים עובדים ברקע! תודה.

לייק 1

צריך להכניס אפשרות לבחור בין :heart: לבין :rofl: יש תגובות פרייסלס שדורשות את זה

לייק 1

ים זה מטורף!

מאיפה רכשת כזה הקיף של ידע? גם על מערכות הפעלה גם על חומרה?

אני מאוכזב.
פספסת את כל החלק החשוב של זרימת הנוירונים מהמוח עד לקצה האצבע והמרת גליקוגן לאנרגיה.

חבל, כמעט קיבלתי אותך לעבודה

7 לייקים

אז מתי אנחנו רואים את הקיקסטארטר לספר החדש שלך? :grimacing:

לייק 1

תודה!
אני לא חושב שזה כישרון מיוחד, זה פשוט המון זמן בתחום (וגם פה היו דברים שהייתי צריך לגגל ולחקור).

אני חושב שזה יהיה הפרויקט האישי שלך בשביל התעודה :slight_smile:

עוד כמה שנים, אחרי שאני אצבור מספיק אנרגיה מחדש להתחיל משהו בסדר גודל הזה XD

6 לייקים

מסקרן מאוד…
השאלה דווקא הכווינה אותי לנושא שעולה לי לא מעט -
כל ידע והבנה עמוקה במערכות הפעלה נראה לי לאחרונה כבסיסי וחשוב לכל השואף לתכנת במסגרת תעסוקתית ?
האם מומלץ פשוט להתמחות בבסיס של המערכת הפעלה שעליה אני עובד? או לנסות ולהכיר כמה מערכות ברמה בסיסית…
יש המלצה על איזה קורס שמומלץ בתחום מערכות ההפעלה?

לייק 1

תלוי במה את שואפת להיות מועסקת.
אם בפייתון/Frontend — אין שום צורך לדעת מה קורה מתחת למכסה המנוע ברזולוציה שפירטתי למעלה.
מערכת ההפעלה היא בעיקר כלי שאת עובדת עליו וצריכה לדעת לתפעל לרמה שבה היא לא מפריעה לשטף העבודה שלך.

כן ברור לי שלא ברזולוציה שמופיע בתהליך למעלה.
אבל יוצא לי לאחרונה להבין שהקשר עם המערכת הפעלה חשוב לנושאים שקשורים לידע הרחב יותר - בנושאים עקיפים לעיסוק בפייתון . (התקנות, CMD, ועוד ועוד) ולכן הרגשתי את הצורך
אקרא קצת יותר

ד"א אני שואף להיות מועסק(ולא שואפת) :slight_smile:
תודה !

לייק 1