#defineLOAD_FREQ(5*HZ)/*5secintervals*/
#defineEXP_11884/*1/exp(5sec/1min)asfixed-point*/
#defineEXP_52014/*1/exp(5sec/5min)*/
#defineEXP_152037/*1/exp(5sec/15min)*/
#defineCALC_LOAD(load,exp,n)\
load*=exp;\
load+=n*(FIXED_1-exp);\
load>>=FSHIFT;
#defineCT_TO_SECS(x)((x)/HZ)
#defineCT_TO_USECS(x)(((x)%HZ)*1000000/HZ)
externintnr_threads;
externintlast_pid;
externunsignedlongnr_running(void);
externunsignedlongnr_uninterruptible(void);
#include
#include
#include
#include
#include
#include
//进程状态
#defineTASK_RUNNING0
#defineTASK_INTERRUPTIBLE1
#defineTASK_UNINTERRUPTIBLE2
#defineTASK_ZOMBIE4
#defineTASK_STOPPED8
#define__set_task_state(tsk,state_value)\
do{(tsk)->state=(state_value);}while(0)
#ifdefCONFIG_SMP
#defineset_task_state(tsk,state_value)\
set_mb((tsk)->state,(state_value))
#else
#defineset_task_state(tsk,state_value)\
__set_task_state((tsk),(state_value))
#endif
#define__set_current_state(state_value)\
do{current->state=(state_value);}while(0)
#ifdefCONFIG_SMP
#defineset_current_state(state_value)\
set_mb(current->state,(state_value))
#else
#defineset_current_state(state_value)\
__set_current_state(state_value)
#endif
/*
*Schedulingpolicies
*/
#defineSCHED_OTHER0
#defineSCHED_FIFO1
#defineSCHED_RR2
structsched_param{
intsched_priority;
};
structcompletion;
#ifdef__KERNEL__
#include
/*
*Thisserializes"schedule()"andalsoprotects
*therun-queuefromdeletions/modifications(but
*_adding_tothebeginningoftherun-queuehas
*aseparatelock).
*/
externrwlock_ttasklist_lock;
externspinlock_tmmlist_lock;
typedefstructtask_structtask_t;//将task_t定义为task_sturct的结构类型
externvoidsched_init(void);
externvoidinit_idle(task_t*idle,intcpu);
externvoidshow_state(void);
externvoidshow_stack(unsignedlong*esp);
externvoidcpu_init(void);
externvoidtrap_init(void);
externvoidupdate_process_times(intuser);
externvoidupdate_one_process(task_t*p,unsignedlonguser,
unsignedlongsystem,intcpu);
externvoidscheduler_tick(intuser_tick,intsystem);
externvoidmigration_init(void);
externunsignedlongcache_decay_ticks;
externintset_user(uid_tnew_ruid,intdumpclear);
#defineMAX_SCHEDULE_TIMEOUTLONG_MAX
externsignedlongFASTCALL(schedule_timeout(signedlongtimeout));
asmlinkagevoidschedule(void);
externintschedule_task(structtq_struct*task);
externvoidflush_scheduled_tasks(void);
externi