Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
task.h 파일 참조
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "linkedlist.h"
#include "memory_map.h"
task.h에 대한 include 의존 그래프
이 그래프는 이 파일을 직/간접적으로 include 하는 파일들을 보여줍니다.:

이 파일의 소스 코드 페이지로 가기

데이타 구조

struct  tagTss
 TSS를 나타내는 구조체입니다. 더 자세히 ...
 
struct  tagFpuContext
 FPU 콘텍스트를 나타내는 구조체입니다. 더 자세히 ...
 
struct  tagProcessData
 프로세스 별로 가지는 데이터입니다. 더 자세히 ...
 
struct  tagTask
 태스크를 나타내는 구조체입니다. 더 자세히 ...
 
struct  tagProcess
 프로세스를 나타내는 구조체입니다. 더 자세히 ...
 
struct  tagTaskStruct
 태스크 관리 구조체입니다. 더 자세히 ...
 

타입정의

typedef enum tagTaskPriority TaskPriority
 태스크의 스케쥴 우선순위를 나타내는 열거형입니다. 더 자세히 ...
 
typedef struct tagTss Tss
 TSS를 나타내는 구조체입니다. 더 자세히 ...
 
typedef enum tagTaskFlag TaskFlag
 태스크의 현재 상태를 나타내는 열거형입니다. 더 자세히 ...
 
typedef struct tagProcessData ProcessData
 프로세스 별로 가지는 데이터입니다. 더 자세히 ...
 
typedef struct tagProcess Process
 프로세스를 나타내는 구조체입니다. 더 자세히 ...
 
typedef struct tagTaskStruct TaskStruct
 태스크 관리 구조체입니다. 더 자세히 ...
 

열거형 타입

enum  {
  TASK_QUANTUM = 20, MAX_TASK = 2048, TASK_GDT_0 = 3, TASK_IDMASK_UNIT = MAX_TASK << 1,
  TASK_INVALID_ID = 0xffffffff, TASK_ID_IDX_MASK = MAX_TASK - 1, KERNEL_TASK_ID = 0, IDLE_TASK_ID = 1
}
 
enum  {
  MAX_PROCESS = 512, PROCESS_IDMASK_UNIT = MAX_PROCESS << 1, PROCESS_INVALID_ID = 0xffffffff, PROCESS_ID_IDX_MASK = MAX_PROCESS - 1,
  KERNEL_PROCESS_ID = 0
}
 
enum  tagTaskPriority {
  TASK_PRIORITY_REALTIME, TASK_PRIORITY_HIGHEST, TASK_PRIORITY_HIGH, TASK_PRIORITY_ABOVE_NORMAL,
  TASK_PRIORITY_NORMAL, TASK_PRIORITY_BELOW_NORMAL, TASK_PRIORITY_LOW, TASK_PRIORITY_LOWEST,
  TASK_PRIORITY_IDLE, COUNT_TASK_PRIORITY, MAX_TASK_PRIORITY = COUNT_TASK_PRIORITY - 1, KERNEL_TASK_PRIORITY = TASK_PRIORITY_HIGHEST
}
 태스크의 스케쥴 우선순위를 나타내는 열거형입니다. 더 자세히 ...
 
enum  tagTaskFlag { TASK_FLAG_RUNNING, TASK_FLAG_READY, TASK_FLAG_WAIT, TASK_FLAG_WAITFOREXIT }
 태스크의 현재 상태를 나타내는 열거형입니다. 더 자세히 ...
 

함수

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

변수

uint8_t data [512]
 
LinkedListNode _node
 
LinkedList WaitMeList
 자신이 종료되기를 기다리는 태스크들의 목록입니다. 더 자세히 ...
 
LinkedListNode WaitNode
 다른 태스크가 종료되기를 기다릴 때 사용되는 노드입니다. 더 자세히 ...
 
struct tagTaskWaitObj
 이 값이 NULL이 아닐 경우 현재 태스크는 WaitObj 태스크가 종료되기를 기다리고 있습니다. 더 자세히 ...
 
uint32_t selector
 태스크 디스크럽터 셀렉터입니다. 0이면 사용되지 않은 Task 구조체입니다. 더 자세히 ...
 
TaskFlag flag
 태스크의 상태 flag입니다. 더 자세히 ...
 
TaskPriority priority
 태스크의 우선순위입니다. 더 자세히 ...
 
Tss tss
 태스크의 TSS입니다. 더 자세히 ...
 
FpuContext fpu_context
 태스크의 FPU 콘텍스트입니다. 더 자세히 ...
 
int bFpuUsed
 이 태스크가 최근 FPU를 사용했는지 나타내는 진위형입니다. 더 자세히 ...
 
volatile uint32_t UsedCpuTime
 이 태스크가 사용한 CPU 시간입니다. 더 자세히 ...
 
struct tagProcesspProcess
 이 태스크를 가지는 프로세스입니다. 더 자세히 ...
 
LinkedListNode ThreadNode
 프로세스가 이 태스크를 관리하기 위해 사용하는 노드입니다. 더 자세히 ...
 
void * stack
 동적으로 할당된 이 태스크의 스택입니다. NULL일 경우 정적 할당된 스택을 사용합니다. 더 자세히 ...
 
uint32_t stacksize
 이 태스크의 스택의 크기입니다. 동적으로 할당된 스택이 아닐 경우 무효한 값입니다. 더 자세히 ...
 
uint32_t id
 이 태스크의 id입니다. 더 자세히 ...
 

상세한 설명

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

타입정의 문서화

typedef struct tagProcess Process

프로세스를 나타내는 구조체입니다.

typedef struct tagProcessData ProcessData

프로세스 별로 가지는 데이터입니다.

typedef enum tagTaskFlag TaskFlag

태스크의 현재 상태를 나타내는 열거형입니다.

태스크의 스케쥴 우선순위를 나타내는 열거형입니다.

typedef struct tagTaskStruct TaskStruct

태스크 관리 구조체입니다.

typedef struct tagTss Tss

TSS를 나타내는 구조체입니다.

열거형 타입 문서화

anonymous enum
열거형 멤버
TASK_QUANTUM 
MAX_TASK 
TASK_GDT_0 
TASK_IDMASK_UNIT 
TASK_INVALID_ID 
TASK_ID_IDX_MASK 
KERNEL_TASK_ID 
IDLE_TASK_ID 
anonymous enum
열거형 멤버
MAX_PROCESS 
PROCESS_IDMASK_UNIT 
PROCESS_INVALID_ID 
PROCESS_ID_IDX_MASK 
KERNEL_PROCESS_ID 

태스크의 현재 상태를 나타내는 열거형입니다.

열거형 멤버
TASK_FLAG_RUNNING 

태스크가 현재 실행 중입니다.

TASK_FLAG_READY 

태스크가 실행을 기다리고 있습니다.

TASK_FLAG_WAIT 

태스크가 다른 작업이 완료되기를 기다리고 있습니다.

TASK_FLAG_WAITFOREXIT 

태스크가 종료된 후 idle 태스크에 의해 정리되기를 기다리고 있습니다.

태스크의 스케쥴 우선순위를 나타내는 열거형입니다.

열거형 멤버
TASK_PRIORITY_REALTIME 
TASK_PRIORITY_HIGHEST 
TASK_PRIORITY_HIGH 
TASK_PRIORITY_ABOVE_NORMAL 
TASK_PRIORITY_NORMAL 
TASK_PRIORITY_BELOW_NORMAL 
TASK_PRIORITY_LOW 
TASK_PRIORITY_LOWEST 
TASK_PRIORITY_IDLE 
COUNT_TASK_PRIORITY 
MAX_TASK_PRIORITY 
KERNEL_TASK_PRIORITY 

함수 문서화

struct tagTask __attribute__ ( (aligned(16))  )

FPU 콘텍스트를 나타내는 구조체입니다.

태스크를 나타내는 구조체입니다.

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입니다.

변수 문서화

int bFpuUsed

이 태스크가 최근 FPU를 사용했는지 나타내는 진위형입니다.

정렬을 위해 4byte int형으로 선언되 있습니다.

uint8_t data[512]
TaskFlag flag

태스크의 상태 flag입니다.

FpuContext fpu_context

태스크의 FPU 콘텍스트입니다.

uint32_t id

이 태스크의 id입니다.

struct tagProcess* pProcess

이 태스크를 가지는 프로세스입니다.

TaskPriority priority

태스크의 우선순위입니다.

uint32_t selector

태스크 디스크럽터 셀렉터입니다. 0이면 사용되지 않은 Task 구조체입니다.

void* stack

동적으로 할당된 이 태스크의 스택입니다. NULL일 경우 정적 할당된 스택을 사용합니다.

uint32_t stacksize

이 태스크의 스택의 크기입니다. 동적으로 할당된 스택이 아닐 경우 무효한 값입니다.

LinkedListNode ThreadNode

프로세스가 이 태스크를 관리하기 위해 사용하는 노드입니다.

Tss tss

태스크의 TSS입니다.

volatile uint32_t UsedCpuTime

이 태스크가 사용한 CPU 시간입니다.

LinkedList WaitMeList

자신이 종료되기를 기다리는 태스크들의 목록입니다.

LinkedListNode WaitNode

다른 태스크가 종료되기를 기다릴 때 사용되는 노드입니다.

struct tagTask* WaitObj

이 값이 NULL이 아닐 경우 현재 태스크는 WaitObj 태스크가 종료되기를 기다리고 있습니다.