איך עובד העניין של System Calls.

MotiAd

New member
איך עובד העניין של System Calls.

אני עובד על פרוייקט ומנסה להבין איך עובד העניין של System Calls? בווינדוס וביוניקס? נניח שאני כותב תכנית ב-++Visual C שפונה לפקודות API של ווינדוס. ונניח שאני כותב תכנית ב-Visual Basic שעושה declares של API. איך המערכת הפעלה מזהה שמדובר בפקודת מערכת? ומה התהליכים שהיא מבצעת מאותו רגע שהיא מזהה שזאת פקודת מערכת? מוטי.
 

Zack DA

New member
לא ברורה לי מה הבעיה

לכל מערכת הפעלה יש קריאות מערכת שאתה יכול להפעיל, הן פקודות ב- C (למשל C, כי הזכרת אותה, אך אין תלות בשפה ברמה התיאורטית) לכל דבר ואין בעיה לקרוא להן (בלינוקס למשל יש לך MAN PAGES על כל קריאה וקריאה, והתחביר שלה ב- C). בכל אופן הכל מסתכם בסופו של דבר בקריאות מערכת. כך למשל את קריאת המערכת OPEN. כשאתה כותב ב- C את הפקודה FOPEN יש קריאה אוטומטית לקריאת המערכת OPEN. איך מערכת ההפעלה מזהה שזו קריאת מערכת? הרי המערכת יודעת כיצד היא עובדת ומה קריאות המערכת שלה... זה כמו לשאול איך כשקוראים למישהו ברחוב הוא יודע שמדברים אליו. צחי
 

MotiAd

New member
זאת אומרת...

שהמערכת עוקבת אחרי כל ביצוע התוכנית.?
 

galke

New member
זאת אומרת...

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

voguemaster

New member
אתה טועה ומטעה

הבחור רוצה לדעת איך פועל המנגנון של SYSTEM CALLS. ודרך אגב, אפשר לייצר system calls ללא בעיה מיותרת, כל מה שצריך זה להכיר את הפורמט של קובץ ה-PE מספיק טוב, ואפשר להכניס עוד EXPORTS לכל ספריה, שמצביעים לקוד שאתה כתבת. כמו שאפשר להוסיף קוד לתוכנית, כך אפשר להוסיף קוד ל-DLL, ואפילו לארוז את זה תחת ה-API הרגיל. אלי
 

galke

New member
אני לא טועה ולא מטעה

מעצם ההגדרה system calls הם פונקציות שמספקת מערכת ההפעלה. ברור שאם תבוא ו"תפרוץ" לdll של המערכת תוכל להוסיף עוד פונקציות, אבל : א. זה כמעט שקול ללכתוב מערכת הפעלה חדשה. ב. למה לעזאזל לעשות משהו כזה?!
 

voguemaster

New member
מתחיל בשלב הקומפילציה

אני אקח את חלזונות בתור דוגמא. כשאתה מתכנת תחת חלונות, לקומפיילר שלך יש מושג לגבי מערכת ההפעלה שלך ואיזה DLLים מותקנים בה. לכל DLL יש פונקציות שהוא מייצא (EXPORTS) שאתה יכול לייבא ולהשתמש בהם ביישום שלך (כל זה שקוף מבחינתך בד"כ). ברגע שאתה קורא לפונקציה כלשהי בקוד הקומפיילר יודע לחפש את ה-external reference לאותה פונקציה ומייצר קוד לקריאה לפונקציה. אם הקומפיילר יודע לדוגמא איפה נמצאת CreateFileA, הוא יודע לייצר קריאה לכתובת שלה, או ע"י מציאת הכתובת לפי ה-EXPORT, או ע"י טבלת מצביעים ו-FAR JUMP, תלוי באיזה צורת קריאה משתמשים. מערכת ההפעלה מצידה לא צריכה לעקוב אחרי שום דבר ולדעת שום דבר מלבד העובדה שהיא אמורה לאפשר ליישומים לטעון ספריות מסוימות בזמן ריצה בכדי לספק להם פונקציונליות מסוימת. את תהליך הזיהוי של אם זו קריאה ל-API או לסתם פונקציה, עושה הקומפיילר בזמן כתיבת היישום. הוא מכיר את כל ה-API של חלונות, או לפחות את זה שייבאת ליישום שלך ע"י ה-INCLUDES המתאימים, והוא מכיר את כל ה-prototypes של הפונקציות שאתה יצרת בתוכנית, וכך הוא יודע להבדיל ולייצר קוד קריאה בהתאם לאיזה פונקציה אתה משתמש. אלי
 
למעלה