XenevaOS
Loading...
Searching...
No Matches
x86_64_sched.h
Go to the documentation of this file.
1
30#ifndef __X86_64_SCHED_H__
31#define __X86_64_SCHED_H__
32
33#include <stdint.h>
34#include <aurora.h>
35#include <Ipc\signal.h>
36
37#define THREAD_STATE_READY 1
38#define THREAD_STATE_BLOCKED 3
39#define THREAD_STATE_SLEEP 4
40#define THREAD_STATE_KILLABLE 5
41
45
46#define THREAD_LEVEL_KERNEL (1<<0)
47#define THREAD_LEVEL_USER (1<<1)
48#define THREAD_LEVEL_SUBTHREAD (1<<2)
49#define THREAD_LEVEL_MAIN_THREAD (1<<3)
50
51
52typedef struct _frame_ {
53 uint64_t ss; //0x00
54 uint64_t rsp; //0x08
56 uint64_t cs; //0x18
57 uint64_t rip; //0x20
58
59 uint64_t rax; //0x28
60 uint64_t rbx; //0x30
61 uint64_t rcx; //0x38
62 uint64_t rdx; //0x40
63 uint64_t rsi; //0x48
64 uint64_t rdi; //0x50
65 uint64_t rbp; //0x58
66 uint64_t r8; //0x60
67 uint64_t r9; //0x68
68 uint64_t r10; //0x70
69 uint64_t r11; //0x78
70 uint64_t r12; //0x80
71 uint64_t r13; //0x88
72 uint64_t r14; //0x90
73 uint64_t r15; //0x98
74 uint64_t ds; //0xA0
75 uint64_t es; //0xA8
76 uint64_t fs; //0xB0
77 uint64_t gs; //0xB8
78 uint64_t cr3; //0xC0 [0x08]
79 uint64_t kern_esp; //0xC8 [0x10]
80 bool user_; //0xD0
82
83
84#pragma pack(push,1)
93#pragma pack(pop)
94
95
96#pragma pack(push,1)
97/* AuUserEntry structure */
108#pragma pack(pop)
109
110#pragma pack(push,1)
115#pragma pack(pop)
116
117#pragma pack(push,1)
118typedef struct _au_thread_ {
121 /* syscall_func_ptr for multiprocessor
122 * purpose */
126 char name[16];
136 /* if this thread is backend of
137 * any user thread, uentry should
138 * be filled */
140 void* procSlot;
144#pragma pack(pop)
145
146
147/*
148* AuSchedulerStart -- start the scheduler service
149*/
150extern void AuSchedulerStart();
151
152/*
153* AuSchedulerInitialise -- initialise the core scheduler
154*/
155extern void AuSchedulerInitialise();
156
157/*
158* AuSchedulerInitAp -- pin the idle thread to per cpu
159* current thread pointer
160*/
161extern void AuSchedulerInitAp();
162
171AU_EXTERN AU_EXPORT AuThread* AuCreateKthread(void(*entry) (uint64_t), uint64_t stack, uint64_t cr3, char *name);
172
173
174/*
175* AuGetCurrentThread -- gets the running thread
176* from per_cpu_data, currently done only non-multi
177* processing
178*/
180
181/*
182* AuKThreadCopy -- copies the context of dest
183* thread to source thread
184* @param dest -- destination thread
185* @param src -- source thread
186*/
187extern void AuKThreadCopy(AuThread* dest, AuThread* src);
188
189/*
190* AuBlockThread -- blocks a thread and insert it to
191* block list
192*/
194
195/*
196* AuSleepThread -- sleeps a thread
197*/
199
200/*
201* AuUnblockThread -- unblocks a thread and insert it to
202* ready list
203* @param t -- pointer to thread
204*/
206
207/*
208* AuThreadMoveToTrash -- move given thread to
209* trash
210* @param t -- Thread to move to trash
211*/
212extern void AuThreadMoveToTrash(AuThread* t);
213
214/*
215* AuThreadCleanTrash -- removes a particular thread
216* from trash list
217* @param t -- > thread to remove
218*/
219extern void AuThreadCleanTrash(AuThread* t);
220
221/*
222* AuThreadFindByID -- finds a thread by its id from
223* ready queue
224* @param id -- id of the thread
225*/
227
228/*
229* AuThreadFindByIDBlockList -- finds a thread by its id from
230* the block queue
231* @param id -- id of the thread
232*/
234
235/*
236* AuForceScheduler -- force the scheduler
237* to switch next thread
238*/
240
242
243/*
244* AuGetSystemTimerTick -- returns the
245* current timer tick value
246*/
248#endif
#define AU_EXTERN
Definition aurora.h:50
#define AU_EXPORT
Definition aurora.h:38
XETime t
Definition main.cpp:53
unsigned int uint32_t
Definition acefiex.h:163
COMPILER_DEPENDENT_INT64 int64_t
Definition acefiex.h:164
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
void(* entry)(void *)
Definition process.h:91
void(* AuSigHandler)(int signum)
Definition signal.h:75
Definition x86_64_sched.h:118
_au_thread_ * prev
Definition x86_64_sched.h:142
uint8_t priviledge
Definition x86_64_sched.h:131
_au_thread_ * next
Definition x86_64_sched.h:141
uint8_t * fx_state
Definition x86_64_sched.h:124
AuThreadFrame frame
Definition x86_64_sched.h:119
uint64_t quanta
Definition x86_64_sched.h:129
SignalQueue * signalQueue
Definition x86_64_sched.h:133
uint32_t mxcsr
Definition x86_64_sched.h:125
char name[16]
Definition x86_64_sched.h:126
AuUserEntry * uentry
Definition x86_64_sched.h:139
AuSigHandler singals[39]
Definition x86_64_sched.h:132
AuSyscallParam syscall_param
Definition x86_64_sched.h:123
uint8_t state
Definition x86_64_sched.h:127
uint16_t id
Definition x86_64_sched.h:128
uint64_t user_stack
Definition x86_64_sched.h:120
uint64_t endTick
Definition x86_64_sched.h:130
void * returnableSignal
Definition x86_64_sched.h:135
uint8_t pendingSigCount
Definition x86_64_sched.h:134
void * procSlot
Definition x86_64_sched.h:140
Definition x86_64_sched.h:52
uint64_t ss
Definition x86_64_sched.h:53
uint64_t rflags
Definition x86_64_sched.h:55
uint64_t rcx
Definition x86_64_sched.h:61
uint64_t cr3
Definition x86_64_sched.h:78
uint64_t rax
Definition x86_64_sched.h:59
uint64_t r11
Definition x86_64_sched.h:69
uint64_t r8
Definition x86_64_sched.h:66
uint64_t rdi
Definition x86_64_sched.h:64
uint64_t fs
Definition x86_64_sched.h:76
uint64_t r10
Definition x86_64_sched.h:68
uint64_t r12
Definition x86_64_sched.h:70
uint64_t rsi
Definition x86_64_sched.h:63
uint64_t r15
Definition x86_64_sched.h:73
bool user_
Definition x86_64_sched.h:80
uint64_t r13
Definition x86_64_sched.h:71
uint64_t rsp
Definition x86_64_sched.h:54
uint64_t ds
Definition x86_64_sched.h:74
uint64_t r9
Definition x86_64_sched.h:67
uint64_t es
Definition x86_64_sched.h:75
uint64_t rbp
Definition x86_64_sched.h:65
uint64_t rip
Definition x86_64_sched.h:57
uint64_t gs
Definition x86_64_sched.h:77
uint64_t rbx
Definition x86_64_sched.h:60
uint64_t cs
Definition x86_64_sched.h:56
uint64_t rdx
Definition x86_64_sched.h:62
uint64_t kern_esp
Definition x86_64_sched.h:79
uint64_t r14
Definition x86_64_sched.h:72
Definition x86_64_sched.h:111
void * Signal
Definition x86_64_sched.h:112
_signal_queue_ * link
Definition x86_64_sched.h:113
Definition x86_64_sched.h:85
int64_t param3
Definition x86_64_sched.h:88
int64_t param1
Definition x86_64_sched.h:86
int64_t param4
Definition x86_64_sched.h:89
int64_t param5
Definition x86_64_sched.h:90
int64_t param6
Definition x86_64_sched.h:91
int64_t param2
Definition x86_64_sched.h:87
Definition x86_64_sched.h:98
uint64_t ss
Definition x86_64_sched.h:102
char ** argvs
Definition x86_64_sched.h:105
uint64_t stackBase
Definition x86_64_sched.h:106
uint64_t argvaddr
Definition x86_64_sched.h:104
uint64_t entrypoint
Definition x86_64_sched.h:99
uint64_t rsp
Definition x86_64_sched.h:100
int num_args
Definition x86_64_sched.h:103
uint64_t cs
Definition x86_64_sched.h:101
AU_EXTERN AU_EXPORT void AuForceScheduler()
AuForceScheduler – force the scheduler to switch next thread.
Definition x86_64_sched.cpp:621
AU_EXTERN AU_EXPORT void AuUnblockThread(AuThread *t)
Definition x86_64_sched.cpp:541
void AuSchedulerInitAp()
Definition x86_64_sched.cpp:375
struct _frame_ AuThreadFrame
struct _au_thread_ AuThread
void AuSchedulerStart()
AuSchedulerStart – start the scheduler.
Definition x86_64_sched.cpp:485
AU_EXTERN AU_EXPORT bool AuIsSchedulerInitialised()
Definition x86_64_sched.cpp:626
struct _syscall_param_ AuSyscallParam
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByIDBlockList(uint16_t id)
Definition x86_64_sched.cpp:609
AU_EXTERN AU_EXPORT AuThread * AuGetCurrentThread()
Definition x86_64_sched.cpp:505
AU_EXTERN AU_EXPORT void AuSleepThread(AuThread *thread, uint64_t ms)
Definition x86_64_sched.cpp:523
void AuSchedulerInitialise()
Definition x86_64_sched.cpp:354
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByID(uint16_t id)
Definition x86_64_sched.cpp:596
void AuKThreadCopy(AuThread *dest, AuThread *src)
Definition x86_64_sched.cpp:317
struct _uentry_ AuUserEntry
AU_EXTERN AU_EXPORT void AuBlockThread(AuThread *thread)
Definition x86_64_sched.cpp:514
void AuThreadMoveToTrash(AuThread *t)
Definition x86_64_sched.cpp:560
void AuThreadCleanTrash(AuThread *t)
Definition x86_64_sched.cpp:587
AU_EXTERN AU_EXPORT uint64_t AuGetSystemTimerTick()
AuGetSystemTimerTick – return the current system timer tick.
Definition x86_64_sched.cpp:634
struct _signal_queue_ SignalQueue
AU_EXTERN AU_EXPORT AuThread * AuCreateKthread(void(*entry)(uint64_t), uint64_t stack, uint64_t cr3, char *name)
Definition x86_64_sched.cpp:253