Clubcos
0.0.0
Clubcos - Clubc Operating System
|
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "linkedlist.h"
#include "memory_map.h"
데이타 구조 | |
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 tagTask * | WaitObj |
이 값이 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 tagProcess * | pProcess |
이 태스크를 가지는 프로세스입니다. 더 자세히 ... | |
LinkedListNode | ThreadNode |
프로세스가 이 태스크를 관리하기 위해 사용하는 노드입니다. 더 자세히 ... | |
void * | stack |
동적으로 할당된 이 태스크의 스택입니다. NULL일 경우 정적 할당된 스택을 사용합니다. 더 자세히 ... | |
uint32_t | stacksize |
이 태스크의 스택의 크기입니다. 동적으로 할당된 스택이 아닐 경우 무효한 값입니다. 더 자세히 ... | |
uint32_t | id |
이 태스크의 id입니다. 더 자세히 ... | |
typedef struct tagProcess Process |
프로세스를 나타내는 구조체입니다.
typedef struct tagProcessData ProcessData |
프로세스 별로 가지는 데이터입니다.
typedef enum tagTaskFlag TaskFlag |
태스크의 현재 상태를 나타내는 열거형입니다.
typedef enum tagTaskPriority TaskPriority |
태스크의 스케쥴 우선순위를 나타내는 열거형입니다.
typedef struct tagTaskStruct TaskStruct |
태스크 관리 구조체입니다.
anonymous enum |
anonymous enum |
enum tagTaskFlag |
enum tagTaskPriority |
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] | stacksize | stack 의 크기입니다. 참고:Task::stacksize |
[in] | priority | 태스크의 스케쥴 우선순위입니다. |
[in] | PageDirectory | 페이지 디렉토리입니다. 참고:Process::PageDirectory |
[in] | PageDirSize | PageDirectory 의 크기입니다. 참고:Process::PageDirSize |
[in] | cr3 | 페이지 디렉토리의 물리 주소입니다. 참고:Process::cr3 |
[in] | ProcData | 이 프로세스의 data입니다. |
[in] | ParentProcessId | 부모 프로세스의 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] | stacksize | stack 의 크기입니다. 참고:Task::stacksize |
[in] | ProcessId | 생성될 태스크를 가지는 프로세스의 id입니다. |
[in] | priority | 태스크의 스케쥴 우선순위입니다. |
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 | ) |
타이머 인터럽트가 발생했을 때 호출해 태스크를 스위칭합니다.
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
입니다. LinkedListNode _node |
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
태스크가 종료되기를 기다리고 있습니다.