103 lines
2.4 KiB
C
103 lines
2.4 KiB
C
#ifndef __SCHEDULE_H
|
|
#define __SCHEDULE_H
|
|
|
|
#include "vfs.h"
|
|
#include "gui.h"
|
|
#include "interrupts.h"
|
|
#include "socket.h"
|
|
|
|
#define TASK_RUNNING 1
|
|
#define TASK_NOTRUNNING 2
|
|
#define TASK_FINISHED 3
|
|
#define TASK_WAITING 4
|
|
#define TASK_SLEEPING 5
|
|
#define TASK_SEM_WAIT 6
|
|
|
|
#ifndef KRNL_STACK_SIZE
|
|
# define KRNL_STACK_SIZE 0x4000
|
|
#endif
|
|
|
|
#ifndef USER_STACK_SIZE
|
|
# define USER_STACK_SIZE 0x16000
|
|
#endif
|
|
|
|
struct semaphore_t {
|
|
int id;
|
|
unsigned char state;
|
|
};
|
|
|
|
struct mailbox_t {
|
|
unsigned int id;
|
|
char *data;
|
|
unsigned int size;
|
|
};
|
|
|
|
struct task_t {
|
|
unsigned int esp;
|
|
unsigned int ss;
|
|
unsigned int kstack;
|
|
unsigned int ustack;
|
|
unsigned int cr3;
|
|
unsigned int pid;
|
|
unsigned int parent;
|
|
int timetorun;
|
|
unsigned char state;
|
|
struct task_t *next_task;
|
|
struct task_t *parent_task;
|
|
char name[32];
|
|
unsigned int stack_pages[KRNL_STACK_SIZE / 0x1000];
|
|
struct vfs_file_handle_t filehandles[256];
|
|
unsigned int user_pages_at;
|
|
unsigned int user_pages_cnt;
|
|
unsigned int *user_pages;
|
|
unsigned int user_stack_pages[USER_STACK_SIZE / 0x1000];
|
|
unsigned int user_env_pages[64];
|
|
struct vfs_device_t *selected_device;
|
|
struct window_t **window_list;
|
|
unsigned int window_count;
|
|
unsigned char fpu_enabled;
|
|
unsigned char fpu_data[512];
|
|
unsigned int sem_wait;
|
|
int sem_timeout;
|
|
int sem_time_waiting;
|
|
char *mail;
|
|
int mail_len;
|
|
struct socket_t *waiting_sockets[5];
|
|
int waiting_socket_count;
|
|
};
|
|
|
|
struct tss_t {
|
|
unsigned short backlink, __blh;
|
|
unsigned int esp0;
|
|
unsigned short ss0, __ss0h;
|
|
unsigned int esp1;
|
|
unsigned short ss1, __ss1h;
|
|
unsigned int esp2;
|
|
unsigned short ss2, __ss2h;
|
|
unsigned int cr3;
|
|
unsigned int eip;
|
|
unsigned int eflags;
|
|
unsigned inteax, ecx, edx, ebx;
|
|
unsigned int esp, ebp, esi, edi;
|
|
unsigned short es, __esh;
|
|
unsigned short cs, __csh;
|
|
unsigned short ss, __ssh;
|
|
unsigned short ds, __dsh;
|
|
unsigned short fs, __fsh;
|
|
unsigned short gs, __gsh;
|
|
unsigned short ldt, __ldth;
|
|
unsigned short trace, bitmap;
|
|
};
|
|
|
|
|
|
extern void init_scheduler(void);
|
|
extern void wait(struct regs *r);
|
|
extern void yield(struct regs *r);
|
|
extern struct task_t *sched_new_task();
|
|
extern void schedule(struct regs *r);
|
|
extern int sched_sem_new(unsigned char state);
|
|
extern void sched_sem_free(unsigned int id);
|
|
extern void sched_sem_signal(unsigned int id, unsigned char state);
|
|
extern void sched_sem_wait(struct regs *r, unsigned int id, int timeout);
|
|
#endif
|