המחשב ומערכת ההפעלה מערך שיעור למרצה

מערך שיעור: מערכת הפעלה ו-Terminal

משך: יום לימוד מלא — 6 שעות אקדמיות (270 דקות).

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

בסוף השיעור הסטודנטים צריכים:

  1. להסביר את חמשת התפקידים של מערכת ההפעלה ואת ההבדל בין Program ל-Process.
  2. להבחין בין נתיב מלא לנתיב יחסי, ולהסביר למה FileNotFoundError קורה כשמריצים מהתיקייה הלא נכונה.
  3. לנווט, ליצור, להעתיק, להעביר ולמחוק קבצים מה-Terminal בלי עכבר.

דגש קריטי: Current Working Directory. זה המושג שימנע הכי הרבה תקלות בשבועות הבאים (קבצים, JSON, Database). כל הדגמה ביום הזה צריכה לחזור אליו.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
חזרה קצרה על נושא המחשב ומערכת ההפעלה15 דק'3 שאלות לכיתה: RAM מול Storage, מהו PID, Syntax מול Runtime.
מהי מערכת הפעלה + Kernel40 דק'אנלוגיית מנהל הבניין. ציור שכבות: Hardware → Kernel → Programs. להדגים PermissionError אמיתי.
Program מול Process + Scheduling + זיכרון45 דק'worker.py בשני Terminals במקביל. לראות PID שונים ו-counter נפרד. Task Manager / Get-Process.
הפסקה15 דק'
File System, נתיבים, משתמשים והרשאות50 דק'לצייר עץ תיקיות על הלוח. paths_lab.py: להריץ משתי תיקיות שונות ולתת לכיתה לנחש.
הפסקה15 דק'
Terminal ו-Shell55 דק'טבלת PowerShell/Bash על הלוח. “מרוץ תיקיות” בזוגות. להדגיש Tab ו-↑ מההתחלה.
תרגול עצמאי + בדוק את עצמך35 דק'Mini Project: project_check.py. לשים לב לחזרות בקוד, זה גשר ל-DRY בנושא Python.

דגשים להעברת השיעור

  • לא להפוך את היום להרצאה תיאורטית. כל מושג (Process, זיכרון, הרשאה) מקבל הדגמה חיה של דקה-שתיים.
  • Terminal = שריר. הסטודנטים צריכים להקליד הרבה. עדיף פחות פקודות שכל אחד הריץ חמש פעמים מאשר טבלה ענקית שרק הוצגה.
  • אזהרת rm בקול ובבירור: אין סל מחזור. להראות את ההרגל “ls לפני rm”.
  • Windows/Mac: חשוב שכל סטודנט ידע מה ה-Shell שלו. ב-Windows לוודא שה-Terminal של VS Code פותח PowerShell ולא cmd.
  • לא להעמיק ב-ACL של Windows או ב-chmod. המטרה היא הבנת הרעיון של Read/Write/Execute ובעלים, לא ניהול הרשאות.
  • לחזור על ה"למה": כל פעם ש-Python “מבקשת” משהו מה-OS, להשתמש במילה System Call, כדי שתתקבע.
  • Mini Project מכוון לחזרתיות. כשמישהו מתלונן “זה ארוך ומשעמם”, להגיד: “בדיוק! בשבוע הבא נלמד איך לא לכתוב ככה”.

מושגים

מושגהסבר קצר
Operating Systemהתוכנה שמנהלת את משאבי המחשב ומספקת שירותים לתוכנות.
Kernelהליבה המוגנת של ה-OS. רצה ב-Kernel Mode.
User Mode / Kernel Modeהרשאות מוגבלות לתוכנות / גישה מלאה לחומרה.
System Callבקשה של תוכנה מה-Kernel לבצע פעולה מוגנת.
Program / Processקובץ סטטי / מופע רץ עם PID, זיכרון ומצב.
Schedulerרכיב ב-Kernel שמחלק זמן CPU בין תהליכים.
Memory Isolationכל תהליך ניגש רק לזיכרון שלו.
Swap / Page Fileשימוש בדיסק כהמשך ל-RAM כשהוא מתמלא. איטי.
File Systemארגון הדיסק כעץ של תיקיות וקבצים, עם Metadata.
Absolute / Relative Pathנתיב מהשורש / נתיב מהתיקייה הנוכחית.
Current Working Directoryהתיקייה ש-Process “עומד” בה. נתיבים יחסיים נמדדים ממנה.
Permissions (r/w/x)קריאה, כתיבה, הרצה. לפי בעלים, קבוצה ואחרים.
Terminal / Shell / Promptחלון / מפרש פקודות / הטקסט שמחכה לפקודה.

תרגיל חשיבה

שאלת פתיחה (לפני חלק File System): “יש לי קובץ data.txt ליד הסקריפט שלי. כשאני מריץ עם כפתור Run ב-VS Code, הסקריפט אומר שהקובץ לא קיים. כשאני מריץ מה-Terminal, הוא מוצא אותו. איך ייתכן שאותו קוד מתנהג אחרת?”

מהלך:

  1. לאסוף השערות (באג ב-VS Code? הקובץ לא נשמר?).
  2. להריץ מול הכיתה את שתי הדרכים עם print(os.getcwd()) בתחילת הקוד.
  3. לגלות יחד שכפתור Run מריץ לפעמים מתיקיית הפרויקט הראשית (kodkod6), ולא מתיקיית הקובץ.
  4. לשאול: “אז ממה נמדד נתיב יחסי?” ולהגיע ל-Current Working Directory.

מה המרצה מראה בסוף: ציור של עץ התיקיות, עם חץ “אני עומד כאן” שזז בין kodkod6 ל-week-1, ואיך אותו נתיב יחסי data.txt מצביע פעם על קובץ קיים ופעם על כלום. משפט סיום: “כשקובץ ‘לא נמצא’, השאלה הראשונה היא: מאיפה הרצתי?”