1 / 14

POSIX

POSIX. POSIX: Portable OS Interface IEEE standard Mandatory + Optional parts Mostly based on and adopted by Unix community POSIX.4 = POSIX 1003.1b Added Realtime functionality POSIX.4a = POSIX 1003.1c Threads Extensions. POSIX.4 = POSIX 1003.1b. Range of RT Features

brigit
Download Presentation

POSIX

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. POSIX • POSIX: Portable OS Interface • IEEE standard • Mandatory + Optional parts • Mostly based on and adopted by Unix community • POSIX.4 = POSIX 1003.1b • Added Realtime functionality • POSIX.4a = POSIX 1003.1c • Threads Extensions Dr. Hugh Melvin, Dept. of IT, NUI,G

  2. POSIX.4 = POSIX 1003.1b • Range of RT Features • Shared Memory / Memory Locking / Priority Scheduling / Signals / Semaphores / Clocks & Timers • Will examine many of these issues • Adopted by many RTOS : QNX, LynxOS, VxWorks • POSIX.4b = POSIX 1003.1d • More realtime extensions Dr. Hugh Melvin, Dept. of IT, NUI,G

  3. POSIX.4 RT Scheduling • Defines two main scheduling policies • SCHED_FIFO and SCHED_RR • Each have attributes • Also have SCHED_OTHER • Currently a single attribute = priority struct sched_param{ int sched_priority; } • Eg. Could implement EDF by extending structure to include • struct timespec sched_deadline; • struct timespec sched_timerequired; Dr. Hugh Melvin, Dept. of IT, NUI,G

  4. POSIX.4 RT Scheduling • SCHED_FIFO • Simple priority based preemptive scheduler • Most common in RTS • FIFO used to schedule processes within each priority level • If no other process exists at higher priority, process runs until complete • Next process at that priority (if present) then allocated CPU • Highest priority process guaranteed processor time Dr. Hugh Melvin, Dept. of IT, NUI,G

  5. POSIX.4 RT Scheduling • SCHED_RR • Round robin used to timeslice among processes at same priority level • System provided timeslice • Use for lower priority tasks Dr. Hugh Melvin, Dept. of IT, NUI,G

  6. POSIX.4 RT Scheduling • Setting scheduling policy and attribute #include <sched.h> struct sched_param scheduling_parameters; int scheduling_policy; int i; scheduling_parameters.sched_priority=17; i=sched_setscheduler(getpid( ),SCHED_FIFO, &scheduling_parameters); • getpid( ) used to determine process ID • Process set to FIFO, priority 17 Dr. Hugh Melvin, Dept. of IT, NUI,G

  7. POSIX.4 RT Scheduling • Process priority ranges differ among OS • Need this info before setting priority level int sched_rr_min, sched_rr_max; int sched_fifo_min, sched_fifo_max; sched_rr_min=sched_get_priority_min(SCHED_RR); sched_rr_max=sched_get_priority_max(SCHED_RR); sched_fifo_min=sched_get_priority_min(SCHED_FIFO); sched_fifo_max=sched_get_priority_max(SCHED_FIFO); • Eg. 256 priority levels • FIFO range 128-255 • RR range 0-127 Dr. Hugh Melvin, Dept. of IT, NUI,G

  8. POSIX.4 RT Scheduling Eg. #include<sched.h> int i; struct sched_param my_sched_params; // determine max FIFO priority level my_sched_params.sched_priority= sched_get_priority_max(SCHED_FIFO); // Set priority i=sched_setparam(getpid (),&my_sched_params); Dr. Hugh Melvin, Dept. of IT, NUI,G

  9. POSIX.4 Clocks & Timers • Must be at least one clock • CLOCK_REALTIME • clock_gettime( ), clock_settime( ) • Replaces gettimeofday( ),settimeofday() • timespec structure (sec + nsec) • struct timespec{ time_t tv_sec; time_t tv_nsec; } • clock_getres(CLOCK_REALTIME,&realtime_res) • Returns clock resolution : must be at least 50 Hz • realtime_res is timespec structure • Realtime libraries reqd Dr. Hugh Melvin, Dept. of IT, NUI,G

  10. POSIX #include<unistd.h> #include<time.h> int main(){ struct timespec clock_res; int stat; stat=clock_getres(CLOCK_REALTIME, &clock_res); printf("Clock resol is %d sec, %ld nseconds\n",clock_res.tv_sec,clock_res.tv_nsec); return 0; } Dr. Hugh Melvin, Dept. of IT, NUI,G

  11. POSIX.4 Clocks & Timers • nanosleep(&nap,&time_left) • Can delay process (both nap & time_left are timespec) • Interval Timers • Useful to specify precise intervals • struct itimerspec{ struct timespec it_value; struct timespec it_interval; } it_value = 1st occasion of timer event it_interval = interval between subsequent events • System calls • timer_create( ) and timer_delete( ) • Can have multiple timers within any process Dr. Hugh Melvin, Dept. of IT, NUI,G

  12. POSIX.4 Clocks & Timers • Interval Timer example timer_t created_timer; i = timer_create( _ , _ , &created_timer); struct itimerspec new,old; new.it_value.tv_sec=1; new.it_value.tv_nsec=0; new.it_interval.tv_sec=0; new.it_interval.tv_nsec=100000; i=timer_settime(created_timer, 0,&new, &old) .. i=timer_delete(created_timer) Dr. Hugh Melvin, Dept. of IT, NUI,G

  13. POSIX.4 Clocks & Timers • Absolute Timer Events • Eg. Timer event reqd at time tabs • Determine interval and use interval timer • clock_gettime(CLOCK_REALTIME, &now); • Calculate interval • Interval = tabs - now • Create and set Interval timer as above • But • Process may be preempted between step 1 and 2 Use absolute times timer_settime(created_timer,TIMER_ABSTIME,&tabs ,NULL) Dr. Hugh Melvin, Dept. of IT, NUI,G

  14. This function reads the hardware clock using the "intel" RDTSC assembly instruction. void get_timestamp(unsigned long* upper32bits, unsigned long* lower32bits) { unsigned long lower32, upper32, first_upper32; do { __asm RDTSC __asm mov upper32, EDX __asm mov lower32, EAX first_upper32 = upper32; __asm RDTSC __asm mov upper32, EDX } while (first_upper32 != upper32); // protect against wraparound *lower32bits = lower32; *upper32bits = upper32; } Dr. Hugh Melvin, Dept. of IT, NUI,G

More Related