우선 순위 기반의 선점 형 스케줄러를 사용하는 RTOS를 설계하고 있습니다. PCB에는 무엇이 들어 있습니까? 필자는RTOS 용 프로세스 제어 블록 유형은 무엇입니까?
나는 또한 마감? 아니면 다른 어떤을 포함해야
1) PID 2) 우선 순위 3) 프로그램 카운터 4) 상태 5) 일부 플래그를 등록이 항목을 마련 할 수 있었다 fields
우선 순위 기반의 선점 형 스케줄러를 사용하는 RTOS를 설계하고 있습니다. PCB에는 무엇이 들어 있습니까? 필자는RTOS 용 프로세스 제어 블록 유형은 무엇입니까?
나는 또한 마감? 아니면 다른 어떤을 포함해야
1) PID 2) 우선 순위 3) 프로그램 카운터 4) 상태 5) 일부 플래그를 등록이 항목을 마련 할 수 있었다 fields
이것은 작성한 아키텍처에 다소 좌우됩니다.
상태 레지스터뿐 아니라 모든 레지스터 [1]가 필요합니다.
스택 포인터. 아마도 스택 크기.
인터럽트 마스크 상태
당신의 OS는 부동 소수점을 지원하고 CPU가 부동 소수점 유닛이있는 경우, 또한 그 레지스터를 저장하는 것을 잊지 마세요.
[1] 여러 가지 레지스터 뱅크가있는 ARM과 같은 코드를 작성하지 않는 한 [1]. 이 경우 정상적인 작동에 사용되는 뱅크 만 저장하면됩니다.
전체 레지스터 세트는 스레드의 스택에 저장되는 경우가 많습니다. 즉, 프로그램 카운터, 상태 레지스터 및 컨텍스트 전환이 필요한 다른 레지스터를 저장하는 데 필요한 스택 포인터가 모두 하나 일 수 있습니다. 여기
가 몇 달 전에-소스 열 내가 RTOS에서 실제 예제 TCB/PCB입니다 ( Atomthreads) : 스택 포인터에서 별도로typedef struct atom_tcb
{
/* Thread's current stack pointer */
POINTER sp_save_ptr;
/* Thread priority (0-255) */
uint8_t priority;
/* Thread entry point and parameter */
void (*entry_point)(uint32_t);
uint32_t entry_param;
/* Queue pointers */
struct atom_tcb *prev_tcb; /* Previous TCB in doubly-linked TCB list */
struct atom_tcb *next_tcb; /* Next TCB in doubly-linked list */
/* Suspension data */
uint8_t suspended; /* TRUE if task is currently suspended */
uint8_t suspend_wake_status; /* Status returned to woken suspend calls */
ATOM_TIMER *suspend_timo_cb; /* Callback registered for suspension timeouts */
} ATOM_TCB;
, 다음과 같이 내가 필요한 핵심 요소가 있었다 :
이것이 유일한 방법은 아닙니다. RTOS 디자인을 시작하고 다양한 OS 기본 (세마포, 큐 등)을 구현할 때 자신의 특정 요구 사항이 명확 해짐을 알 수 있습니다.
향후 사용을 위해 레이블이 지정된 큰 블록 블록. 이전/다음 PCB에 대한 포인터. – dbasnett