real time systems

Post on 02-Jan-2016

30 Views

Category:

Documents

14 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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חזרה לנקודה שנקבעה: •

top related