מערכות הפעלה - המשך...

  • פותח הנושא neko
  • פורסם בתאריך

neko

New member
מערכות הפעלה - המשך...

משהו נותר לא סגור בתרגיל שאני צריך להגיש, אשמח לעזרה: באילו מקרים צריך מתכנת לדעת שפונק' ספרייה גורמת לSYSTEM CALL? למה זה חשוב? הדבר היחיד שעלה לי בראש זה יעילות (מעבר שליטה למע' ההפעלה = OVERHEAD רציני). מישהו כאן אמר משהו על אבטחה, אבל זה לא נשמע לי הגיוני. רעיונות מישהו?
 

annefan

New member
מישהו זה אני...

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

neko

New member
אני לא מצליח לדמיין מקרה

שבו יכולה להיווצר בעיית אבטחה דווקא מפני שפונק' כלשהי מבצעת SYSTEM CALL, יש לך איזו דוגמה פשוטה?
 

neko

New member
כמו שחשבתי - נכנסתי לאתר

של SYSCALLTRAP, והם מדברים על בעיית אבטחה שמתעוררת מכיוון שמישהו לא ידוע (סוס טרויאני למשל) מפעיל SYSTEM CALL, ואז אנחנו רוצים לדעת על כך. לא זו השאלה - מדובר על מתכנת המשתמש בספריה כלשהי, והשאלה היא מתי (ולמה) הוא ירצה לדעת מתי פונק' שהוא משתמש בה מבצעת SYSTEM CALL. נניח למשל שאני משתמש בפונק' ספריה פשוטה כמו SQRT, ומניח שהיא לא מבצעת SYSTEM CALL (כי למה לה...), אבל היא כן. אז מה? מה זה מפריע לי?
 

hatulflezet

New member
פורטביליות

system calls שונות ממערכת אחת לאחרת. אם אתה רוצה שהקוד ירוץ על יותר ממערכת הפעלה אחת - אתה חייב את אותם פונקציות שקוראות ל-system calls לשכתב שיתאימו לאותן מערכות הפעלה.
 

selalerer

New member
כן, אבל printf משתמשת בקריאות מערכת

והקוד עדיין פורטיבלי.
 

hatulflezet

New member
זה בדיוק העניין

היא פורטבילית כי הספריה בתוכה היא שוכנת - שוכתבה למערכות הפעלה שונות, בגלל שהיא סטנדרט - אתה לא צריך להתקין (לרוב) את STL או ספריות std. השאלה היתה "באילו מקרים צריך מתכנת לדעת שפונק' ספרייה גורמת לSYSTEM CALL? למה זה חשוב?" אם אתה משתמש בספריה שהיא לא סטנדרטית, והיא עושה קריאות לsystem calls היא לא תהיה פורטבילית בלי שיכתוב.
 

MotiAd

New member
לא בהכרח בכלל...

יש סוגים ויש סוגים. במידה והדבר תלוי במה שהמע"ה עושה לגבי עיניינים שלה (כלומר שינוי מצביעים בטבלאות שונות ומשונות) מן הסתם זה נכון כי מערכת אחת בנויה באופן שונה מאחרת. אבל עם אתה עובד על פלטפורמת איכס 86 ורוצה רק לבצע SQRT ע"י שימוש במעבד המתמטי? סט הפקודות שאתה צריך לבצע נכון תמיד לכל מע"ה. נניח שמירה של המצב הנוכחי של המעבד (מצב MMאיכס או SSE או FPU) ואח"כ החזרה של המצב הזה וכו'.
 

hatulflezet

New member
יתכן שלא הבנתי אותך

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

MotiAd

New member
אתה בהכרח צודק, אבל...

לא לזה התכוונתי. התכוונתי גם לאספקט שפונקציית מערכת נותנת הסתכלות שונה על אופן ביצוע הקוד ומה אמור להתבצע שכן אחרת היא לא הייתה פונקציית מערכת שנכתב בקרנל כי אם פונקציית User Mode רגילה. לשם סטנדרטיות אפשר להסתמך על תקן POSIX לדוגמא עבור BSD ולפעמים לינוקס. ובוינדוס אפשר "לסמוך" (באמת אפשר) שהפונקציות ישארו קונסיסטנטיות בכל המערכות (API זהה מבחינת כותרת פונקציה)
 

MotiAd

New member
תעמוד על ההבדלים...

בין לבין. פונקציה שמבצעת System Call עושה זאת מתוך מטרה מסויימת. נניח שבמע"ה הפונקציה לחישוב שורש ניגשת למעבד המתמטי. אבל המע"ה לא תיתן לך גישה ישירה אליו אלא רק דרך System Call אני יודע שזה ברור לך אבל זה יכול לתת לך קו חשיבה. פונקציה רגילה למשל תעשה לך אמולציה של זה נניח. תסתכל על מקרה יותר חריג, מע"ה שהיא לא MultiThreading או שהיא כן. אם היא לא אז אתה צריך לממש את כל העסק הזה בעצמך וכמעט בטוח שהמע"ה לא תיתן לך גישה לחלק של ה-TSS והפונקציות שמטפלות בו. במידה והיא כן אז רוב הדברים מתבצעים שם ואז יש לך תמיכת חומרה בת'רדים.
 
למעלה