תרגול 3 Flashcards
כמה סינגלים אפשר לשלוח
ומה מספרם
1 עד 31
IPC
ראשי תיבות
Inter process communication
איזה סוגי ipc יש בלינוקס
Signals
Pipes and fifo
Sockets
האם לסיגנלים יש נגיעה גם בחומרה?
לא
זהו מנגנון תוכנתי בלבד!
מי מתקשר באמצעות סיגנלים
בין תהליך לתהליך
בין מה לתהליך
מה קורה אם תהליך קיבל סיגנל בעת שהוא היה במצב המתנה
Task interruptable
הסיגנל יגרום למערכת ההפעלה להוציא אותו ממצב ההמתנה כדי להריץ את שגרת הטיפול בסיגנל במצב משתמש
יוחזר תוצאת כשלון
EINTR
להמתנה
מה שמור ב
Signal_struct
ואיפה הוא שמור
הוא שמור בpcb
בכל כניסה יהיה שמור מה לעשות עם הסיגנל
SIG_DFL שגרת הטיפול הדיפולטית
SIG_IGN התעלם מהסיגנל
או קישור לפונקציה שהמשתמש הגדיר לטיפול בסיגנל
איך תהליך שולח סיגנל לתהליך אחר
פקודה
Kill(pid, num)
כמו בbash
מה ההבדל באופן גילוי הסיגנל
אם מערכת ההפעלה שלחה
או או תהליך אחר שלח
אפ מערכת ההפעלה שלחה
היא תסמן את הסיגנל כדלוק
ואז כשנרצה לחזור לתהליך במצב משתמש הסינגל יתגלה
אם תהליך שלח להתליך זה אסינכרוני ונגלה את זה רק בפעם הבאה שנחזור למצב משתמש
איפה הfdt נשמר
ובאיזה שדה
בpcb
files->fd
מה יש בכל כניסה בfdt
בפירוט מה מכיל האובייקט הפנימי
יש את הfile object
שהוא מכיל גם את הseek pointer שהוא המיקום בקובץ
נגיד בחוטים הוא משותף והם קוראים וכותבים מאותה נקודה
מה הקשר בין הfd
לfdt
זה המיקום הפנוי הראשון שנמצא בfdt והוקצה לקובץ שפתחנו עם open
מה close
עושה ל
Fdt
Fo
היא מעדכנת את המצביע המתאים בטבלה לnull
ומעדכנת את המונה בfo לאחד פחות
לא מוחקת כי יכול להיות שיש עוד תהליכים או חוטים משתמשים בו
מה זה
Ssize_t
כמו size_t
רק שיכול גם לקבל ערך שגיאה
-1
קריאת מערכת read
מה עושה ומה מקבלת
מקבלת
fd
Buffer to write to
Number of bytes to read
ברקע מעדכן את הseek pointer בfdt
Write
מה מקבלת
ומה עושה ברקע
מקבלת
Fd
Buffer pointing what to write
Number of bytes to write
גם משנה את הseek pointer
מה קורה בfdt בין חוטים
הוא משותף
הpcb של כל אחד מהם מצביע לאותו fdt
האם fork משכפל גם את הfo?
לא
רק הfdt של שניהם מתבצביע עליהם
איזה פקודות יש לנעילת קבצים בין חוטים
Flock() type: FL_lock
Fcntl() type: FL_posix
איזה סוגי נעילות אפשר לעשות לקבצים בלינוקס
לא בחומר
Advisory locking
תהליך נועל קובץ בצורה מפורשת כמו קטע קריטי
מי שרוצה שינעל
Mandatory locking
אם קובץ
Lease
מנעול ניתן לזמן מסויים ואפשר להאריך את זמן הזה
טוב במקרים שהתהליך קרס
מה קורה אם תהליך פותח פעמיים את אותו הקובץ
זה ייצור 2
Fo
כל אחד מהם יהיה עם
Seek ייחודי
מה קורה אם בתהליך האב קראנו 3 בתים מקובץ
ואז נקרא 10 מהבן
אז הבן ימשיך לקרוא מאיפה שהאבא הפסיק
כי הfo בניהם משותף וקריאה לאחד תגרור שינויseek בשניהם
מה execv
עושה לfdt
למה זה טוב?
לא משנה אותו
קבצים שהיו פתוחים לפני פתוחים גם עכשיו
לדוגמה כדי להכווין קלט פלט
אפשר שנפתח קובץ
ואז בexecv נריץ תוכנה כקופסא שחורה והיא כבר תקבל את הקבצים פתוחים
איפה נשמר pipe
מיוחד
לא נשמר בדיסק
אלה בחוצצים של מערכת ההפעלה
האם pipe הוא חד או דו כיווני
חד כיווני
אחד קורא אחד כותב
איך כותבים וקוראים מpipe
בסוף התנהלות כמו כל קובץ
Read/write..
איך ממומש pipe מבחינת fd
אחד לקריאה ואחד לכתיבה
איך מייצרים pipe חדש
מה מקבל ומה מחזיר
Pipe()
מקבל מערך באורך 2 של ints
מקצה 2 fd הראשון במערך לכתיבה השני לקריאה
מחזיר 0 בהצלחה
-1 בכשלון
אז לpipe אין fo?
יש לו כמו לכל קובץ
אחד שמתאים לfd קריאה
ואחד לכתיבה
איזה תהליכים יכולים לדבר בpipe
רק אבות ובנים
כי הם משתפים fdt
האב צריך ליצור את הפייפ
ואז לייצר את הבן
כל אחד מהם יכול לקרוא ולכתוב לקצוות הפייפ
מה קורה אם האב עושה read לפייפ לפני שהבן התחיל לרוץ
זאת תהיה קריאה חוסמת והוא ימתין עד שהילד ימלא את החוצץ
מה קורה אם אב יצר הרבה בנים
ואז סגר את קצה קריאה של הpipe
הוא לא יוכל לכתוב יותר אבל הם יוכלו
מה קורה אם תהליך כותב לפייפ אבל אין מי שמאזין לו
מה יקרה חתהליך
הכתיבה תכשל והתהליך יקבל סיגנל
SigPipe
שגרת הטיפול הסטדרטית שלו היא להרוג את התהליך
מה הגודל המקסימלי של pipe
64k
מה קורה אם תהליך רוצה לכתוב לpipe יותר מהגודל שלו
אם אין מספיק מקום פנוי זאת תהפוך לקריאה חוסמת עד אשר הבנים יקראו ויפנו מקום מהpipe
מה קורה אם מנסים לקרוא מpipe
כשהוא ריק
כשכל הfd לכתיבה נסגרו?
למה חשוב לסגור קצוות מיותרים?
אם ריק וגם הכל נסגר נקבל eof
אם כולם סגרו ועדיין יש שם מידע נקרא אותו
אם ריק ועדיין יש כותבים אז זה יהפוך לקריאה חוסמת עד אשר אחד האחרים יכתוב
כדי למנוע מצב שתהליך קורא יחכה לנצח להתליך אחד שעדיין מחזיק קצה כתיבה אבל לא מתכנן להשתמש בו
או מצב שתהליך כותב יכתוב לpipe עד שיתמלא ויתקע בלי אף תהליך שיקרא את המידע וישחרר אותו
איך משנים fd של קובץ
קריאות מערכת
משכפלתתתתתתתתתת
Duplicate!!!!!!!
dup
מקבל fd ומשנה אותו לנמוך ביותר האפשרי
Dup2
מקבל fd נוכחי
וfd שנרצה לעבור אליו
איך מייצרים pipe שכל התהליכים במערכת הפעלה יכולו לדבר איתו
Fifo
Fifo איפה נשמר
נשמר בקובץ
קובץ מיוחד שלא נשמר על הדיסק
מה זה anonymous fifo
Pipe
איך מייצרים fifo
Syscall
MkFifo
מקבל נתיב לקובץ ששם ישמר הpipe
Mode הרשאות הקובץ
0777 is like 777
האם fifo הוא חד כיווני?
לא הוא דו כיווני
אפשר לקרוא ולכתוב לאותו הfd
מה קורה אם תהליך פותח fifo
לקריאה בלבד
כתיבה בלבד
כתיבה וקריאה
קריאה בלבד או כתיבה בלבד
זה יהיה חוסם
ויחכה עד שעוד מישהו יפתח באופן משלים
קריאה וכתיבה זה לא חוסם
מה ההבדל בניקוי לאחר סיום בין
Fifo and pipes
Fifo
הוא אובייקט ממופה לקובץ
לכן צריך לנקות אותו במפורש בסיום
צריך למחוק את הקובץ המתאים אליו
למשל עם פקודת rm
או קריאת מערכת unlink