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 |