מנגנון האיתות בקרנל הלינוקס מאפשר לאפליקציות הרצות להודיע באופן אסינכרוני למערכת כאשר מתרחש אירוע חדש. בגלל אופיו, מנגנון איתות זה ידוע בדרך כלל בתור פסיקות תוכנה. בדיוק כמו פסיקות בחומרה, האותות קוטעים את הזרימה הרגילה של אפליקציה, ולא ניתן לצפות מתי אפליקציה תקבל אות.
בואו נצלול עמוק לתוך מנגנון האיתות בלינוקס ונבין מה קורה מאחורי הקלעים.
מושגי אותות בסיסיים בלינוקס
בלינוקס, תהליכים מייצרים אותות בשלושה מצבים בסיסיים:
- כאשר מתרחש מצב חריג בצד החומרה. לדוגמה, אתה יכול לחשוב על אירועים כמו האפליקציה שמנסה לגשת לאזור מחוץ ל מרחב כתובת מותר (תקלת פילוח) או הפקת קוד מכונה הכולל חלוקה באפס פעולה.
- מצבים כגון שימוש בשילובי מקשים כמו Ctrl + C אוֹ Ctrl + Z על המסוף על ידי המשתמש, שינוי גודל מסך המסוף, או שליחת אות הרג.
- הטיימר שנקבע באפליקציה פג, מגבלת ה-CPU שניתנה לאפליקציה גבוהה, הנתונים מגיעים לתיאור קובץ פתוח וכו'.
הרעיון של אותות קיים מאז הגרסאות המוקדמות של יוניקס. בעבר, היו כמה הבדלים בין גרסאות Unix לגבי עיבוד אותות. מאוחר יותר, עם הסטנדרטיזציה של POSIX שנועד לניהול אותות, לינוקס ונגזרות יוניקס אחרות החלו לפעול לפי הסטנדרטים הללו. מסיבה זו, המושגים של אותות יוניקס ואותות POSIX, שבהם אתה עשוי להיתקל במסמכים מסוימים, מצביעים על ההבדלים.
מספרי אותות
לאותות יש ערכים מספריים שונים, המתחילים באחד. לדוגמה, אות 1 הוא a HUP אות כמעט בכל מערכת, או אות 9 הוא a לַהֲרוֹג אוֹת.
עם זאת, מומלץ מאוד להשתמש במספרים אלה כאשר אתה משתמש באותות ביישומים שלך. עבור אותות POSIX, אות.ח הקובץ צריך להיות באפליקציה והמפתח צריך להשתמש בהגדרות הקבועות של מספרים קשורים כגון להירשם, SIGKILL, וכו. במקום זאת.
אם תבחן את /usr/include/signal.h קובץ במערכת שלך, אתה יכול לראות את הפעולות הנוספות וקבצים אחרים הכלולים על ידי התבוננות בהגדרות של ערכים כגון __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, וכו. בקובץ. אתה יכול למצוא את מספרי האותות הזמינים במערכות לינוקס ב- /usr/include/asm-generic/signal.h קובץ, שאינך צריך לכלול ישירות בקוד היישום שלך.
הפקת אותות ושליחה
יצירת אותות מתרחשת עקב אירוע. עם זאת, שליחת (מסירת) האות לאפליקציה הרלוונטית אינה מתרחשת במקביל להפקת האות.
כדי שהאות יישלח לאפליקציה, האפליקציה חייבת לפעול כעת ולהיות בעלת משאבי CPU. לכן, שליחת האות לאפליקציה ספציפית מתרחשת כאשר האפליקציה הרלוונטית מתחילה לעבוד שוב לאחר מעבר ההקשר.
קונספט האות ההמתנה
במהלך הזמן מהדורה לשידור האות, האותות נמצאים במצב המתנה. אתה יכול לגשת למספר האותות הממתינים ולמספר האותות הממתינים המותרים לתהליך מה- /proc/PID/status קוֹבֶץ.
# לתהליך עם PID: 2299
cat /proc/2299/status
# פלט
...
SigQ: 2/31630
...
מסכות איתות וחסימה
הזמן המדויק שבו האותות יגיעו הוא לרוב בלתי צפוי על ידי האפליקציה. לכן, כמה הפרעות קריטיות עלולות להתרחש במהלך כל פעולה. זה יכול לגרום לבעיות גדולות עבור יישום בקנה מידה גדול.
כדי למנוע כמה מצבים לא רצויים כמו זה, יש צורך להשתמש במסכות איתות. כך ניתן לחסום כמה אותות לפני פעולה קריטית. בשלב זה חשוב להשלים את החלק הקריטי ולהסיר את הבלוקים המוגדרים. תהליך זה הוא משהו שמפתח האפליקציה צריך לשים לב אליו.
כאשר האפליקציה חוסמת אות, אותות אחרים מאותו סוג שנוצרו יהיו במצב המתנה עד לביטול החסימה. באפליקציה, שליחה של אותות ממתינים מסופקת גם ברגע שהחסימה מוסרת.
בדרך זו, אותם סוגי אותות שהופסקו בזמן החסימה נשלחים לאפליקציה רק פעם אחת לאחר הסרת החסימה בשימוש רגיל. המצב שונה עבור אותות בזמן אמת.
סוגי אותות לינוקס
פעולות ברירת המחדל עשויות להשתנות בהתאם לסוגי האות. אם לאפליקציה שמקבלת את האות המתאים אין פונקציית מטפל באותות, פעולת ברירת המחדל מתרחשת. לפעמים זה אומר סיום האפליקציה ולפעמים התעלמות מהאות.
חלק מהאותות לא ניתן ללכוד בשכבת האפליקציה, אותות אלו תמיד מבצעים את פעולת ברירת המחדל (כמו האות KILL).
בנוסף לכמה פעולות שגורמות לאפליקציה להפסיק, מופק גם קובץ dump הליבה. קובצי dump Core, שנוצרו על ידי כתיבת טבלת הזיכרון הווירטואלי של התהליך הקשור לדיסק, עוזרים ל- משתמש לבחון את מידע המצב לפני שהתהליך מסתיים עם כלי איתור באגים בשלבים הבאים.
הערכים הבאים מבוססים על an ארכיטקטורת MIPS למופת:
אוֹת | מספר | פעולת ברירת מחדל | האם ניתן לתפוס אותו? |
---|---|---|---|
להירשם | 1 | סיום הבקשה | כן |
SIGINT | 2 | סיום הבקשה | כן |
SIGQUIT | 3 | סיום יישום (מזבלה ליבה) | כן |
SIGILL | 4 | סיום יישום (מזבלה ליבה) | כן |
SIGTRAP | 5 | סיום יישום (מזבלה ליבה) | כן |
SIGABRT | 6 | סיום יישום (מזבלה ליבה) | כן |
SIGFPE | 8 | סיום יישום (מזבלה ליבה) | כן |
SIGKILL | 9 | סיום הבקשה | לא |
SIGBUS | 10 | סיום יישום (מזבלה ליבה) | כן |
SIGSEGV | 11 | סיום יישום (מזבלה ליבה) | כן |
SIGSYS | 12 | סיום יישום (מזבלה ליבה) | כן |
SIGPIPE | 13 | סיום הבקשה | כן |
SIGALRM | 14 | סיום הבקשה | כן |
SIGTERM | 15 | סיום הבקשה | כן |
SIGUSR1 | 16 | סיום הבקשה | כן |
SIGUSR2 | 17 | סיום הבקשה | כן |
SIGCHLD | 18 | להתעלם | כן |
SIGTSTP | 20 | תפסיק | כן |
סיגור | 21 | להתעלם | כן |
SIGPOLL | 22 | סיום הבקשה | כן |
SIGSTOP | 23 | תפסיק | לא |
SIGCONT | 25 | המשך אם נעצר | כן |
SIGTTIN | 26 | תפסיק | כן |
SIGTTOU | 27 | תפסיק | כן |
SIGVTALRM | 28 | סיום הבקשה | כן |
SIGPROF | 29 | סיום הבקשה | כן |
SIGXCPU | 30 | סיום יישום (מזבלה ליבה) | כן |
SIGXFSZ | 31 | סיום יישום (מזבלה ליבה) | כן |
מחזור החיים של אותות בלינוקס
האותות עוברים שלושה שלבים. הם מיוצרים בעיקר בשלב הייצור, על ידי הגרעין או כל תהליך, ומיוצגים על ידי מספר. הם עובדים בקלילות ובמהירות, מכיוון שאין עליהם עומס נוסף. אבל אם תסתכל על הצד של POSIX, תראה שאותות בזמן אמת יכולים לשדר נתונים נוספים.
שלב המסירה של האותות מגיע לאחר שלב הייצור. בדרך כלל, אותות מגיעים לאפליקציה מהקרנל במהירות האפשרית. עם זאת, לפעמים יישומים יכולים לחסום אותות בזמן ביצוע פעולות קריטיות. במקרים כאלה, האות נשאר בהמתנה עד לביצוע העסקה.
כמו אותות, גם תהליכים הם חלק בלתי נפרד מהמערכת האקולוגית של לינוקס. הבנת מה הם תהליכים וכיצד הם עובדים היא חיונית אם אתה מתכנן להיות מנהל מערכת לינוקס.
מהו תהליך בלינוקס?
קרא הבא
נושאים קשורים
- לינוקס
- ליבת לינוקס
- ניהול מערכת
על הסופר
מהנדס ומפתח תוכנה חובב מתמטיקה וטכנולוגיה. הוא תמיד אהב מחשבים, מתמטיקה ופיזיקה. הוא פיתח פרויקטים של מנוע משחקים וכן למידת מכונה, רשתות עצביות מלאכותיות וספריות אלגברה ליניארית. יתר על כן ממשיך לעבוד על למידת מכונה ומטריצות ליניאריות.
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
לחץ כאן כדי להירשם