שאלת מבחן במערכות הפעלה - האוניברסיטה הפתוחה 2019 - תהליכים
הסבירו מה נעשה בשורות קוד הבאות:
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 872019סמסטר ב
★★★★★
תהליכיםforkpipeקריאות מערכתקלט/פלט
הקוד מדגים תקשורת בין-תהליכית (IPC) בין תהליך אב לתהליך בן. שימו לב לקריאות המערכת
pipe ו-fork כדי להבין כיצד נוצר ערוץ התקשורת וכיצד הוא משותף בין התהליכים.קטע הקוד מדגים תקשורת בין-תהליכית (IPC - Inter-Process Communication) בין תהליך אב לתהליך בן באמצעות צינור (pipe).
1. `pipe(fd)`: בתחילה, התהליך הראשי מבצע קריאת מערכת
2. `fork()`: לאחר יצירת הצינור, התהליך מבצע קריאת מערכת
3. לוגיקת תהליך האב (`pid > 0`):
4. לוגיקת תהליך הבן (`pid == 0`):
לסיכום, התוכנית יוצרת ערוץ תקשורת שבו האב שולח הודעה לבן, והבן מדפיס אותה למסך.
1. `pipe(fd)`: בתחילה, התהליך הראשי מבצע קריאת מערכת
pipe. קריאה זו יוצרת צינור חד-כיווני ומחזירה שני מתארי קבצים (file descriptors) במערך fd: fd[0] משמש לקריאה מהצינור, ו-fd[1] משמש לכתיבה לצינור. כל מה שנכתב ל-fd[1] ניתן לקריאה מ-fd[0].2. `fork()`: לאחר יצירת הצינור, התהליך מבצע קריאת מערכת
fork. קריאה זו יוצרת תהליך בן חדש, שהוא העתק של התהליך המקורי (תהליך האב). שני התהליכים (האב והבן) ממשיכים את ריצתם מהנקודה שאחרי ה-fork, ושניהם יורשים את מתארי הקבצים של הצינור שנוצר.- בתהליך האב,
forkמחזיר את מזהה התהליך (PID) של הבן (מספר חיובי). - בתהליך הבן,
forkמחזיר 0.
3. לוגיקת תהליך האב (`pid > 0`):
close(fd[0]): האב סוגר את צד הקריאה של הצינור, מכיוון שהוא מתכוון רק לכתוב אליו. זוהי פרקטיקה טובה למנוע בעיות.write(fd[1], "hello world\n", 12): האב כותב את המחרוזת "hello world
4. לוגיקת תהליך הבן (`pid == 0`):
close(fd[1]): הבן סוגר את צד הכתיבה של הצינור, מכיוון שהוא מתכוון רק לקרוא ממנו.n = read(fd[0], line, 2048): הבן מנסה לקרוא נתונים מצד הקריאה של הצינור. קריאתreadהיא חוסמת, ולכן התהליך ימתין עד שיהיו נתונים זמינים בצינור (שנכתבו על ידי האב). הנתונים נקראים לתוך המערךline, ומספר הבתים שנקראו בפועל נשמר במשתנהn.write(1, line, n): הבן כותב את הנתונים שקרא מהצינור אל הפלט הסטנדרטי (stdout), שמתאר הקובץ שלו הוא1. התוצאה היא הדפסת המחרוזת "hello world" על המסך.
לסיכום, התוכנית יוצרת ערוץ תקשורת שבו האב שולח הודעה לבן, והבן מדפיס אותה למסך.