logo

ליבת שגיאת פילוח זרקה את אובונטו

מהי תקלת פילוח?

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

זהו טופס תקלת הגנה כללית במערכות x86 סטנדרטיות. בתגובה, ליבת מערכת ההפעלה תטמיע בדרך כלל כמה פעולות מתקנות, ובדרך כלל תעביר את התקלה הזו לתהליך הפוגע על ידי העברת אות לתהליך.

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

  • תקלות פילוח הן מחלקת שגיאות בסיסית בתוכנות המצוינות בשפות רבות כגון ג שפה שמציעה גישה לזיכרון ברמה נמוכה וחלקן לבדיקות בטיחות.
  • בעיקר, הם נוצרים עקב שגיאות רבות במצביעים המשמשים להתייחסות לזיכרון וירטואלי, במיוחד גישה לא חוקית.
  • סוגים אחרים של תקלות גישה לזיכרון הם א שגיאת אוטובוס , הכולל גם כמה סיבות.
  • אלה מופיעים בעיקר בגלל כתובת זיכרון פיזי לא מדויקת או גישה שגויה לזיכרון.
  • אלו הן כמה הפניות לזיכרון שהחומרה לא יכולה לטפל בהן במקום הפניות שהתהליך אינו מורשה להתייחס אליהן.
  • מספר שפות תכנות עשויות ליישם מנגנונים שנוצרו כדי למנוע תקלות פילוח ולפתח בטיחות זיכרון. לדוגמה, ה חֲלוּדָה שפת התכנות מיישמת מודל מבוסס בעלות להבטחת בטיחות הזיכרון. שפה אחרת כמו Java ו עִלְגוּת מיישמת איסוף זבל, שמתעלם משיעורי שגיאות זיכרון רבים שעלולים לגרום לתקלות פילוח.

סקירה כללית של תקלת פילוח

  • תקלת פילוח מופיעה כאשר תוכנית כלשהי מנסה לגשת למיקום זיכרון שאסור לגשת אליו או מנסה לגשת למיקום זיכרון בצורה שאינה מותרת (לדוגמה, ניסיון לכתוב למיקום קריאה בלבד, או לדרוס את חלק של מערכת ההפעלה).
  • במחשוב, המילה 'הִתפַּלְגוּת' יש מספר שימושים. בדרך של תקלת פילוח, מילה בשימוש מאז 1950, היא מגדירה את מרחב הכתובות של התוכנית, רק מרחב הכתובות של התוכנית ניתן לקריאה עם הגנת זיכרון, ומתוך כך, רק המחסנית וקטע הקריאה-כתיבה של הנתונים של התוכנית ניתן לכתיבה. לפיכך, ניסיון קריאה מחוץ למרחב הכתובות של התוכנית, או כתיבה לחלק הקריאה בלבד של מרחב הכתובות מביא לתוצאה של תקלת פילוח.
  • תקלת פילוח מופיעה אם החומרה מוצאת ניסיון להתייחס לקטע לא קיים, מיקום חיצוני לגבולות הקטע, או מיקום בסגנון שאינו מותר על פי ההרשאות שניתנו למקטע במערכות באמצעות פילוח הזיכרון של החומרה לאספקת זיכרון וירטואלי.
  • בדרך כלל, תקלת עמוד לא חוקית גורמת לתקלת פילוח במערכות המשתמשות בהחלפה בלבד. תקלות העמוד ותקלות הפילוח הן שתיהן תקלות הנובעות ממערכת ניהול הזיכרון הוירטואלי. כמו כן, תקלת פילוח יכולה להתרחש ללא תלות בתקלות הדף; גישה לא לגיטימית לכל דף חוקי היא תקלת הפילוח. תקלת הפילוח יכולה להופיע באמצע העמוד. בתוך א הצפת חיץ ששוכן בדף אבל מחליף זיכרון באופן לא חוקי למשל.
  • בתחילה, התקלה נובעת MMU ( יחידת ניהול זיכרון ) על גישה לא חוקית, כחלק מהיבט ההגנה על הזיכרון שלו, או תקלת עמוד לא חוקית ברמת החומרה. אם הבעיה אינה כתובת לוגית לא חוקית אלא כתובת פיזית לא חוקית, שגיאת האוטובוס מתעוררת במקום זאת. אז, אלה לא תמיד מובחנים.
  • תקלה זו נמצאה ואות נשלח לתהליך הפוגע, ומפעיל את המטפל בתהליך עבור אותות זה ברמת מערכת ההפעלה. לסוגים שונים של מערכות הפעלה יש שמות אות ברורים המציינים שהופיעה תקלת פילוח.
  • אות המכונה SIGSEGV (קיצור ל הפרת פילוח ) מועבר לתהליך הפוגע במערכות ההפעלה דמויות יוניקס. התהליך הפוגע מקבל חריג, כלומר, STATUS_ACCESS_VIOLATION ב-Microsoft Windows.

גורמים לתקלת פילוח

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

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

אפליקציות נסתרות במכשיר זה

להלן מספר סיבות אופייניות לתקלת הפילוח:

  • ניסיון לגשת לכתובת זיכרון לא קיימת (חיצונית למרחב הכתובות של התהליך)
  • ניסיון לגשת לזיכרון שלתוכנה אין זכויות (כמו מבני גרעין בהקשר התהליך)
  • ניסיון לכתוב זיכרון לקריאה בלבד (כמו קטע קוד )
  • בתורם, אלה נובעים לעתים קרובות משגיאות תכנות רבות הנובעות מגישה לא חוקית לזיכרון:
  • ניסיון להפעיל תוכנית שאינה מבצעת קומפילציה נכונה. (כמה מהדרים יביאו לקובץ הפעלה ללא קשר לקיומן של שגיאות בזמן הידור.)
  • הצפת מחסנית
  • הצפת חיץ
  • הקצאה או הפניה למצביע משוחרר (א מצביע משתלשל , המציין זיכרון שנמחק/הוקצה/שוחרר)
  • הקצאה או הפנייה ל- an מצביע לא מאותחל מצביע פרוע , המציין כתובת זיכרון אקראית)
  • בהתייחסות לא מצביע אפס בדרך כלל מציין כתובת שאינה חלק ממרחב הכתובות של התהליך

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

פתור תקלת פילוח באובונטו

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

שמירה של gimp כ-jpeg

בזמן ביצוע מספר פקודות בזמן מצב dump הליבה אנו עלולים להיתקל ב- 'לא ניתן לפתוח קובץ נעילה' שְׁגִיאָה. זה בגלל שהמערכת מנסה לקחת קצת חסימה שאינה קיימת. זה בגלל התרסקות של קבצים בינאריים של כמה תוכניות ספציפיות.

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

1. הסר את קבצי הנעילה הזמינים במקומות שונים.

 $ sudo rm -rvf /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock and restart our system 

ליבת שגיאת פילוח זרקה את אובונטו

2. הסרת מטמון מאגר.

 $ sudo apt-get clean all 

ליבת שגיאת פילוח זרקה את אובונטו

3. שדרג ועדכן את מטמון המאגר שלנו.

 $ sudo apt-get update 

ליבת שגיאת פילוח זרקה את אובונטו
 $ sudo apt-get upgrade 

ליבת שגיאת פילוח זרקה את אובונטו

4. עכשיו שדרג את ההפצה שלנו זה יעדכן את החבילות שלנו.

בחר מתוך טבלאות מרובות ב-sql
 $ sudo apt-get dist-upgrade 

ליבת שגיאת פילוח זרקה את אובונטו

5. חפש בחבילות השבורות והסר אותן בכוח.

 $ sudo dpkg -1 | grep ^..r | apt-get purge 

דרך מצוינת שתמיד תעבוד היא כדלקמן מלבד שורת הפקודה:

  1. במצב הפעלה, הפעל את אובונטו על ידי לחיצה על יציאה מפתח לאחר אתחול מחדש.
  2. בחר ' אפשרויות מתקדמות עבור אובונטו
    ליבת שגיאת פילוח זרקה את אובונטו
  3. במצב שחזור הפעל את אובונטו ויוזכר מספר אפשרויות.
  4. ראשית, בחר את 'תיקון חבילות שבורות'
    ליבת שגיאת פילוח זרקה את אובונטו
  5. לאחר מכן, בחר את 'המשך אתחול רגיל'
    ליבת שגיאת פילוח זרקה את אובונטו

כעת, יש לנו שתי דרכים לפתור תקלות פילוח GUI ו-CLI. לפעמים, זה יכול לקרות גם שהפקודה, כלומר, apt לא עובדת בגלל ה תקלה , כך ששיטת CLI לא תיישם. במצב זה, אל תדאג כי שיטת ה-GUI תמיד תעבוד עבורנו.

טיפול בתקלת פילוח

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

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

שמות ערים ארה"ב

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

במצב זה, כאשר המערכת מאפשרת, ניתן לנהל את האירוע ולשפר את תוכנית המעבד נגדה 'קְפִיצָה' על ההוראה הכושלת להמשיך בביצוע.

דוגמאות לתקלת פילוח

ליבת שגיאת פילוח זרקה את אובונטו

כתיבה לזיכרון לקריאה בלבד

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

הפניית מצביע אפס

בשפות C ושפות אחרות דמויות C, מצביעי האפס משמשים למשמעות 'מצביע על שום אובייקט' וכאינדיקטור השגיאה וההפניה במצביע האפס (כתיבה או קריאה ממצביע אפס) היא שגיאת תוכנית בסיסית מאוד.

התקן לא אומר שהמצביע null דומה לכתובת הזיכרון של המצביע ל-0, אם כי זה יכול להיות המקרה. כמעט כל מערכות ההפעלה ממפות את הכתובת של מצביע ה-null כך שהשימוש בו מוביל לתקלת פילוח.

התנהגות זו אינה מובטחת על ידי שום תקן C. ב-C, ייחוס מצביע האפס הוא ה- התנהגות לא מוגדרת , ויישום תואם מותר להניח שהמצביע שהפנייה ניתנת לו אינו ריק.

הצפת מאגר

הצפת מחסנית