source: trunk/third/top/machine/m_next_task.h @ 9084

Revision 9084, 3.3 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r9083, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * This is a stripped-down and hacked version of task.h from NextStep 2.1
3 * from the Informer.app by Max Tardiveau.
4 *
5 * tpugh 2/14/1996
6 * I've modify this task structure to account some unknown variables in
7 * NeXT's new (unpublished) task structure, so I can get to the utask structure.
8 * tmp1[3] is in the right place, but tmp2[3] may not be in the right place.
9 * So do not be surprised if any other variable in the structure, except utask,
10 * is incorrectly aligned.
11 *
12 */
13
14
15#import <mach/boolean.h>
16#import <mach/port.h>
17#import <mach/time_value.h>
18#import <kernserv/lock.h>
19#import <kernserv/queue.h>
20#import <mach/mach_param.h>
21#import <mach/mach_types.h>
22
23struct task {
24#ifdef NEXTSTEP40
25        int tmp1[3];
26#endif
27        /* Synchronization/destruction information */
28        char lock[4];
29        int             ref_count;      /* Number of references to me */
30        boolean_t       active;         /* Task has not been terminated */
31
32        /* Miscellaneous */
33        char    map[4];         /* Address space description */
34        queue_chain_t   pset_tasks;     /* list of tasks assigned to pset */
35        int             suspend_count;  /* Internal scheduling only */
36
37        /* Thread information */
38        queue_head_t    thread_list;    /* list of threads */
39        int             thread_count;   /* number of threads */
40        char thread_list_lock[4]; /* XXX thread_list lock */
41        processor_set_t processor_set;  /* processor set for new threads */
42#ifdef NEXTSTEP40
43        int tmp2[3];
44#endif
45        boolean_t       may_assign;     /* can assigned pset be changed? */
46        boolean_t       assign_active;  /* waiting for may_assign */
47
48        /* Garbage */
49        struct utask    *u_address;
50#if     NeXT
51        struct proc     *proc;          /* corresponding process */
52#else   NeXT
53        int             proc_index;     /* corresponding process, by index */
54#endif  NeXT
55
56        /* User-visible scheduling information */
57        int             user_stop_count;        /* outstanding stops */
58        int             priority;               /* for new threads */
59
60        /* Information for kernel-internal tasks */
61#if     NeXT
62        boolean_t       kernel_privilege; /* Is a kernel task */
63#endif  NeXT
64        boolean_t       kernel_ipc_space; /* Uses kernel's port names? */
65        boolean_t       kernel_vm_space; /* Uses kernel's pmap? */
66
67        /* Statistics */
68        time_value_t    total_user_time;
69                                /* total user time for dead threads */
70        time_value_t    total_system_time;
71                                /* total system time for dead threads */
72
73        /* Special ports */
74        port_t          task_self;      /* Port representing the task */
75        port_t          task_tself;     /* What the task thinks is task_self */
76        port_t          task_notify;    /* Where notifications get sent */
77        port_t          exception_port; /* Where exceptions are sent */
78        port_t          bootstrap_port; /* Port passed on for task startup */
79
80        /* IPC structures */
81        boolean_t       ipc_privilege;  /* Can use kernel resource pools? */
82        char ipc_translation_lock[4];
83        queue_head_t    ipc_translations; /* Per-task port naming */
84        boolean_t       ipc_active;     /* Can IPC rights be added? */
85        port_name_t     ipc_next_name;  /* Next local name to use */
86#if     MACH_IPC_XXXHACK
87        kern_set_t      ipc_enabled;    /* Port set for PORT_ENABLED */
88#endif  MACH_IPC_XXXHACK
89
90#if     MACH_IPC_TCACHE
91#define OBJ_CACHE_MAX           010     /* Number of cache lines */
92#define OBJ_CACHE_MASK          007     /* Mask for name->line */
93
94        struct {
95                port_name_t     name;
96                kern_obj_t      object;
97        }               obj_cache[OBJ_CACHE_MAX];
98                                        /* Fast object translation cache */
99#endif  MACH_IPC_TCACHE
100
101        /* IPC compatibility garbage */
102        boolean_t       ipc_intr_msg;   /* Send signal upon message arrival? */
103#define TASK_PORT_REGISTER_MAX 4        /* Number of "registered" ports */
104        port_t          ipc_ports_registered[TASK_PORT_REGISTER_MAX];
105};
Note: See TracBrowser for help on using the repository browser.