Priority Inversion

공부기록·2023년 10월 15일
0
post-thumbnail

Critical Section


  • 공유자원을 이용하는 코드

  • MicroC/OS ii 에서의 사용법
    OS_EVENT* sem;
    sem = OSSemCreate(1);

    /task1/
    OSSemPend(sem, 0, &err);
    a++; //critical section
    OSSemPost(sem);

    /task2/
    OSSemPend(sem, 0, &err);
    a--; //critical section
    OSSemPost(sem, 0 , &err);



Priority Inversion 문제 예시


  • RMS : Static priority에서 priority inversion 발생
  • 우선순위가 낮은 task가 공유자원을 이용하는데 우선순위가 높은 task가 해당 자원에 접근하려하면 block된다.
  • 우선순위가 두 task 사이의 task가 들어오면 문제가 발생한다.

  • J3가 공유자원을 이용하여 J1이 블락되었다. J1 실행 중 J2가 실행되어 J1이 실행되지 못하여 deadline을 지키지 못하게 되는 상황이 발생할 수 있다.
  • J2에게 넘겨주면 안됨.

Priority Inheritance Protocol (PIP)


  • 우선순위가 낮은 task에서 공유자원 이용시 우선순위가 그 자원에 접근할 때, 우선순위 낮은 task가 높은 task의 우선순위를 부여해준 후 해당 task 종료시 원래의 우선순위로 돌아온다.



Deadlock

  • 두 task가 다 wait 상태에 빠지는 상황

Chained Blocking

  • 우선순위가 높은 task가 계속 block 당하는 상황

Priority Ceiling Protocol (PCP)


  • system ceiling을 정해둔 후 그것보다 높아야 critical section에 접근이 가능하다.

  • system ceiling : semaphore 생성시 해당 semaphore를 접근하는 task 중 가장 우선순위가 높은 task의 우선순위 값을 부여한다.

  • priority가 system ceiling보다 높아지면 접근이 가능해진다.

  • priority ceiling

  • s0 : J0

  • s1 : J1

  • s2 : J1

  • 같은 semaphore 건드는 거 아니더라도 하나 lock걸린게 다 영향이 간다.

  • 진짜 ceiling 처럼 다른 semaphore를 이용하려는 task를 막아버리는 것이다. task가 바뀌려면 이 system ceiling보다 높은 task가 들어와야한다.

0개의 댓글

관련 채용 정보