proc.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:4k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _PROC_H
  2. #define _PROC_H
  3. #include <setjmp.h>
  4. #ifndef _MBUF_H
  5. #include "mbuf.h"
  6. #endif
  7. #ifndef _TIMER_H
  8. #include "timer.h"
  9. #endif
  10. #define SIGQSIZE 200 /* Entries in ksignal queue */
  11. /* Kernel process control block */
  12. #define PHASH 16 /* Number of wait table hash chains */
  13. struct proc {
  14. struct proc *prev; /* Process table pointers */
  15. struct proc *next;
  16. struct {
  17. unsigned int suspend:1; /* Process is suspended */
  18. unsigned int waiting:1; /* Process is waiting */
  19. unsigned int istate:1; /* Process has interrupts enabled */
  20. unsigned int sset:1; /* Process has set sig */
  21. unsigned int freeargs:1; /* Free args on termination */
  22. } flags;
  23. jmp_buf env; /* Process register state */
  24. jmp_buf sig; /* State for alert signal */
  25. int signo; /* Arg to alert to cause signal */
  26. void *event; /* Wait event */
  27. uint16 *stack; /* Process stack */
  28. unsigned stksize; /* Size of same */
  29. char *name; /* Arbitrary user-assigned name */
  30. int retval; /* Return value from next kwait() */
  31. struct timer alarm; /* Alarm clock timer */
  32. FILE *input; /* Process stdin */
  33. FILE *output; /* Process stdout */
  34. int iarg; /* Copy of iarg */
  35. void *parg1; /* Copy of parg1 */
  36. void *parg2; /* Copy of parg2 */
  37. };
  38. extern struct proc *Waittab[]; /* Head of wait list */
  39. extern struct proc *Rdytab; /* Head of ready list */
  40. extern struct proc *Curproc; /* Currently running process */
  41. extern struct proc *Susptab; /* Suspended processes */
  42. extern int Stkchk; /* Stack checking flag */
  43. extern int Kdebug; /* Control display of current task on screen */
  44. struct sigentry {
  45. void *event;
  46. int n;
  47. };
  48. struct ksig {
  49. struct sigentry entry[SIGQSIZE];
  50. struct sigentry *wp;
  51. struct sigentry *rp;
  52. volatile int nentries; /* modified both by interrupts and main */
  53. int maxentries;
  54. int32 duksigs;
  55. int lostsigs;
  56. int32 ksigs; /* Count of ksignal calls */
  57. int32 ksigwakes; /* Processes woken */
  58. int32 ksignops; /* ksignal calls that didn't wake anything */
  59. int32 ksigsqueued; /* ksignal calls queued with ints off */
  60. int32 kwaits; /* Count of kwait calls */
  61. int32 kwaitnops; /* kwait calls that didn't block */
  62. int32 kwaitints; /* kwait calls from interrupt context (error) */
  63. };
  64. extern struct ksig Ksig;
  65. /* Prepare for an exception signal and return 0. If after this macro
  66.  * is executed any other process executes alert(pp,val), this will
  67.  * invoke the exception and cause this macro to return a second time,
  68.  * but with the return value 1. This cannot be a function since the stack
  69.  * frame current at the time setjmp is called must still be current
  70.  * at the time the signal is taken. Note use of comma operators to return
  71.  * the value of setjmp as the overall macro expression value.
  72.  */
  73. #define SETSIG(val) (Curproc->flags.sset=1,
  74. Curproc->signo = (val),setjmp(Curproc->sig))
  75. /* In  kernel.c: */
  76. void alert(struct proc *pp,int val);
  77. void chname(struct proc *pp,char *newname);
  78. void killproc(struct proc *pp);
  79. void killself(void);
  80. struct proc *mainproc(char *name);
  81. struct proc *newproc(char *name,unsigned int stksize,
  82. void (*pc)(int,void *,void *),
  83. int iarg,void *parg1,void *parg2,int freeargs);
  84. void ksignal(void *event,int n);
  85. int kwait(void *event);
  86. void resume(struct proc *pp);
  87. int setsig(int val);
  88. void suspend(struct proc *pp);
  89. /* In ksubr.c: */
  90. void chkstk(void);
  91. void kinit(void);
  92. unsigned phash(void *event);
  93. void psetup(struct proc *pp,int iarg,void *parg1,void *parg2,
  94. void ((*pc)(int,void *,void *)) );
  95. #ifdef AMIGA
  96. void init_psetup(struct proc *pp);
  97. #endif
  98. /* Stack background fill value for high water mark checking */
  99. #define STACKPAT 0x55aa
  100. /* Value stashed in location 0 to detect null pointer dereferences */
  101. #define NULLPAT 0xdead
  102. #endif /* _PROC_H */