posix

14
Dr. Hugh Melvin, Dept. of IT, NUI,G 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

Upload: brigit

Post on 06-Jan-2016

72 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: POSIX

Dr. Hugh Melvin, Dept. of IT, NUI,G 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

Page 2: POSIX

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

Page 3: POSIX

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;

Page 4: POSIX

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

Page 5: POSIX

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

Page 6: POSIX

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

Page 7: POSIX

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 levelint 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

Page 8: POSIX

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);

Page 9: POSIX

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

Page 10: POSIX

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;

}

Page 11: POSIX

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 eventit_interval = interval between subsequent events

• System calls – timer_create( ) and timer_delete( )– Can have multiple timers within any process

Page 12: POSIX

Dr. Hugh Melvin, Dept. of IT, NUI,G 12

POSIX.4 Clocks & Timers

• Interval Timer exampletimer_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)

Page 13: POSIX

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 2Use absolute times

timer_settime(created_timer,TIMER_ABSTIME,&tabs ,NULL)

Page 14: POSIX

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; }