Upload
petra-vasquez
View
30
Download
14
Embed Size (px)
DESCRIPTION
Real Time Systems. VxWorks. VxWorks. מערכות הפעלה windows , unix אידיאליות לפיתוח אפליקציות רגילות אולם אינן מתאימות לפיתוח אפליקציות RT מערכות הפעלה סטנדרטיות לזמן אמת אינן מתאימות לפיתוח מתקדם של יישומים רגילים, לדוגמא אין תמיכה ב- GUI - PowerPoint PPT Presentation
Citation preview
Real Time SystemsReal Time Systems
VxWorksVxWorks
VxWorksVxWorks
אידיאליות לפיתוח windows, unixמערכות הפעלה •אפליקציות רגילות אולם אינן מתאימות לפיתוח
RTאפליקציות מערכות הפעלה סטנדרטיות לזמן אמת אינן מתאימות •
לפיתוח מתקדם של יישומים רגילים, לדוגמא אין GUIתמיכה ב-
הינה שילוב של שתי המערכות. VxWorksהגישה של •VxWorks -עבור החלקים הקריטיים ו windows או
unixעבור החלקים האחרים
אידיאליות לפיתוח windows, unixמערכות הפעלה •אפליקציות רגילות אולם אינן מתאימות לפיתוח
RTאפליקציות מערכות הפעלה סטנדרטיות לזמן אמת אינן מתאימות •
לפיתוח מתקדם של יישומים רגילים, לדוגמא אין GUIתמיכה ב-
הינה שילוב של שתי המערכות. VxWorksהגישה של •VxWorks -עבור החלקים הקריטיים ו windows או
unixעבור החלקים האחרים
מערכת דינאמיתמערכת דינאמית
ניתן להכליל רק את המרכיבים שצריך לפיתוח •אפליקציה וכך לחסוך מקום לדוגמא תמיכה
ברשת.
hostניתן לפתח את המערכת על מחשב ה- •targetולהריץ אותה על ה-
targetניתן גם לשלב את המערכות כך שה- • ויספק נתונים מהמערכתhostישמש כשרת ל-
ניתן להכליל רק את המרכיבים שצריך לפיתוח •אפליקציה וכך לחסוך מקום לדוגמא תמיכה
ברשת.
hostניתן לפתח את המערכת על מחשב ה- •targetולהריץ אותה על ה-
targetניתן גם לשלב את המערכות כך שה- • ויספק נתונים מהמערכתhostישמש כשרת ל-
מבנה כללימבנה כלליHostTarget
Tornado Tools: compiler debugger shell
File.cFile.cpp
File.oProject.out
VxWorksRTOS
Memory
TEXT
DATA
VxSim
TargetServer
שלבי העבודהשלבי העבודה
targetאתחול 1.
Target Serverחיבור 2.
כתיבה והידור3.
targetאתחול 1.
Target Serverחיבור 2.
כתיבה והידור3.
4 .Download
. בדיקה5
Ethernet
RS-232
Development Host VxWorks Target
Wind - The OS KernelWind - The OS Kernel
Supports:
• multitasking with preemptive priority scheduling
• intertask synchronization and communication
• Interrupt handling
• Timers
• memory management.
Supports:
• multitasking with preemptive priority scheduling
• intertask synchronization and communication
• Interrupt handling
• Timers
• memory management.
Drivers SupportDrivers 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
• 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
תכונות נוספותתכונות נוספות
כולל RTתמיכה במערכות קבצים מותאמות ל- •DOSמערכת הקבצים של
אחרותVxWorksגישה "שקופה" למערכות •
TCP/IPתמיכה ב- •
•Remote Procedure Calls
•Remote File Access
•Virtual Memory
כולל RTתמיכה במערכות קבצים מותאמות ל- •DOSמערכת הקבצים של
אחרותVxWorksגישה "שקופה" למערכות •
TCP/IPתמיכה ב- •
•Remote Procedure Calls
•Remote File Access
•Virtual Memory
בין semaphoresיכולת שיתוף אובייקטים כגון •תהליכים שרצים על מעבדים שונים
, Ansi C++ מיוחדות, תמיכה ב- Cספריות •ספריות פונקציות לטיפול בפסיקות, הקצאת
זיכרון, מחרוזות ומבני נתונים
כלים לבדיקת ביצועים וניצול המעבד•
•Remote Debugging
תמיכה בסוגי לוחות שונים ואוסף פונקציות •לטיפול בחומרה, מיפוי התקנים בזיכרון וכד'
בין semaphoresיכולת שיתוף אובייקטים כגון •תהליכים שרצים על מעבדים שונים
, Ansi C++ מיוחדות, תמיכה ב- Cספריות •ספריות פונקציות לטיפול בפסיקות, הקצאת
זיכרון, מחרוזות ומבני נתונים
כלים לבדיקת ביצועים וניצול המעבד•
•Remote Debugging
תמיכה בסוגי לוחות שונים ואוסף פונקציות •לטיפול בחומרה, מיפוי התקנים בזיכרון וכד'
Multitasking and Intertask Communications
Multitasking and Intertask Communications
• Interrupt-driven, priority-based task scheduling.
ניתן ליצור כל שגרה/פונקציה כתהליך נפרד עם •מחסנית פרטית
ניתן לחסום, לשחרר, להשהות ולשנות עדיפות •של כל תהליך באמצעות קריאות מערכת
•VxWorks מספקת סמפורים מסוגים שונים לסינכרון בין תהליכים
• Interrupt-driven, priority-based task.scheduling
ניתן ליצור כל שגרה/פונקציה כתהליך נפרד עם •מחסנית פרטית
ניתן לחסום, לשחרר, להשהות ולשנות עדיפות •של כל תהליך באמצעות קריאות מערכת
•VxWorks מספקת סמפורים מסוגים שונים לסינכרון בין תהליכים
Portable Operating System Interface (POSIX)
Portable Operating System Interface (POSIX)
אוסף תקנים עבור קריאות מערכת •משמש לתאימות בין מערכות ויכולת העברת קוד •
ממערכת למערכת•VxWorks:תומכת בתקן זה עבור
• asynchronous I/O• Semaphores, message queues• memory management• queued signals• Scheduling, clocks and timers
אוסף תקנים עבור קריאות מערכת •משמש לתאימות בין מערכות ויכולת העברת קוד •
ממערכת למערכת•VxWorks:תומכת בתקן זה עבור
• asynchronous I/O• Semaphores, message queues• memory management• queued signals• Scheduling, clocks and timers
I/O SystemI/O System
תמיכה בהתקנים רבים דרך פונקציות •()open(), close(), readסטנדרטיות כגון :
ANSI-C (printf, scanf)תמיכה ב- •
fopen, fclose, ק/פ באמצעות חוצצים ע"י: •fread, fwrite, putc, getc
תמיכה בתקשורת טורית, התקני ק/פ מכניים•
תמיכה בהתקנים רבים דרך פונקציות •()open(), close(), readסטנדרטיות כגון :
ANSI-C (printf, scanf)תמיכה ב- •
,fopen, fcloseק/פ באמצעות חוצצים ע"י: •fread, fwrite, putc, getc
תמיכה בתקשורת טורית, התקני ק/פ מכניים•
File SystemsFile Systems
, הכוללת DOSתמיכה במערכת הקבצים של •ארגון היררכי, יכולת חלוקת קובץ למספר
.case senחלקים, ויכולת לעבוד במצב של (ללא היררכיה)rt11fsתמיכה ב- • – הדיסק מוגדר כקובץ אחד rawfsתמיכה ב- •
גדול. ביצועים טובים יותריכולת עבודה עם מספר מערכות קבצים בו זמנית•
, הכוללת DOSתמיכה במערכת הקבצים של •ארגון היררכי, יכולת חלוקת קובץ למספר
.case senחלקים, ויכולת לעבוד במצב של (ללא היררכיה)rt11fsתמיכה ב- • – הדיסק מוגדר כקובץ אחד rawfsתמיכה ב- •
גדול. ביצועים טובים יותריכולת עבודה עם מספר מערכות קבצים בו זמנית•
Network SupportNetwork Support
hostתקשורת קלה ומהירה עם מחשב ה- •מאפשרת פיתוח התוכנה עליו, איתור שגיאות
RTמרוחק ושימוש ברכיבי תוכנה שאינם hostוממוקמים ב-
TCP/IPתמיכה ב- •
שימוש במשאבים מרוחקים•
hostיכולת איתחול דינאמי של המערכת מה- •
hostתקשורת קלה ומהירה עם מחשב ה- •מאפשרת פיתוח התוכנה עליו, איתור שגיאות
RTמרוחק ושימוש ברכיבי תוכנה שאינם hostוממוקמים ב-
TCP/IPתמיכה ב- •
שימוש במשאבים מרוחקים•
hostיכולת איתחול דינאמי של המערכת מה- •
TasksTasks
רצים כיחידות עצמאיות עם VxWorksתהליכים ב- •אוגרים נפרדים ומשאבים נפרדים
לכל תהליך יש עדיפות, באמצעות העדיפות נקבע זמן •הריצה של התהליך
כל התהליכים משתפים את אותו מרחב זיכרון• מצבים:4לתהליך יש •
– readyמוכן לריצה – –delayedמושהה – –suspendedחסום – –pendedממתין למשאב –
יורץreadyהתהליך בעדיפות הגבוהה ביותר במצב •
רצים כיחידות עצמאיות עם VxWorksתהליכים ב- •אוגרים נפרדים ומשאבים נפרדים
לכל תהליך יש עדיפות, באמצעות העדיפות נקבע זמן •הריצה של התהליך
כל התהליכים משתפים את אותו מרחב זיכרון• מצבים:4לתהליך יש •
– readyמוכן לריצה – –delayedמושהה – –suspendedחסום – –pendedממתין למשאב –
יורץreadyהתהליך בעדיפות הגבוהה ביותר במצב •
שליטה על תהליכיםשליטה על תהליכים
יש אפשרות לשנות את אופן VxWorksב- •החלפת התהליכים:
•kernelTimeSlice שינוי – ()Round-Robin
•taskPrioritySetשינוי עדיפות תהליך – ()
•taskLockנעילת תהליך – ()
•taskUnlockשחרור תהליך – ()
יש אפשרות לשנות את אופן VxWorksב- •החלפת התהליכים:
•kernelTimeSlice שינוי – ()Round-Robin
•taskPrioritySetשינוי עדיפות תהליך – ()
•taskLockנעילת תהליך – ()
•taskUnlockשחרור תהליך – ()
Preemptive MultitaskingPreemptive Multitasking
בשיטה זו התהליך בעדיפות הגבוהה ביותר • ירוץ עד שיכנס תהליך בעדיפות readyבמצב
גבוהה יותר או עד שיסתיים רמות של עדיפות 256 יש VxWorksב- •
– העדיפות הגבוהה ביותר0– – העדיפות הנמוכה ביותר255–
תהליך מקבל עדיפות כאשר נוצר אולם ניתן •לשנות עדיפות זו בזמן הריצה
בשיטה זו התהליך בעדיפות הגבוהה ביותר • ירוץ עד שיכנס תהליך בעדיפות readyבמצב
גבוהה יותר או עד שיסתיים רמות של עדיפות 256 יש VxWorksב- •
– העדיפות הגבוהה ביותר0– – העדיפות הנמוכה ביותר255–
תהליך מקבל עדיפות כאשר נוצר אולם ניתן •לשנות עדיפות זו בזמן הריצה
Round-Robin SchedulingRound-Robin Scheduling
היא שאם יש preemptive multitaskingהבעיה של •מספר תהליכים בעלי עדיפות זהה רק אחד מהם ירוץ
מחלקים את הזמן לפרוסות וכל round-robinבשיטת •תהליך מקבל פרוסת זמן
החלוקה היא תמיד בין התהליכים בעדיפות הגבוהה •ביותר
) מאפשרת שינוי מרווח )kernelTimeSliceהפונקציה •הזמן בין כל שתי החלפות
היא שאם יש preemptive multitaskingהבעיה של •מספר תהליכים בעלי עדיפות זהה רק אחד מהם ירוץ
מחלקים את הזמן לפרוסות וכל round-robinבשיטת •תהליך מקבל פרוסת זמן
החלוקה היא תמיד בין התהליכים בעדיפות הגבוהה •ביותר
) מאפשרת שינוי מרווח )kernelTimeSliceהפונקציה •הזמן בין כל שתי החלפות
יצירת תהליכיםיצירת תהליכים
•taskSpawn – )(יצירה ואתחול של תהליך•taskInit – )( יצירת תהליך במצבsuspend•taskActivate )(אתחול תהליך –דוגמא:•
• ,id=taskSpawn(name, priority, options ;(stacksize, func_add,arg1,…,arg10
שם התהליך חייב להיות ייחודי (ניתן לרשום •מחרוזת ריקה ואז השם ינתן ע"י המערכת
•taskSpawn – )(יצירה ואתחול של תהליך•taskInit – )( יצירת תהליך במצבsuspend•taskActivate )(אתחול תהליך –דוגמא:•
• id=taskSpawn(name, priority, options, stacksize, func_add,arg1,…,arg10);
שם התהליך חייב להיות ייחודי (ניתן לרשום •מחרוזת ריקה ואז השם ינתן ע"י המערכת
פונקציותפונקציות
•taskName )( מחזירה את שם התהליך לפי –id•taskNameToId )( – מחזירה את ה –id לפי
השם•taskIdSelf )( מחזירה את המזהה של התהליך –
הנוכחי•taskIdVerify )( מחזירה האם קיים תהליך –
מסויים( לפי מזהה)
•taskName )( מחזירה את שם התהליך לפי –id•taskNameToId )( – מחזירה את ה –id לפי
השם•taskIdSelf )( מחזירה את המזהה של התהליך –
הנוכחי•taskIdVerify )( מחזירה האם קיים תהליך –
מסויים( לפי מזהה)
דוגמאדוגמא
• tid = taskSpawn ("tMyTask", 90, VX_FP_TASK, 20000, myFunc, 2387, 0, 0, 0, 0, 0, 0, 0, 0, 0);
מציין שהתהליך VX_FP_TASKהמאפיין •יעשה שימוש במספרים ממשיים
• ,tid = taskSpawn ("tMyTask", 90 ,VX_FP_TASK, 20000, myFunc;(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2387
מציין שהתהליך VX_FP_TASKהמאפיין •יעשה שימוש במספרים ממשיים
#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;}
#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;}
פונקצית ההפעלהפונקצית ההפעלה
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);
}
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);
}
Task InformationTask Information
•taskIdListGet )( מאתחלת מערך בכל מספרי –התהליכים הפעילים
•taskPriorityGet )(מחזירה את העדיפות –•taskRegsGet )( מחזירה את הרגיסטרים של –
התהליך•taskRegsSet )(קובעת את הרגיסטרים –•taskIsSuspended)(•taskIsReady)(
•taskIdListGet )( מאתחלת מערך בכל מספרי –התהליכים הפעילים
•taskPriorityGet )(מחזירה את העדיפות –•taskRegsGet )( מחזירה את הרגיסטרים של –
התהליך•taskRegsSet )(קובעת את הרגיסטרים –•taskIsSuspended)(•taskIsReady)(
Task-DeletionTask-Deletion
•exit )(סיום התהליך הנוכחי –
•taskDelete )(סיום תהליך לפי מזהה –
•taskSafe )(הגנה על תהליך שלא יסגר –
•taskUnsafe )(שחרור ההגנה –
זיכרון דינאמי אינו משתחרר אוטומטית כאשר •התהליך נסגר
•exit )(סיום התהליך הנוכחי –
•taskDelete )(סיום תהליך לפי מזהה –
•taskSafe )(הגנה על תהליך שלא יסגר –
•taskUnsafe )(שחרור ההגנה –
זיכרון דינאמי אינו משתחרר אוטומטית כאשר •התהליך נסגר
הגנה על תהליךהגנה על תהליך
taskSafe ();semTake (semId, WAIT_FOREVER);
/* Block until semaphore available */.. critical region.semGive (semId); /* Release semaphore */taskUnsafe ();
אסור לסגור תהליך שמחזיק משאב
;() taskSafe ;semTake (semId, WAIT_FOREVER)
/* Block until semaphore available */. .critical region./* semGive (semId); /* Release semaphore;() taskUnsafe
אסור לסגור תהליך שמחזיק משאב
Task ControlTask Control
• taskSuspend()
• taskResume()
• taskRestart()
• taskDelay()
• nonosleep()
delayשימוש ב-•
• taskDelay(sysClkRateGet()/2); //500ms
• taskSuspend()
• taskResume()
• taskRestart()
• taskDelay()
• nonosleep()
delayשימוש ב-•
• taskDelay(sysClkRateGet()/2); //500ms
SemaphoresSemaphores
אובייקטים המשמשים לחסימה/שחרור •תהליכים לצורך סינכרון ותקשורת
סוגים:3•
• binary
• counting
• mutex
אובייקטים המשמשים לחסימה/שחרור •תהליכים לצורך סינכרון ותקשורת
סוגים:3•
• binary
• counting
• mutex
Binary SemaphoresBinary Semaphores
תהליך שרוצה להמתין לארוע משתמש •באובייקט זה.
התהליך יחסם עד שיתקבל הארוע•
()semBCreateיצירה: •
()semTakeהמתנה: •
()semGiveשחרור: •
תהליך שרוצה להמתין לארוע משתמש •באובייקט זה.
התהליך יחסם עד שיתקבל הארוע•
()semBCreateיצירה: •
()semTakeהמתנה: •
()semGiveשחרור: •
Counting SemaphoresCounting Semaphores
•Binary semaphoreמשמש לקבלת ארוע יחיד
כאשר רוצים לדעת גם כמה ארועים התקבלו •משתמשים באובייקט זה
()semCCreateיצירה: •
•Binary semaphoreמשמש לקבלת ארוע יחיד
כאשר רוצים לדעת גם כמה ארועים התקבלו •משתמשים באובייקט זה
()semCCreateיצירה: •
MutexMutex
משמש לשיתוף משאבים (חומרה, קבצים וכו') •בין תהליכים
()semMCreateיצירה: •
()semDelete מכל סוג: semמחיקת •
משמש לשיתוף משאבים (חומרה, קבצים וכו') •בין תהליכים
()semMCreateיצירה: •
()semDelete מכל סוג: semמחיקת •
Message QueuesMessage Queues
להעברת הודעות בין תהליכיםFIFOחוצץ •
תהליך שמנסה לקרוא מחוצץ ריק או לכתוב •)timeoutלחוצץ מלא ייחסם (ניתן לקבוע
()msgQCreateיצירה: •
()msgQSendשליחת הודעה: •
()msgQReceiveקבלת הודעה: •
()msgQDeleteמחיקה: •
להעברת הודעות בין תהליכיםFIFOחוצץ •
תהליך שמנסה לקרוא מחוצץ ריק או לכתוב •)timeoutלחוצץ מלא ייחסם (ניתן לקבוע
()msgQCreateיצירה: •
()msgQSendשליחת הודעה: •
()msgQReceiveקבלת הודעה: •
()msgQDeleteמחיקה: •
WatchdogsWatchdogs
משמשים לתזמון פעולות. הפעלת פונקציה •אחרי זמן מסויים
;()wd=wdCreate
;wdStart(wd,sysClkRateGet()*3,funcPtr,arg)
()wdCancelביטול: •
()wdDeleteמחיקה: •
משמשים לתזמון פעולות. הפעלת פונקציה •אחרי זמן מסויים
wd=wdCreate();
wdStart(wd,sysClkRateGet()*3,funcPtr,arg);
()wdCancelביטול: •
()wdDeleteמחיקה: •
Deadline-Miss DetectionDeadline-Miss Detection
בדיקה שקטע קוד מתבצע בזמן נתון אחרת טיפול •בשגיאה
;()wd=wdCreate
;wdStart(wd,deadline,panic,arg)
;()doWork
;wdCancel(wd)
:
{..…}(…)void panic
בדיקה שקטע קוד מתבצע בזמן נתון אחרת טיפול •בשגיאה
wd=wdCreate();
wdStart(wd,deadline,panic,arg);
doWork();
wdCancel(wd);
:
void panic(…){…..}
SignalsSignals
שליחת ארוע אסינכרוני לתהליך אחר•exceptionsטיפול ב- •אם בתהליך מסויים התרחשה שגיאה ונקבעה •
פונקצית טיפול היא תופעל, אחרת התהליך יחסם
פונקצית הטיפול יכולה לאתחל את התהליך או •()setjmpלחזור לנקודה מסויימת שנקבעה ע"י
()longjmpחזרה לנקודה שנקבעה: •
שליחת ארוע אסינכרוני לתהליך אחר•exceptionsטיפול ב- •אם בתהליך מסויים התרחשה שגיאה ונקבעה •
פונקצית טיפול היא תופעל, אחרת התהליך יחסם
פונקצית הטיפול יכולה לאתחל את התהליך או •()setjmpלחזור לנקודה מסויימת שנקבעה ע"י
()longjmpחזרה לנקודה שנקבעה: •