מערכת ההפעלה: Kernel, תהליכים, קבצים והרשאות

מטרות השיעור
  • להסביר מהי מערכת הפעלה ולמה אי אפשר בלעדיה
  • למנות את חמשת התפקידים המרכזיים שלה — תהליכים, זיכרון, קבצים, משתמשים והרשאות, חומרה
  • להבחין בבירור בין Program ל-Process
  • להסביר איך כמה תהליכים “רצים במקביל” גם על מעט ליבות (Scheduling)
  • להסביר מהו File System ולתאר את מבנה העץ של תיקיות
  • להבחין בין נתיב מלא (Absolute) לנתיב יחסי (Relative), ולהבין את . ו-..

מה בשיעור

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

  1. פרק ראשון — מהי מערכת הפעלה ומה זה Kernel
  2. פרק שני — Program לעומת Process וניהול זיכרון
  3. פרק שלישי — File System, משתמשים והרשאות

פרק ראשון: מהי מערכת הפעלה ומה זה Kernel

מה נלמד?

בנושא המחשב ומערכת ההפעלה ראינו שמערכת ההפעלה “מוצאת את הקובץ, יוצרת Process וטוענת אליו את התוכנה”. היום נכיר אותה כמו שצריך:

  • מהי מערכת הפעלה (Operating System, ובקיצור OS).
  • מה היא מנהלת ולמה.
  • מהו Kernel — הליבה של מערכת ההפעלה.
  • איך הקוד שלנו “מבקש” ממנה דברים, דרך System Call.

למה צריך את זה?

כל print, כל פתיחת קובץ, כל חיבור לאינטרנט ובנושא Backend ומסדי נתונים כל שרת — הכול עובר דרך מערכת ההפעלה. כשתקבלו שגיאה כמו PermissionError או Address already in use, היא מגיעה ממערכת ההפעלה. כדי להבין את השגיאה צריך להבין מי שלח אותה ולמה.

בנוסף, רוב השרתים בעולם רצים על Linux. גם אם אתם עובדים ב-Windows, בעבודה תפגשו Linux, ולכן חשוב להבין את הרעיונות המשותפים לכל מערכות ההפעלה.

הסבר מהבסיס

מהי מערכת הפעלה?

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

דוגמאות: Windows, macOS, Linux (Ubuntu, Debian…), Android, iOS.

אנלוגיה: מנהל בניין

דמיינו בניין משרדים עם הרבה חברות (תוכנות). יש חשמל, מעליות, חדרי ישיבות ומחסן (משאבים: CPU, RAM, דיסק, רשת). אם כל חברה הייתה ניגשת ישירות ללוח החשמל ולוקחת כמה שבא לה — היה כאוס. מנהל הבניין (מערכת ההפעלה) מחלק את המשאבים, מוודא שאף חברה לא נכנסת למשרד של חברה אחרת, ומחזיק את המפתחות לכל דלת.

חמשת התפקידים המרכזיים

תפקידמה זה אומרדוגמה מהקוד שלנו
ניהול תהליכים (Process Management)יוצרת תהליכים, מחלקת ביניהם זמן CPU, מסיימת אותם.כל python file.py יוצר Process חדש.
ניהול זיכרון (Memory Management)נותנת לכל תהליך אזור RAM משלו ומונעת מתהליך אחד לגעת בזיכרון של אחר.המשתנים שלנו חיים באזור שמערכת ההפעלה הקצתה.
ניהול קבצים (File System)מארגנת את הדיסק בתיקיות וקבצים, וקוראת וכותבת עבורנו.פתיחת קובץ, שמירה, מחיקה.
משתמשים והרשאות (Users & Permissions)מי מחובר, ומה מותר לו לעשות.PermissionError כשמנסים לכתוב לתיקיית מערכת.
ניהול חומרה (Device Management)מדברת עם המקלדת, המסך, כרטיס הרשת והדיסק דרך Drivers.print מגיע למסך, ובקשת HTTP יוצאת דרך כרטיס הרשת.

מהו Kernel?

Kernel (גרעין / ליבה) הוא החלק המרכזי והמוגן ביותר של מערכת ההפעלה. הוא נטען ראשון ל-RAM ונשאר שם כל הזמן. הוא זה שבאמת מבצע את חמשת התפקידים שלמעלה.

כל השאר, כמו שולחן העבודה, סייר הקבצים, ה-Terminal והדפדפן, הן תוכנות רגילות שרצות “מעל” ה-Kernel.

Kernel Mode מול User Mode

המעבד יודע לעבוד בשני מצבים:

  • Kernel Mode — גישה מלאה לכל החומרה ולכל הזיכרון. רק ה-Kernel רץ כך.
  • User Mode — גישה מוגבלת. כל התוכנות שלנו, כולל Python, רצות כך.

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

System Call — לבקש מה-Kernel

אז איך תוכנה ב-User Mode כותבת לקובץ או שולחת מידע לרשת? היא מבקשת מה-Kernel. הבקשה הזו נקראת System Call (קריאת מערכת).

Your Python code:       print("Hi")
        │
Python interpreter:     "I need to write 'Hi' to the screen"
        │   System Call (write)
        ▼
Kernel (Kernel Mode):   checks permissions → talks to the screen driver
        │
        ▼
Hardware:               the text appears
מילון
  • Operating System (OS) — תוכנה שמנהלת את משאבי המחשב.
  • Kernel — הליבה המוגנת של ה-OS. רצה תמיד ומבצעת את הניהול בפועל.
  • Driver — תוכנה קטנה שמלמדת את ה-Kernel לדבר עם רכיב חומרה מסוים.
  • System Call — בקשה של תוכנה מה-Kernel לבצע פעולה מוגנת.
  • User Mode / Kernel Mode — מצב מוגבל לתוכנות רגילות / מצב מלא ל-Kernel.

מערכות הפעלה נפוצות

מערכת הפעלהאיפה פוגשים אותהה-Shell של ה-Terminal
Windowsרוב המחשבים האישייםPowerShell
macOSמחשבי Applezsh
Linuxרוב השרתים בענן, ומחשבים של מפתחיםBash
Android / iOSטלפונים וטאבלטים—

כולן עושות את אותם חמשת התפקידים — תהליכים, זיכרון, קבצים, משתמשים והרשאות, חומרה — ולכולן יש Kernel. ההבדלים הם בעיקר בממשק, בפקודות של ה-Terminal ובמבנה התיקיות (למשל C:\ ב-Windows מול / ב-Mac ו-Linux).

למה זה חשוב למפתחים? קוד שאתם כותבים על Windows ירוץ בסוף, הרבה פעמים, על שרת Linux בענן. לכן כדאי להכיר את ההבדלים — ולכתוב קוד שלא תלוי במערכת הפעלה אחת.

טעות נפוצה

הטעות: לנסות לגעת בקבצי מערכת “כדי לבדוק”.

תוכנה של משתמש רגיל מנסה, למשל, למחוק קובץ ששייך למערכת ההפעלה (בתיקייה C:\Windows\System32). מה שקורה:

  1. התוכנה רצה ב-User Mode, ולכן היא לא ניגשת לדיסק בעצמה — היא שולחת System Call ל-Kernel.
  2. ה-Kernel בודק הרשאות, ורואה שלמשתמש הרגיל אין הרשאת כתיבה לקובץ הזה.
  3. הבקשה נדחית, והתוכנה מקבלת שגיאת הרשאה (“Access is denied” / PermissionError).

וזה טוב: ההרשאות מגינות על המחשב מטעויות של משתמשים ומתוכנות זדוניות. שגיאת הרשאה לא מגיעה מהתוכנה שלכם — היא מגיעה ממערכת ההפעלה, שסירבה.

סיכום

  • מערכת הפעלה מנהלת את משאבי המחשב: תהליכים, זיכרון, קבצים, משתמשים והרשאות, וחומרה.
  • Kernel הוא הלב המוגן שלה ורץ ב-Kernel Mode. התוכנות שלנו רצות ב-User Mode.
  • תוכנה מבקשת שירות מה-Kernel דרך System Call: כתיבה למסך, פתיחת קובץ, תקשורת.
  • שגיאות הרשאה מגיעות ממערכת ההפעלה — היא זו שבודקת ומסרבת.
  • Windows, macOS ו-Linux במחשבים ובשרתים, Android ו-iOS בטלפונים — כולן עם אותם תפקידים בסיסיים.

דוקומנטציה רשמית

פרק שני: Program לעומת Process וניהול זיכרון

מה נלמד?

  • מה ההבדל בין Program (תוכנה) ל-Process (תהליך).
  • איך מערכת ההפעלה מריצה עשרות תהליכים “בבת אחת” — Scheduling.
  • איך היא מנהלת את ה-RAM — Memory Management.
  • איך רואים ועוצרים תהליכים מה-Terminal.

למה צריך את זה?

  • בנושא Backend ומסדי נתונים נריץ שרת. שרת הוא Process שלא נגמר. אם תריצו אותו פעמיים, השני ייכשל, כי הראשון עדיין רץ ותופס את הכתובת שלו. בלי להבין Process זה נראה כמו קסם.
  • כשתוכנית “נתקעת”, צריך לדעת איך למצוא את התהליך ולעצור אותו.
  • Memory Leak (דליפת זיכרון), כלומר תוכנית שהזיכרון שלה רק גדל, היא באג שמחפשים בעזרת כלי ניטור תהליכים.

הסבר מהבסיס

Program — המתכון. Process — הבישול.

  • Program = קובץ על ה-Storage שמכיל הוראות. הוא סטטי: לא עושה כלום, רק שוכב על הדיסק. דוגמאות: python.exe, chrome.exe, hello.py.
  • Process = מופע רץ של תוכנה. הוא דינמי: יש לו זיכרון ב-RAM, PID, ומצב (רץ / ממתין / מסתיים).

נקודה חשובה: מתוכנה אחת אפשר להריץ כמה תהליכים במקביל. פתחתם 3 חלונות של VS Code? יש תוכנה אחת ו-3 תהליכים (ובפועל יותר, כי דפדפנים ועורכים מודרניים מפצלים את עצמם לכמה תהליכים).

אנלוגיה

Program = מתכון לעוגה שכתוב בספר. Process = עוגה שנאפית עכשיו בתנור. מאותו מתכון אפשר לאפות שלוש עוגות במקביל בשלושה תנורים. לכל אחת יש מצב משלה: אחת כבר תפחה, אחת עוד בתחילת הדרך.

מה יש לכל Process?

רכיבהסבר
PIDמספר מזהה ייחודי.
Memory Spaceאזור RAM פרטי: הקוד, המשתנים והנתונים.
Stateמצב: Running (רץ על CPU), Ready (ממתין לתורו), Waiting (ממתין למשהו חיצוני, כמו קובץ או רשת).
Ownerאיזה משתמש הריץ אותו, וזה קובע את ההרשאות שלו.
Parentאיזה תהליך יצר אותו. למשל: ה-Terminal הוא ה-Parent של python.

Scheduling — איך כולם רצים “בבת אחת”?

יש לכם אולי 8 ליבות, אבל רצים במחשב 200 תהליכים. איך?

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

Time →   | P1 | P2 | P3 | P1 | P2 | P3 | P1 | ...
          each slice ≈ a few milliseconds

תהליך שממתין (למשל ל-time.sleep או לתשובה מהרשת) לא מקבל זמן CPU בכלל עד שההמתנה נגמרת. לכן שרת שמחכה לבקשות כמעט לא צורך CPU.

Memory Management — ניהול זיכרון

מערכת ההפעלה עושה שלושה דברים עיקריים עם הזיכרון:

  1. הקצאה (Allocation) — כשנוצר תהליך, ובכל פעם שהוא צריך עוד זיכרון (למשל רשימה שגדלה), ה-OS נותן לו עוד RAM.
  2. בידוד (Isolation) — כל תהליך רואה רק את הזיכרון שלו. תהליך אחד לא יכול לקרוא או לשנות את המשתנים של תהליך אחר. זה מונע מבאג באפליקציה אחת להשחית אפליקציה אחרת.
  3. שחרור (Release) — כשתהליך מסתיים, כל ה-RAM שלו מוחזר למערכת.

ואם נגמר ה-RAM? מערכת ההפעלה מעבירה חלקים שלא בשימוש לדיסק (Swap ב-Linux/Mac, Page File ב-Windows). זה מונע קריסה, אבל המחשב נהיה איטי מאוד, כי הדיסק איטי.

ומה עם Python?

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

עץ תהליכים — מי הפעיל את מי

כל תהליך נוצר על ידי תהליך אחר — ה-Parent (הורה) שלו. כשמריצים תוכנית מה-Terminal, ה-Terminal הוא ההורה:

explorer.exe          PID 4120
└── pwsh.exe          PID 9920   (Terminal)
    └── python.exe    PID 18044  (our program)

לכל תהליך יש PID משלו, ולכל אחד יש גם PPID — ה-PID של ההורה. כשסוגרים את ה-Terminal, בדרך כלל נסגרים גם התהליכים שהוא הפעיל.

פקודות לצפייה ולעצירת תהליכים

את התהליכים אפשר לראות ב-Task Manager, ואפשר גם מה-Terminal. המרצה יציג את הפקודות על המסך:

Windows (PowerShell):

Get-Process                    # list all processes
Get-Process python             # only processes named python
Stop-Process -Id 12345         # stop the process with PID 12345

Mac / Linux (Bash / Zsh):

ps aux                  # list all processes
ps aux | grep python    # filter lines that contain "python"
kill 12345              # stop the process with PID 12345

טעות נפוצה

הטעות: לחשוב ש-Ctrl + C גרם ל"שגיאה". כשעוצרים תוכנית Python שרצה עם Ctrl + C, מופיע משהו כזה:

^C
Traceback (most recent call last):
  ...
KeyboardInterrupt
  • Ctrl + C שולח לתהליך בקשה לעצור — זה לא באג.
  • KeyboardInterrupt אומר: “עצרתם אותי באמצע”.
  • כל ערך שהיה רק ב-RAM של התהליך — אבד, כי הזיכרון שלו שוחרר.

סיכום

  • Program הוא קובץ סטטי על הדיסק. Process הוא מופע רץ שלו, עם PID, זיכרון ומצב.
  • מתוכנה אחת אפשר להריץ כמה תהליכים, ולכל אחד זיכרון מבודד משלו.
  • ה-Scheduler מחלק זמן CPU בפרוסות קטנות, וכך הכול נראה מקבילי.
  • ניהול זיכרון: הקצאה, בידוד ושחרור. כשה-RAM נגמר, משתמשים ב-Swap / Page File, וזה איטי.
  • לכל תהליך יש Parent. עוצרים תוכנית עם Ctrl + C, ותהליך תקוע עם Stop-Process / kill לפי PID.

דוקומנטציה רשמית

פרק שלישי: File System, משתמשים והרשאות

מה נלמד?

  • File System — איך מערכת ההפעלה מארגנת את הדיסק.
  • נתיבים (Paths) — מלא מול יחסי, ומה זה . ו-...
  • משתמשים (Users) — מי מחובר, ומיהו המשתמש “החזק”.
  • הרשאות (Permissions) — מי רשאי לעשות מה עם כל קובץ.

למה צריך את זה?

  • בנושא Python נקרא ונכתוב קבצים מתוך Python. השגיאה הנפוצה ביותר שם היא FileNotFoundError, וכמעט תמיד הסיבה היא נתיב לא נכון.
  • בנושא Backend ומסדי נתונים נשמור Database כקובץ. צריך לדעת איפה הוא נוצר.
  • כשמתקינים כלים מקבלים לפעמים “Access denied” או “Permission denied”. כדאי להבין למה זה קורה, ולא לפתור כל בעיה ב"הרצה כמנהל".

הסבר מהבסיס

File System — מערכת הקבצים

הדיסק עצמו הוא רצף ענק של בתים. File System היא השכבה של מערכת ההפעלה שהופכת את הרצף הזה לקבצים ותיקיות עם שמות, ושומרת לכל קובץ מידע נוסף (Metadata): גודל, תאריך שינוי, בעלים והרשאות.

המבנה הוא עץ (Tree): יש שורש (Root), ממנו יוצאות תיקיות, ובכל תיקייה עוד תיקיות וקבצים.

Windows                         Mac / Linux
C:\                             /
├── Users\                      ├── home/            (Mac: /Users/)
│   └── dana\                   │   └── dana/
│       ├── Desktop\            │       ├── Desktop/
│       └── dev\                │       └── dev/
│           └── kodkod6\        │           └── kodkod6/
├── Program Files\              ├── usr/
└── Windows\                    └── etc/

הבדלים חשובים:

WindowsMac / Linux
שורשאות כונן: C:\ (ויכולים להיות עוד: D:\)שורש אחד: /
מפריד\ (Backslash)/ (Slash)
תיקיית הביתC:\Users\dana/home/dana (Mac: /Users/dana)
אותיות גדולות/קטנותFile.txt = file.txtFile.txt ≠ file.txt (בלינוקס)

תיקיית הבית (Home Directory) היא התיקייה הפרטית של המשתמש. בה, ובתתי-התיקיות שלה, יש לכם הרשאות מלאות. לכן את kodkod6 שמים בתוכה.

נתיב מלא מול נתיב יחסי

  • נתיב מלא (Absolute Path) — מתחיל מהשורש. עובד מכל מקום. C:\Users\dana\dev\kodkod6\week-1\hello.py
  • נתיב יחסי (Relative Path) — מתחיל מהתיקייה הנוכחית. קצר, אבל תלוי איפה עומדים. week-1\hello.py (אם עומדים ב-kodkod6)

שני קיצורים מיוחדים:

  • . (נקודה) = התיקייה הנוכחית.
  • .. (שתי נקודות) = תיקיית האב, תיקייה אחת למעלה.
Standing in: C:\Users\dana\dev\kodkod6\week-1

.              → C:\Users\dana\dev\kodkod6\week-1
..             → C:\Users\dana\dev\kodkod6
..\week-2      → C:\Users\dana\dev\kodkod6\week-2
..\..          → C:\Users\dana\dev
אנלוגיה

נתיב מלא הוא כתובת מלאה: “ישראל, חיפה, רחוב הרצל 10, דירה 3”. שולח מכל מקום בעולם — יגיע. נתיב יחסי הוא הוראת הגעה: “שתי דלתות ימינה מכאן”. עובד רק אם יודעים מאיפה מתחילים.

משתמשים (Users)

מערכת הפעלה תומכת בכמה משתמשים. לכל אחד יש שם, סיסמה, תיקיית בית והרשאות. יש גם משתמשים “מיוחדים”:

  • Administrator (Windows) / root (Linux/Mac) — משתמש-על עם הרשאות מלאות לכל המערכת.
  • משתמשי מערכת — משתמשים שאינם בני אדם. שירותים כמו שרת או Database רצים תחתם, כך שגם אם יפרצו אליהם, הנזק מוגבל.

בעבודה רגילה עובדים כמשתמש רגיל, ומעלים הרשאות רק לפעולה ספציפית: Run as Administrator ב-Windows, sudo בלינוקס/מק.

הרשאות (Permissions)

לכל קובץ ותיקייה יש הרשאות שקובעות מי רשאי לעשות מה. שלוש הפעולות הבסיסיות:

הרשאהבקובץבתיקייה
Read (r)לקרוא את התוכןלראות אילו קבצים יש בה
Write (w)לשנות / למחוקליצור ולמחוק קבצים בתוכה
Execute (x)להריץ כתוכנהלהיכנס אליה (cd)

בלינוקס/מק ההרשאות מוצגות כמחרוזת כמו -rwxr-xr--, ומחולקות לשלוש קבוצות: בעלים (Owner), קבוצה (Group) וכל השאר (Others):

-  rwx  r-x  r--
│   │    │    └── others: read only
│   │    └─────── group:  read + execute
│   └──────────── owner:  read + write + execute
└──────────────── type: "-" = file, "d" = directory

ב-Windows ההרשאות נקראות ACL ומופיעות בלחיצה ימנית ‏←‏ Properties ‏←‏ Security. העיקרון זהה.

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

טעות נפוצה

הטעות 1: “הקובץ לא נמצא” — אבל הוא קיים.

Standing in:  C:\dev\kodkod6
Looking for:  data.txt
Searched:     C:\dev\kodkod6\data.txt
Real file:    C:\dev\kodkod6\week-1\data.txt
  • נתיב יחסי נבדק מהתיקייה הנוכחית — מהמקום שבו ה-Terminal עומד — ולא מהתיקייה שבה הקובץ נמצא.
  • הרצתם מתיקייה אחרת? התוכנה מחפשת במקום אחר, ולא מוצאת.
  • הפתרון: לעבור קודם לתיקייה הנכונה (cd), או להשתמש בנתיב מלא.

הטעות 2: לעבוד כ-Administrator / root “כדי שלא יהיו בעיות”. זה עוקף את ההגנה שההרשאות נותנות: כל טעות, או תוכנה זדונית, מקבלת גישה לכל המחשב. עובדים כמשתמש רגיל, ומשתמשים בהרשאות-על רק כשבאמת צריך.

הטעות 3: לחשוב ששגיאת הרשאה היא באג בתוכנה. כשמערכת ההפעלה מחזירה “Access is denied” / PermissionError, היא בדקה ומצאה שלמשתמש הנוכחי אין הרשאה לפעולה. הפתרון הוא לבדוק מי הבעלים של הקובץ ומה ההרשאות שלו — לא לשנות את התוכנה.

סיכום

  • File System מארגן את הדיסק כעץ של תיקיות וקבצים, החל מהשורש (C:\ או /).
  • נתיב מלא מתחיל מהשורש. נתיב יחסי מתחיל מהתיקייה הנוכחית. . = כאן, .. = למעלה.
  • נתיבים יחסיים נמדדים מהמקום שממנו הרצתם, ולא ממיקום הקובץ.
  • לכל משתמש יש תיקיית בית והרשאות. Administrator / root הם משתמשי-על, ומשתמשים בהם רק כשצריך.
  • הרשאות בסיסיות: Read / Write / Execute. שגיאת הרשאה = מערכת ההפעלה סירבה.

דוקומנטציה רשמית

תרגול

שאלות הבנה על החומר של השיעור — בלי קוד.

תרגיל 1: חמשת התפקידים

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

הצג פתרון
תפקידדוגמה
ניהול תהליכיםמחליטה מי מקבל את ה-CPU ומתי — דפדפן, נגן מוזיקה ו-VS Code “רצים יחד”
ניהול זיכרוןנותנת לכל תוכנה RAM, ומונעת מתוכנה אחת לקרוא את הזיכרון של אחרת
ניהול קבציםשומרת קבצים בעץ של תיקיות על הדיסק
משתמשים והרשאותמשתמש רגיל לא יכול למחוק קבצי מערכת
ניהול חומרהמדברת עם המסך, המקלדת והמדפסת דרך Drivers

תרגיל 2: מה קורה כש-print מדפיס?

תוכנית Python מבצעת print("Hi"). תארו את המסלול מהתוכנית ועד שהטקסט מופיע על המסך. השתמשו במושגים User Mode, System Call, Kernel ו-Driver.

הצג פתרון
  1. התוכנית שלנו רצה ב-User Mode — אין לה גישה ישירה למסך.
  2. Python מבקשת מה-Kernel לכתוב את הטקסט — זו System Call (בקשה מסודרת).
  3. ה-Kernel, שרץ ב-Kernel Mode עם גישה מלאה לחומרה, בודק הרשאות.
  4. ה-Kernel מעביר את הבקשה ל-Driver של המסך.
  5. הטקסט מופיע על המסך.

תרגיל 3: Program מול Process

  1. מה ההבדל בין Program ל-Process?
  2. פתחתם שלושה חלונות של Chrome. כמה Programs יש, וכמה Processes לפחות?
  3. במחשב יש 8 ליבות, אבל רצים 300 תהליכים. איך זה אפשרי?
הצג פתרון
  1. Program הוא קובץ על הדיסק — המתכון. Process הוא הרצה פעילה שלו ב-RAM, עם PID וזיכרון משלה — הבישול.
  2. Program אחד (Chrome) ולפחות שלושה Processes — בפועל הרבה יותר, כי Chrome מריץ תהליך נפרד לכל לשונית ולכל רכיב.
  3. ה-Scheduler של מערכת ההפעלה מחלק את זמן ה-CPU לפרוסות קטנות של מילישניות, ומעביר את הליבות בין התהליכים מהר מספיק כדי שייראה שכולם רצים במקביל.

תרגיל 4: נתיבים

ה-Terminal עומד ב-C:\Users\dana\dev\kodkod6\week-1. לאיזה נתיב מלא מתורגם כל אחד מהנתיבים היחסיים?

.
..
..\week-2
..\..
הצג פתרון
נתיב יחסינתיב מלא
.C:\Users\dana\dev\kodkod6\week-1
..C:\Users\dana\dev\kodkod6
..\week-2C:\Users\dana\dev\kodkod6\week-2
..\..C:\Users\dana\dev

. = התיקייה הנוכחית, .. = תיקייה אחת למעלה.

תרגיל 5: לקרוא הרשאות

זו שורה מ-ls -l במחשב Linux:

-rw-r-----   dana   grades.txt
  1. האם זה קובץ או תיקייה?
  2. מה מותר לבעלים (dana), מה מותר לקבוצה ומה מותר לכל השאר?
  3. משתמש אחר, שלא בקבוצה, מנסה לקרוא את הקובץ. מה יקרה, ומי מחליט?
הצג פתרון
  1. קובץ — התו הראשון הוא - (תיקייה הייתה מתחילה ב-d).
  2. ההרשאות מתחלקות לשלוש קבוצות של שלושה תווים:
    • בעלים rw- — קריאה וכתיבה.
    • קבוצה r-- — קריאה בלבד.
    • כל השאר --- — שום הרשאה.
  3. הוא יקבל שגיאת הרשאה (Permission denied). מי שמחליט הוא מערכת ההפעלה — ה-Kernel בודק את ההרשאות בכל ניסיון גישה לקובץ.