Sei sulla pagina 1di 12

Assignment No 2

1. Write the Vxworks code for the following and verify


the same in the Tornado tool.

Unbounded priority inversion

Vxworks code:
#include<stdio.h>

#include<VxWorks.h>

#include<taskLib.h>

#include<semLib.h>

void task1();

void task2();

void task3();

void task4();

void task5();

int taskId1,taskId2,taskId3,taskId4,taskId5;

SEM_ID semId;

void main()

semId=semMCreate(SEM_Q_FIFO);

taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);

taskDelay(10);

taskId2=taskSpawn("TASK2",180,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);

taskId3=taskSpawn("TASK3",170,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);

taskId4=taskSpawn("TASK4",160,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);
taskId5=taskSpawn("TASK5",150,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);

void task1()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 1\n");

taskDelay(10);

semGive(semId);

void task5()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 5\n");

void task2()

printf("\nTASK 2\n");

void task3()

printf("\nTASK 3\n");

void task4()

printf("\nTASK 4\n");

}
Output:

Explanation: Even though the task 5 has highest priority due


to Unbounded priority inversion it is executing at last.

Deadlock

Vxworks code:

#include"vxWorks.h"

#include"stdio.h"

#include"semaphore.h"

#include"taskLib.h"

int task1();

int task2();
SEM_ID semid1,semid2;

int tid1, tid2;

int main()

printf("\n*********************************\n");

printf("I am in Main Now......\n");

semid1=semMCreate(SEM_Q_FIFO);

semid2=semMCreate(SEM_Q_FIFO);

tid1=taskSpawn("TASK1",150,0,2000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);

tid2=taskSpawn("TASK2",150,0,2000,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);

return 0;

int task1()

semTake(semid1,WAIT_FOREVER);

printf("task1 is having semid1 now......\n");

taskDelay(10);

semTake(semid2,WAIT_FOREVER);

printf("task1 is tring to get semid2 now......\n");

semGive(semid1);

semGive(semid2);

return 0;

int task2()

semTake(semid2,WAIT_FOREVER);

printf("task2 having semid2 now......\n");


taskDelay(10);

semTake(semid1,WAIT_FOREVER);

printf("task2 is tring to get semid1 now......\n");

semGive(semid2);

semGive(semid2);

return 0;

Output:

Explanation: As both the tasks are waiting for semaphores,


they enter a deadlock condition.
Priority Inheritance

Vxworks code:

#include<stdio.h>

#include<VxWorks.h>

#include<taskLib.h>

#include<semLib.h>

void task1();

void task2();

void task3();

void task4();

void task5();

int taskId1,taskId2,taskId3,taskId4,taskId5;

SEM_ID semId;

void main()

semId=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE);

taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);

taskDelay(10);

taskId2=taskSpawn("TASK2",180,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);

taskId3=taskSpawn("TASK3",170,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);

taskId4=taskSpawn("TASK4",160,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);

taskId5=taskSpawn("TASK5",150,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);

}
void task1()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 1\n");

taskDelay(10);

printf("\n after delay TASK 1\n");

semGive(semId);

void task5()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 5\n");

void task2()

printf("\nTASK 2\n");

}
void task3()

printf("\nTASK 3\n");

void task4()

printf("\nTASK 4\n");

Output:

Explanation: Due to SEM_INVERSION_SAFE we can see that


priority inheritance is happening. After comparing it with the
results of unbounded priority inversion, we can easily see the
change.

2. Create a Single Binary semaphore for printing


Create 5 tasks with equal prioirty
4 tasks try to get and release the semaphore for PRINT
semBCreate(SEM_Q_PRIORITY, SEM_EMPTY)
semTake(semid1, WAIT_FOREVER)
semGive(semid1)
5th task for semaphore flush
semFlush(semid1)
Examine the output in the tornado IDE.

Vxworks code:

#include<stdio.h>

#include<VxWorks.h>

#include<taskLib.h>

#include<semLib.h>

void task1();

void task2();

void task3();

void task4();

void task5();

int taskId1,taskId2,taskId3,taskId4,taskId5;

SEM_ID semId;

void main()
{

semId=semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);

taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);

taskId2=taskSpawn("TASK2",200,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);

taskId3=taskSpawn("TASK3",200,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);

taskId4=taskSpawn("TASK4",200,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);

taskId5=taskSpawn("TASK5",200,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);

void task1()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 1 has the semaphore\n");

printf("\n*****TASK 1*****\n");

semGive(semId);

printf("\nTASK 1 has the released the semaphore\n");

void task2()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 2 has the semaphore\n");

printf("\n*****TASK 2*****\n");

semGive(semId);

printf("\nTASK 2 has the released the semaphore\n");

}
void task3()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 3 has the semaphore\n");

printf("\n*****TASK 3*****\n");

semGive(semId);

printf("\nTASK 3 has the released the semaphore\n");

void task4()

semTake(semId,WAIT_FOREVER);

printf("\nTASK 4 has the semaphore\n");

printf("\n*****TASK 4\*****n");

semGive(semId);

printf("\nTASK 4 has the released the semaphore\n");

void task5()

semFlush(semId);

Output:

Potrebbero piacerti anche