SlideServe
Menu
Préférences
© SlideServe · v2026

POSIX

brigit avatar
14 diapositives · 720 Views · Oct 15, 2014

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

POSIX - slide 1
01 / 14POSIX
1 / 17

Télécharger la présentation

POSIX
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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