264 uint32_t **PageDirectory, uint32_t PageDirSize,
265 uint32_t cr3,
ProcessData ProcData, uint32_t ParentProcessId);
322 static inline Task *ckTaskGetCurrent(
void) {
return g_pTaskStruct->
pNow; }
324 static inline uint32_t ckTaskGetCurrentId(
void) {
return g_pTaskStruct->
pNow->id; }
327 static inline Process *ckProcessGetCurrent(
void) {
return g_pTaskStruct->
pNow->pProcess; }
329 static inline uint32_t ckProcessGetCurrentId(
void) {
return g_pTaskStruct->
pNow->pProcess->id; }
334 static inline Task *ckTaskGetKernel(
void) {
return g_pTaskStruct->
tasks + 0; }
336 static inline Task *ckTaskGetIdle(
void) {
return g_pTaskStruct->
tasks + 1; }
338 static inline Process *ckProcessGetKernel(
void) {
return g_pTaskStruct->
processes + 0; }
346 static inline void ckTaskSetInitParam(
void **pStackTop,
void *param)
348 *pStackTop -=
sizeof(
void *);
349 *(
void **)(*pStackTop) = param;
350 *pStackTop -=
sizeof(
void *);
351 *(
void **)(*pStackTop) = ckTaskExit;
355 static inline void ckLoadTr(uint32_t tr)
357 __asm__ __volatile__ (
"ltr (%0)" : :
"r"(&tr) );
364 static inline void ckFpuFinit()
366 __asm__ __volatile__ (
"finit" );
370 static inline void ckFpuFxsave(FpuContext *pFpuContext)
372 __asm__ __volatile__ (
"fxsave %0" :
"=m"(*pFpuContext) );
376 static inline void ckFpuFxrstor(
const FpuContext *pFpuContext)
378 __asm__ __volatile__ (
"fxrstor %0" : :
"m"(*pFpuContext) );
LinkedListNode ChildNode
부모 프로세스가 이 프로세스를 관리하기 위해 사용하는 노드입니다.
Definition: task.h:164
bool bSSEIsExist
SSE의 사용 가능 여부입니다.
Definition: task.h:212
ProcessData * pProcData
현재 실행중인 프로세스의 data입니다. pNow->pProcess->ProcData와 동일합니다.
Definition: task.h:204
uint32_t PageDirSize
PageDirectory 의 크기입니다.
Definition: task.h:174
프로세스를 나타내는 구조체입니다.
Definition: task.h:156
uint32_t ebx
Definition: task.h:92
enum tagTaskPriority TaskPriority
태스크의 스케쥴 우선순위를 나타내는 열거형입니다.
uint32_t stacksize
이 태스크의 스택의 크기입니다. 동적으로 할당된 스택이 아닐 경우 무효한 값입니다.
Definition: task.h:150
uint32_t esp1
Definition: task.h:91
void ckProcessJoin(uint32_t ProcId)
지정된 프로세스가 종료될 때까지 기다립니다.
Definition: task.c:577
uint32_t id
이 태스크의 id입니다.
Definition: task.h:152
Task * pLastTaskUsedFPU
마지막으로 FPU를 사용한 태스크입니다.
Definition: task.h:210
LinkedListNode _node
Definition: task.h:158
uint32_t ss
Definition: task.h:93
uint8_t data[512]
Definition: task.h:111
bool ckTaskTerminate(uint32_t TaskId)
태스크를 종료시킵니다.
Definition: task.c:304
FPU 콘텍스트를 나타내는 구조체입니다.
Definition: task.h:109
이중 환형 연결 리스트의 한 노드를 나타내는 구조체입니다.
Definition: linkedlist.h:42
uint32_t stacksize
이 태스크의 스택의 크기입니다. 동적으로 할당된 스택이 아닐 경우 무효한 값입니다.
Definition: task.h:843
uint32_t ckProcessCreate(uint32_t eip, uint32_t esp, void *stack, uint32_t stacksize, TaskPriority priority, uint32_t **PageDirectory, uint32_t PageDirSize, uint32_t cr3, ProcessData ProcData, uint32_t ParentProcessId)
프로세스를 생성합니다.
Definition: task.c:257
TSS를 나타내는 구조체입니다.
Definition: task.h:89
LinkedList ReadyList[COUNT_TASK_PRIORITY]
TASK_FLAG_RUNNING 상태의 태스크의 우선순위 큐입니다.
Definition: task.h:196
TaskPriority priority
태스크의 우선순위입니다.
Definition: task.h:829
uint32_t ss2
Definition: task.h:91
태스크가 다른 작업이 완료되기를 기다리고 있습니다.
Definition: task.h:104
uint32_t fs
Definition: task.h:93
uint32_t backlink
Definition: task.h:91
bool ckTaskSuspend(uint32_t TaskId)
태스크를 TASK_FLAG_WAIT 상태로 만듭니다.
Definition: task.c:469
uint32_t ebp
Definition: task.h:92
uint32_t id
이 프로세스의 id입니다.
Definition: task.h:180
uint32_t ExecuteCount[COUNT_TASK_PRIORITY]
각 우선순위별로 실행된 횟수를 기록하는 배열입니다.
Definition: task.h:201
void * stack
동적으로 할당된 이 태스크의 스택입니다. NULL일 경우 정적 할당된 스택을 사용합니다.
Definition: task.h:842
void ckTaskScheduleOnTimerInt(void)
타이머 인터럽트가 발생했을 때 호출해 태스크를 스위칭합니다.
Definition: task.c:604
TaskPriority priority
태스크의 우선순위입니다.
Definition: task.h:136
uint32_t selector
태스크 디스크럽터 셀렉터입니다. 0이면 사용되지 않은 Task 구조체입니다.
Definition: task.h:133
void ckTaskStructInitialize(void)
멀티태스킹을 초기화합니다.
Definition: task.c:88
ProcessData ProcData
이 프로세스의 data입니다.
Definition: task.h:182
uint32_t ckTaskCreate(uint32_t eip, uint32_t esp, void *stack, uint32_t stacksize, uint32_t ProcessId, TaskPriority priority)
태스크를 생성합니다.
Definition: task.c:189
uint32_t gs
Definition: task.h:93
tagTaskPriority
태스크의 스케쥴 우선순위를 나타내는 열거형입니다.
Definition: task.h:70
struct tagProcess * pProcess
이 태스크를 가지는 프로세스입니다.
Definition: task.h:146
void ckTaskJoin(uint32_t TaskId)
지정된 태스크가 종료될 때까지 기다립니다.
Definition: task.c:554
uint32_t cs
Definition: task.h:93
uint32_t edi
Definition: task.h:92
uint32_t ss1
Definition: task.h:91
태스크를 나타내는 구조체입니다.
Definition: task.h:124
bool ckTaskSuspend_byptr(Task *pTask)
tagTask 에 대한 포인터로 ckTaskSuspend 함수를 호출합니다.
Definition: task.c:486
tagTaskFlag
태스크의 현재 상태를 나타내는 열거형입니다.
Definition: task.h:100
struct tagProcessData ProcessData
프로세스 별로 가지는 데이터입니다.
LinkedListNode ThreadNode
프로세스가 이 태스크를 관리하기 위해 사용하는 노드입니다.
Definition: task.h:147
uint32_t ss0
Definition: task.h:91
uint32_t ProcessIdMask
프로세스 id 중복 방지를 위해 사용되는 비트 마스크입니다.
Definition: task.h:193
uint32_t cr3
페이지 디렉토리의 물리 주소입니다.
Definition: task.h:176
struct tagProcess Process
프로세스를 나타내는 구조체입니다.
Task * pNow
현재 실행중인 태스크입니다.
Definition: task.h:203
int bFpuUsed
이 태스크가 최근 FPU를 사용했는지 나타내는 진위형입니다.
Definition: task.h:141
프로세스 별로 가지는 데이터입니다.
Definition: task.h:115
LinkedList ThreadList
이 프로세스가 가지는 태스크의 리스트입니다.
Definition: task.h:160
태스크가 종료된 후 idle 태스크에 의해 정리되기를 기다리고 있습니다.
Definition: task.h:105
struct tagTss Tss
TSS를 나타내는 구조체입니다.
volatile uint32_t UsedCpuTime
이 프로세스가 사용한 CPU 시간입니다.
Definition: task.h:178
uint32_t es
Definition: task.h:93
uint32_t esp0
Definition: task.h:91
LinkedList WaitList
TASK_FLAG_WAIT 상태의 태스크의 목록입니다.
Definition: task.h:198
uint32_t cr3
Definition: task.h:91
uint32_t esp
Definition: task.h:92
uint32_t esi
Definition: task.h:92
uint16_t * TermBuffer
터미널 버퍼의 linear address입니다.
Definition: task.h:117
uint32_t eip
Definition: task.h:92
LinkedListNode _node
Definition: task.h:126
uint8_t _padding[3]
Definition: task.h:214
태스크 관리 구조체입니다.
Definition: task.h:186
이중 환형 연결 리스트 구조체입니다.
Definition: linkedlist.h:51
void * stack
동적으로 할당된 이 태스크의 스택입니다. NULL일 경우 정적 할당된 스택을 사용합니다.
Definition: task.h:149
uint32_t eflags
Definition: task.h:92
uint32_t ds
Definition: task.h:93
uint32_t RemainQuantum
태스크 스위칭까지 남은 CPU 시간입니다.
Definition: task.h:208
enum tagTaskFlag TaskFlag
태스크의 현재 상태를 나타내는 열거형입니다.
태스크가 현재 실행 중입니다.
Definition: task.h:102
Process processes[MAX_PROCESS]
프로세스의 배열입니다.
Definition: task.h:192
TaskFlag flag
태스크의 상태 flag입니다.
Definition: task.h:135
struct tagTask * WaitObj
이 값이 NULL이 아닐 경우 현재 태스크는 WaitObj 태스크가 종료되기를 기다리고 있습니다.
Definition: task.h:131
bool ckProcessTerminate(uint32_t ProcessId)
프로세스를 종료시킵니다.
Definition: task.c:388
struct tagProcess * pParentProcess
부모 프로세스입니다. 최상위 부모 프로세스이면 NULL입니다.
Definition: task.h:163
uint32_t esp2
Definition: task.h:91
void ckTaskSchedule(void)
CPU 시간을 양보하고 다른 태스크로 스위칭합니다.
Definition: task.c:597
Task * pMainThread
이 프로세스의 메인 태스크입니다. NULL이면 idle에서 정리해주기를 기다리고 있습니다.
Definition: task.h:161
volatile uint32_t ProcessorLoad
현재 프로세스 점유율입니다. 단위는 입니다.
Definition: task.h:206
#define TASKSTRUCT_ADDRESS
TaskStruct 구조체의 선형 주소입니다.
Definition: memory_map.h:67
Task tasks[MAX_TASK]
태스크의 배열입니다.
Definition: task.h:188
bool ckTaskChangePriority(uint32_t TaskId, TaskPriority priority)
태스크의 스케쥴 우선순위를 변경합니다.
Definition: task.c:443
LinkedList ChildProcessList
자식 프로세스의 리스트입니다.
Definition: task.h:166
uint32_t edx
Definition: task.h:92
volatile uint32_t UsedCpuTime
이 태스크가 사용한 CPU 시간입니다.
Definition: task.h:144
struct tagFpuContext __attribute__((aligned(16))) FpuContext
FPU 콘텍스트를 나타내는 구조체입니다.
uint32_t eax
Definition: task.h:92
FpuContext fpu_context
태스크의 FPU 콘텍스트입니다.
Definition: task.h:140
uint32_t TaskIdMask
태스크 id 중복 방지를 위해 사용되는 비트 마스크입니다.
Definition: task.h:189
Tss tss
태스크의 TSS입니다.
Definition: task.h:138
bool ckTaskResume_byptr(Task *pTask)
tagTask 에 대한 포인터로 ckTaskResume 함수를 호출합니다.
Definition: task.c:534
bool ckTaskResume(uint32_t TaskId)
TASK_FLAG_WAIT 상태의 태스크를 재개시킵니다.
Definition: task.c:518
uint32_t ldtr
Definition: task.h:94
uint32_t ** PageDirectory
이 프로세스의 페이지 디렉토리의 커널 프로세스의 선형 주소입니다.
Definition: task.h:168
uint32_t iomap
Definition: task.h:94
태스크가 실행을 기다리고 있습니다.
Definition: task.h:103
uint32_t ecx
Definition: task.h:92
LinkedList WaitForExitList
TASK_FLAG_WAITFOREXIT 상태의 태스크의 목록입니다.
Definition: task.h:199
struct tagTaskStruct TaskStruct
태스크 관리 구조체입니다.
LinkedListNode WaitNode
다른 태스크가 종료되기를 기다릴 때 사용되는 노드입니다.
Definition: task.h:130
LinkedList WaitMeList
자신이 종료되기를 기다리는 태스크들의 목록입니다.
Definition: task.h:128