1 / 36

Real Time Systems

Real Time Systems. VxWorks. VxWorks. מערכות הפעלה windows , unix אידיאליות לפיתוח אפליקציות רגילות אולם אינן מתאימות לפיתוח אפליקציות RT מערכות הפעלה סטנדרטיות לזמן אמת אינן מתאימות לפיתוח מתקדם של יישומים רגילים, לדוגמא אין תמיכה ב- GUI

Download Presentation

Real Time Systems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Real Time Systems VxWorks

  2. VxWorks • מערכות הפעלה windows, unix אידיאליות לפיתוח אפליקציות רגילות אולם אינן מתאימות לפיתוח אפליקציות RT • מערכות הפעלה סטנדרטיות לזמן אמת אינן מתאימות לפיתוח מתקדם של יישומים רגילים, לדוגמא אין תמיכה ב- GUI • הגישה של VxWorks הינה שילוב של שתי המערכות. VxWorks עבור החלקים הקריטיים ו- windows או unix עבור החלקים האחרים

  3. מערכת דינאמית • ניתן להכליל רק את המרכיבים שצריך לפיתוח אפליקציה וכך לחסוך מקום לדוגמא תמיכה ברשת. • ניתן לפתח את המערכת על מחשב ה- host ולהריץ אותה על ה- target • ניתן גם לשלב את המערכות כך שה- target ישמש כשרת ל- host ויספק נתונים מהמערכת

  4. מבנה כללי Target Host Tornado Tools: compiler debugger shell VxWorks RTOS Memory VxSim TEXT Target Server DATA File.o Project.out File.c File.cpp

  5. Ethernet RS-232 Development Host VxWorks Target שלבי העבודה • אתחול target • חיבור Target Server • כתיבה והידור 4. Download 5. בדיקה

  6. Wind - The OS Kernel Supports: • multitasking with preemptive priority scheduling • intertask synchronization and communication • Interrupt handling • Timers • memory management.

  7. Drivers Support • Network driver – for network devices (Ethernet, shared memory) • Pipe driver – for intertask communication • RAM “disk” driver – for memory-resident files • SCSI driver – for SCSI hard disks, diskettes, tape drives • Keyboard driver – for PC x86 keyboards • Display driver – for PC x86 VGA displays • Disk driver – for IDE and floppy disk drives • Parallel port driver – for PC-style target hardware

  8. תכונות נוספות • תמיכה במערכות קבצים מותאמות ל- RT כולל מערכת הקבצים של DOS • גישה "שקופה" למערכות VxWorks אחרות • תמיכה ב- TCP/IP • Remote Procedure Calls • Remote File Access • Virtual Memory

  9. יכולת שיתוף אובייקטים כגון semaphores בין תהליכים שרצים על מעבדים שונים • ספריות C++ מיוחדות, תמיכה ב- Ansi C, ספריות פונקציות לטיפול בפסיקות, הקצאת זיכרון, מחרוזות ומבני נתונים • כלים לבדיקת ביצועים וניצול המעבד • Remote Debugging • תמיכה בסוגי לוחות שונים ואוסף פונקציות לטיפול בחומרה, מיפוי התקנים בזיכרון וכד'

  10. Multitasking and Intertask Communications • Interrupt-driven, priority-based task scheduling. • ניתן ליצור כל שגרה/פונקציה כתהליך נפרד עם מחסנית פרטית • ניתן לחסום, לשחרר, להשהות ולשנות עדיפות של כל תהליך באמצעות קריאות מערכת • VxWorks מספקת סמפורים מסוגים שונים לסינכרון בין תהליכים

  11. Portable Operating System Interface (POSIX) • אוסף תקנים עבור קריאות מערכת • משמש לתאימות בין מערכות ויכולת העברת קוד ממערכת למערכת • VxWorks תומכת בתקן זה עבור: • asynchronous I/O • Semaphores, message queues • memory management • queued signals • Scheduling, clocks and timers

  12. I/O System • תמיכה בהתקנים רבים דרך פונקציות סטנדרטיות כגון : open(), close(), read() • תמיכה ב- ANSI-C (printf, scanf) • ק/פ באמצעות חוצצים ע"י: fopen, fclose, fread, fwrite, putc, getc • תמיכה בתקשורת טורית, התקני ק/פ מכניים

  13. File Systems • תמיכה במערכת הקבצים של DOS , הכוללת ארגון היררכי, יכולת חלוקת קובץ למספר חלקים, ויכולת לעבוד במצב של case sen. • תמיכה ב- rt11fs (ללא היררכיה) • תמיכה ב- rawfs – הדיסק מוגדר כקובץ אחד גדול. ביצועים טובים יותר • יכולת עבודה עם מספר מערכות קבצים בו זמנית

  14. Network Support • תקשורת קלה ומהירה עם מחשב ה- host מאפשרת פיתוח התוכנה עליו, איתור שגיאות מרוחק ושימוש ברכיבי תוכנה שאינם RT וממוקמים ב- host • תמיכה ב- TCP/IP • שימוש במשאבים מרוחקים • יכולת איתחול דינאמי של המערכת מה- host

  15. Tasks • תהליכים ב- VxWorks רצים כיחידות עצמאיות עם אוגרים נפרדים ומשאבים נפרדים • לכל תהליך יש עדיפות, באמצעות העדיפות נקבע זמן הריצה של התהליך • כל התהליכים משתפים את אותו מרחב זיכרון • לתהליך יש 4 מצבים: • ready – מוכן לריצה • delayed – מושהה • suspended – חסום • pended – ממתין למשאב • התהליך בעדיפות הגבוהה ביותר במצב ready יורץ

  16. שליטה על תהליכים • ב- VxWorks יש אפשרות לשנות את אופן החלפת התהליכים: • kernelTimeSlice() – שינוי Round-Robin • taskPrioritySet() – שינוי עדיפות תהליך • taskLock() – נעילת תהליך • taskUnlock() – שחרור תהליך

  17. Preemptive Multitasking • בשיטה זו התהליך בעדיפות הגבוהה ביותר במצב ready ירוץ עד שיכנס תהליך בעדיפות גבוהה יותר או עד שיסתיים • ב- VxWorks יש 256 רמות של עדיפות • 0 – העדיפות הגבוהה ביותר • 255 – העדיפות הנמוכה ביותר • תהליך מקבל עדיפות כאשר נוצר אולם ניתן לשנות עדיפות זו בזמן הריצה

  18. Round-Robin Scheduling • הבעיה של preemptive multitasking היא שאם יש מספר תהליכים בעלי עדיפות זהה רק אחד מהם ירוץ • בשיטת round-robin מחלקים את הזמן לפרוסות וכל תהליך מקבל פרוסת זמן • החלוקה היא תמיד בין התהליכים בעדיפות הגבוהה ביותר • הפונקציה kernelTimeSlice() מאפשרת שינוי מרווח הזמן בין כל שתי החלפות

  19. יצירת תהליכים • taskSpawn() – יצירה ואתחול של תהליך • taskInit() – יצירת תהליך במצב suspend • taskActivate()– אתחול תהליך • דוגמא: • id=taskSpawn(name, priority, options, stacksize, func_add,arg1,…,arg10); • שם התהליך חייב להיות ייחודי (ניתן לרשום מחרוזת ריקה ואז השם ינתן ע"י המערכת

  20. פונקציות • taskName()– מחזירה את שם התהליך לפי id • taskNameToId()– מחזירה את ה – id לפי השם • taskIdSelf()– מחזירה את המזהה של התהליך הנוכחי • taskIdVerify()– מחזירה האם קיים תהליך מסויים( לפי מזהה)

  21. דוגמא • tid = taskSpawn ("tMyTask", 90, VX_FP_TASK, 20000, myFunc, 2387, 0, 0, 0, 0, 0, 0, 0, 0, 0); • המאפיין VX_FP_TASK מציין שהתהליך יעשה שימוש במספרים ממשיים

  22. #include "vxworks.h" #include "stdio.h" #include "taskLib.h" int taskOne(void) { for(int i=0;i<10;i++){ printf("task 1\n"); taskDelay(50); } return 0; } int taskTwo(void) { for(int i=0;i<10;i++){ printf("task 2\n"); taskDelay(50); } return 0; }

  23. פונקצית ההפעלה void start(void) { taskSpawn("task1",100,0,1000,taskOne,0,0,0,0,0,0,0,0,0,0); taskSpawn("task2",100,0,1000,taskTwo,0,0,0,0,0,0,0,0,0,0); }

  24. Task Information • taskIdListGet()– מאתחלת מערך בכל מספרי התהליכים הפעילים • taskPriorityGet()– מחזירה את העדיפות • taskRegsGet()– מחזירה את הרגיסטרים של התהליך • taskRegsSet()– קובעת את הרגיסטרים • taskIsSuspended() • taskIsReady()

  25. Task-Deletion • exit()– סיום התהליך הנוכחי • taskDelete()– סיום תהליך לפי מזהה • taskSafe()– הגנה על תהליך שלא יסגר • taskUnsafe()– שחרור ההגנה • זיכרון דינאמי אינו משתחרר אוטומטית כאשר התהליך נסגר

  26. הגנה על תהליך taskSafe (); semTake (semId, WAIT_FOREVER); /* Block until semaphore available */ . . critical region . semGive (semId); /* Release semaphore */ taskUnsafe (); אסור לסגור תהליך שמחזיק משאב

  27. Task Control • taskSuspend() • taskResume() • taskRestart() • taskDelay() • nonosleep() • שימוש ב-delay • taskDelay(sysClkRateGet()/2); //500ms

  28. Semaphores • אובייקטים המשמשים לחסימה/שחרור תהליכים לצורך סינכרון ותקשורת • 3 סוגים: • binary • counting • mutex

  29. Binary Semaphores • תהליך שרוצה להמתין לארוע משתמש באובייקט זה. • התהליך יחסם עד שיתקבל הארוע • יצירה: semBCreate() • המתנה: semTake() • שחרור: semGive()

  30. Counting Semaphores • Binary semaphore משמש לקבלת ארוע יחיד • כאשר רוצים לדעת גם כמה ארועים התקבלו משתמשים באובייקט זה • יצירה: semCCreate()

  31. Mutex • משמש לשיתוף משאבים (חומרה, קבצים וכו') בין תהליכים • יצירה: semMCreate() • מחיקת sem מכל סוג: semDelete()

  32. Message Queues • חוצץ FIFO להעברת הודעות בין תהליכים • תהליך שמנסה לקרוא מחוצץ ריק או לכתוב לחוצץ מלא ייחסם (ניתן לקבוע timeout) • יצירה: msgQCreate() • שליחת הודעה: msgQSend() • קבלת הודעה: msgQReceive() • מחיקה: msgQDelete()

  33. Watchdogs • משמשים לתזמון פעולות. הפעלת פונקציה אחרי זמן מסויים wd=wdCreate(); wdStart(wd,sysClkRateGet()*3,funcPtr,arg); • ביטול: wdCancel() • מחיקה: wdDelete()

  34. Deadline-Miss Detection • בדיקה שקטע קוד מתבצע בזמן נתון אחרת טיפול בשגיאה wd=wdCreate(); wdStart(wd,deadline,panic,arg); doWork(); wdCancel(wd); : void panic(…){…..}

  35. Signals • שליחת ארוע אסינכרוני לתהליך אחר • טיפול ב- exceptions • אם בתהליך מסויים התרחשה שגיאה ונקבעה פונקצית טיפול היא תופעל, אחרת התהליך יחסם • פונקצית הטיפול יכולה לאתחל את התהליך או לחזור לנקודה מסויימת שנקבעה ע"י setjmp() • חזרה לנקודה שנקבעה: longjmp()

More Related