임베디드/임베디드 레시피

선점형 kernel

twoweeks-within 2025. 1. 7. 14:13

TCB 관리 , kernel 에게 현재 tast 해야할일 을 알려주기 위한 kernel API 

   ? wait, send, clr signal()

 

현재 task 가 wait 상태이며, wait 시그널의 비트and 해서 0이면

wait signal Update ,  가장 높은 우선순위를 찾아 그놈으로 context switching

 

 

 

 

send_signal() 구현

(1)목적지가 wait를 하고있는지 확인해야함 > 그래야 보내주니깐

(2) 함수입력할때 확인용 signal 을 대치 해봄  

 

send_signal (목적지tcb, 보낼 signal)

1. 목적지tcb ->받는 신호를 백업

2. 받는신호를 현재 보낼 signal 과 비트연산

wait 신호와 시그널이 같은지?

>

wait 시그널=0 ,

우선순위확인

>

우선순위여야 : 현재 tcb 를 hightst tcb로 넣어줌 >context switching

 

>> 선점형 context switching > 최우선부터 쭈루룩 실행

 

kernel API 뿐아니라 IRQ mode 에서도 되게해야함

>

 

ITQ_Handler

~~

~~

BLX r3

  if( 최우선순위 task 가 인터럽트 걸렸을때 task 와 같은가?

    {

      STMFD sp ~~~~

    }

      else

        {

           preemption 이 일어남 // 우선권인 놈이 선점

       현재 context( irq mode stack) > 해당 task stack 에저장

        다음 task TCB > sp 참조 > irq mode 의 이전에 있던 Register에 context 를 불러드리고

        SPST > CPST 로 복구

        새로운 task 의 context가 현재 cpu context 가 됨.

         }

>> ex) 의사코드 Pseudo Code 

 

>> 의사코드 그림으로 표현 

 

/*

ISR 이 최우선임 && 낮은 task 부터 처리중임

task A를 하다가 isr > isr 끝내고 a 로 

만약 isr이 아닌 다른 task > 무조건 이전보다 높은 task 이므로

preemption 이 일어남

*/

 

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

ATOMIC  (0) 2025.01.07
Clock Tick ISR  (0) 2025.01.07
ISR구현  (0) 2025.01.07
TCB 구조  (0) 2024.12.18
TCB - Task , CS  (1) 2024.12.17