我的學習之旅(33) sched.h

sched.h主要定義了時鐘頻率、任務數據結構、和sleep宏。sleep宏的實現主要功能是設置當前任務的sleep_time,然後通過軟中斷0x80做任務軟切換。

#ifndef __SCHED_H__
#define __SCHED_H__
#define HZ 100

#define delay(ticks) __asm__ __volatile__ ("cli"::); \
                                 current->sleep_time =  ticks; \
                                 __asm__ __volatile__ ("sti"::);    \
                                 __asm__ __volatile__ ("int $0x80"::);
                                 
#define LATCH ((1193180 + HZ/2) / HZ)

#define MAX_TASK_NUMBER 31
#define TASK_STK_SIZE 8192

#define TASK_RUNNING		0
#define TASK_INTERRUPTIBLE	1
#define TASK_UNINTERRUPTIBLE	2
#define _get_base(addr) ({\
unsigned long __base; \
__asm__("movb %3,%%dh\n\t" \
	"movb %2,%%dl\n\t" \
	"shll $16,%%edx\n\t" \
	"movw %1,%%dx" \
	:"=d" (__base) \
	:"m" (*((addr)+2)), \
	 "m" (*((addr)+4)), \
	 "m" (*((addr)+7))); \
__base;})
#define get_base(ldt) _get_base( ((char *)&(ldt)) )

typedef struct stack_s {
    long * esp;
    short ss;
} stack_t;
#define MAX_CBUF_NUM 1024
typedef struct my_queue_s {
	unsigned long head;
	unsigned long tail;
	unsigned int buf_list[MAX_CBUF_NUM];
}my_queue_t;
typedef struct cbuf_s{
    unsigned int length;
    void *message;
}cbuf_t;
typedef struct task_tbl_s{
    unsigned char task_id;
    unsigned int *task_func_p;
    unsigned int *task_stk;
    int budget;
    int counter;
    unsigned int state;
    unsigned int    current_esp;
    unsigned int sleep_time;
    unsigned int stat_counter;
    unsigned char tty_channel_id;
    my_queue_t cbuf_queue;
    my_queue_t mbuf_queue;
}task_tbl_t;
extern task_tbl_t *current;
extern task_tbl_t *g_ttx_task;
extern long volatile jiffies;
unsigned int schedule(void);
void sleep_on( task_tbl_t **p);
void wake_up(task_tbl_t **p);
#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章