현재 실행 중인 태스크의 스택 메모리의 위치를 가르키는 레지스터
프로세서가 태스크의 현재 상태를 나타내기 위해 사용하는 모든 정보
각 태스크의 메타 데이터 저장

모든 CPU의 레지스터를 문맥이라 한다. 문맥 전화은, 선점된 태스크의 모든 레지스터 값을 스택에 저장한 뒤, 전에 저장했던 레지스터 값을 CPU로 복구하여 새로운 태스크를 실행하는 것
이 함수는, 우선순위가 가장 높은 태스크를 찾아서, 문맥전환을 시킨다


1. TCB에 있는 SP를 받아오면, 태스크의 context에 접근이 가능하다
2. 그 모든 context를 CPU로 읽어오면 문맥 복원 종료

vTaskDelay 같은 함 수 안에 문맥 전환 코드 있다

이게 문맥전환 발생하는 API, 이 API는 portYIELD() 함수를 사용한다

이 함수 내부를 보면 NVIC를 사용한다. NVIC가 PenSV 인터럽트를 펜딩 상태로 만들어, 문맥전환을 유도한다
ARM Cortex-M 프로세서에서 인터럽트를 관리하고 우선순위를 제어하는 하드웨어 모듈이다



타이머 인터럽트인 SysTick_Handler 내부에



여기서도 이제 NVIC 이용해서, PenSV 인터럽트 펜딩상태로 전환하고, 인터럽트 순서 와서 처리되면서 문맥전환 코드 사용되면서 문맥전환 일어나는 것
void 테스크이름(파라미터)

우선 순위 0
삭제할 수 없는 테스크
Hook 함수 존재(콜백 함수)


타이머 인터럽트가 들어올 때 마다 xTickCount가 증가한다