Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
task.c 파일 참조

multi-tasking & floating-point support 더 자세히 ...

#include "task.h"
#include "port.h"
#include "gdt.h"
#include "string.h"
#include "timer.h"
#include "assert.h"
#include "cpuid.h"
#include "interrupt.h"
#include "memory.h"
#include "likely.h"
#include "terminal.h"
task.c에 대한 include 의존 그래프

함수

void ckTaskStructInitialize (void)
 멀티태스킹을 초기화합니다. 더 자세히 ...
 
uint32_t ckTaskCreate (uint32_t eip, uint32_t esp, void *stack, uint32_t stacksize, uint32_t ProcessId, TaskPriority priority)
 태스크를 생성합니다. 더 자세히 ...
 
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)
 프로세스를 생성합니다. 더 자세히 ...
 
bool ckTaskTerminate (uint32_t TaskId)
 태스크를 종료시킵니다. 더 자세히 ...
 
bool ckProcessTerminate (uint32_t ProcessId)
 프로세스를 종료시킵니다. 더 자세히 ...
 
bool ckTaskChangePriority (uint32_t TaskId, TaskPriority priority)
 태스크의 스케쥴 우선순위를 변경합니다. 더 자세히 ...
 
bool ckTaskSuspend (uint32_t TaskId)
 태스크를 TASK_FLAG_WAIT 상태로 만듭니다. 더 자세히 ...
 
bool ckTaskSuspend_byptr (Task *pTask)
 tagTask 에 대한 포인터로 ckTaskSuspend 함수를 호출합니다. 더 자세히 ...
 
bool ckTaskResume (uint32_t TaskId)
 TASK_FLAG_WAIT 상태의 태스크를 재개시킵니다. 더 자세히 ...
 
bool ckTaskResume_byptr (Task *pTask)
 tagTask 에 대한 포인터로 ckTaskResume 함수를 호출합니다. 더 자세히 ...
 
void ckTaskJoin (uint32_t TaskId)
 지정된 태스크가 종료될 때까지 기다립니다. 더 자세히 ...
 
void ckProcessJoin (uint32_t ProcId)
 지정된 프로세스가 종료될 때까지 기다립니다. 더 자세히 ...
 
void ckTaskSchedule (void)
 CPU 시간을 양보하고 다른 태스크로 스위칭합니다. 더 자세히 ...
 
void ckTaskScheduleOnTimerInt (void)
 타이머 인터럽트가 발생했을 때 호출해 태스크를 스위칭합니다. 더 자세히 ...
 
void ck_ExceptIntHandler07 (InterruptContext *pContext)
 

상세한 설명

multi-tasking & floating-point support

날짜
2014. 5. 6.
작성자
dlarudgus20

함수 문서화

void ck_ExceptIntHandler07 ( InterruptContext pContext)
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 
)

프로세스를 생성합니다.

매개변수
[in]eip메인 태스크의 초기 eip입니다. 태스크가 실행할 코드입니다.
[in]esp메인 태스크의 초기 esp입니다. 스택의 최상단입니다.
[in]stack메인 태스크의 동적으로 할당된 스택입니다. 정적으로 할당한 스택을 사용하면 NULL을 지정하십시오. 참고:Task::stack
[in]stacksizestack의 크기입니다. 참고:Task::stacksize
[in]priority태스크의 스케쥴 우선순위입니다.
[in]PageDirectory페이지 디렉토리입니다. 참고:Process::PageDirectory
[in]PageDirSizePageDirectory의 크기입니다. 참고:Process::PageDirSize
[in]cr3페이지 디렉토리의 물리 주소입니다. 참고:Process::cr3
[in]ProcData이 프로세스의 data입니다.
[in]ParentProcessId부모 프로세스의 ID입니다.
반환값
생성된 프로세스의 id입니다. ParentProcessId가 무효하거나, 프로세스를 더 이상 생성할 수 없으면 PROCESS_INVALID_ID 가 반환됩니다.
void ckProcessJoin ( uint32_t  ProcId)

지정된 프로세스가 종료될 때까지 기다립니다.

지정한 프로세스 id가 무효하다면 (이미 종료됬다면) 그냥 리턴합니다.

매개변수
[in]ProcId기다릴 프로세스입니다.
bool ckProcessTerminate ( uint32_t  ProcessId)

프로세스를 종료시킵니다.

매개변수
[in]ProcessId종료시킬 태스크입니다.
반환값
ProcessId가 무효하다면 (이미 종료됬다면) false입니다. 그렇지 않다면 true입니다.
bool ckTaskChangePriority ( uint32_t  TaskId,
TaskPriority  priority 
)

태스크의 스케쥴 우선순위를 변경합니다.

매개변수
[in]TaskId우선순위를 변경할 태스크입니다.
[in]priority이 우선순위로 변경합니다.
반환값
TaskId가 무효하다면 false입니다. 그렇지 않다면 true입니다.
uint32_t ckTaskCreate ( uint32_t  eip,
uint32_t  esp,
void *  stack,
uint32_t  stacksize,
uint32_t  ProcessId,
TaskPriority  priority 
)

태스크를 생성합니다.

매개변수
[in]eip태스크의 초기 eip입니다. 태스크가 실행할 코드입니다.
[in]esp태스크의 초기 esp입니다. 스택의 최상단입니다.
[in]stack동적으로 할당된 스택입니다. 정적으로 할당한 스택을 사용하면 NULL을 지정하십시오. 참고:Task::stack
[in]stacksizestack의 크기입니다. 참고:Task::stacksize
[in]ProcessId생성될 태스크를 가지는 프로세스의 id입니다.
[in]priority태스크의 스케쥴 우선순위입니다.
반환값
생성된 태스크의 id입니다. ProcessId가 무효하거나, 태스크를 더 이상 생성할 수 없으면 TASK_INVALID_ID 가 반환됩니다.
void ckTaskJoin ( uint32_t  TaskId)

지정된 태스크가 종료될 때까지 기다립니다.

지정한 태스크 id가 무효하다면 (이미 종료됬다면) 그냥 리턴합니다.

매개변수
[in]TaskId기다릴 태스크입니다.
bool ckTaskResume ( uint32_t  TaskId)

TASK_FLAG_WAIT 상태의 태스크를 재개시킵니다.

매개변수
[in]TaskId재개시킬 태스크입니다.
반환값
TaskId가 무효하거나 TASK_FLAG_WAIT 상태가 아닌 태스크라면 false입니다. 그렇지 않다면 true입니다.
bool ckTaskResume_byptr ( Task *  pTask)

tagTask 에 대한 포인터로 ckTaskResume 함수를 호출합니다.

void ckTaskSchedule ( void  )

CPU 시간을 양보하고 다른 태스크로 스위칭합니다.

void ckTaskScheduleOnTimerInt ( void  )

타이머 인터럽트가 발생했을 때 호출해 태스크를 스위칭합니다.

Remarks
타이머 인터럽트 핸들러에서 1ms마다 이 함수를 호출합니다. 현재 cpu시간이 남아있다면 이를 감소시키기만 합니다. 현재 cpu 시간이 남아있지 않다면 태스크가 스위치됩니다.
void ckTaskStructInitialize ( void  )

멀티태스킹을 초기화합니다.

bool ckTaskSuspend ( uint32_t  TaskId)

태스크를 TASK_FLAG_WAIT 상태로 만듭니다.

매개변수
[in]TaskId일시 정지시킬 태스크입니다.
반환값
TaskId가 무효하거나 이미 TASK_FLAG_WAIT 상태의 태스크라면 false입니다. 그렇지 않다면 true입니다.
bool ckTaskSuspend_byptr ( Task *  pTask)

tagTask 에 대한 포인터로 ckTaskSuspend 함수를 호출합니다.

bool ckTaskTerminate ( uint32_t  TaskId)

태스크를 종료시킵니다.

매개변수
[in]TaskId종료시킬 태스크입니다.
반환값
TaskId가 무효하다면 (이미 종료됬다면) false입니다. 그렇지 않다면 true입니다.