1/* 2 * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * @OSF_COPYRIGHT@ 30 */ 31/* 32 * Mach Operating System 33 * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University 34 * All Rights Reserved. 35 * 36 * Permission to use, copy, modify and distribute this software and its 37 * documentation is hereby granted, provided that both the copyright 38 * notice and this permission notice appear in all copies of the 39 * software, derivative works or modified versions, and any portions 40 * thereof, and that both notices appear in supporting documentation. 41 * 42 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 43 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 44 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 45 * 46 * Carnegie Mellon requests users of this software to return to 47 * 48 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 49 * School of Computer Science 50 * Carnegie Mellon University 51 * Pittsburgh PA 15213-3890 52 * 53 * any improvements or extensions that they make and grant Carnegie Mellon 54 * the rights to redistribute these changes. 55 */ 56/* 57 */ 58/* 59 * File: mach/thread_info 60 * 61 * Thread information structure and definitions. 62 * 63 * The defintions in this file are exported to the user. The kernel 64 * will translate its internal data structures to these structures 65 * as appropriate. 66 * 67 */ 68 69#ifndef _MACH_THREAD_INFO_H_ 70#define _MACH_THREAD_INFO_H_ 71 72#include <mach/boolean.h> 73#include <mach/policy.h> 74#include <mach/time_value.h> 75#include <mach/message.h> 76#include <mach/machine/vm_types.h> 77 78/* 79 * Generic information structure to allow for expansion. 80 */ 81typedef natural_t thread_flavor_t; 82typedef integer_t *thread_info_t; /* varying array of int */ 83 84#define THREAD_INFO_MAX (1024) /* maximum array size */ 85typedef integer_t thread_info_data_t[THREAD_INFO_MAX]; 86 87/* 88 * Currently defined information. 89 */ 90#define THREAD_BASIC_INFO 3 /* basic information */ 91 92struct thread_basic_info { 93 time_value_t user_time; /* user run time */ 94 time_value_t system_time; /* system run time */ 95 integer_t cpu_usage; /* scaled cpu usage percentage */ 96 policy_t policy; /* scheduling policy in effect */ 97 integer_t run_state; /* run state (see below) */ 98 integer_t flags; /* various flags (see below) */ 99 integer_t suspend_count; /* suspend count for thread */ 100 integer_t sleep_time; /* number of seconds that thread 101 has been sleeping */ 102}; 103 104typedef struct thread_basic_info thread_basic_info_data_t; 105typedef struct thread_basic_info *thread_basic_info_t; 106#define THREAD_BASIC_INFO_COUNT ((mach_msg_type_number_t) \ 107 (sizeof(thread_basic_info_data_t) / sizeof(natural_t))) 108 109#define THREAD_IDENTIFIER_INFO 4 /* thread id and other information */ 110 111struct thread_identifier_info { 112 uint64_t thread_id; /* system-wide unique 64-bit thread id */ 113 uint64_t thread_handle; /* handle to be used by libproc */ 114 uint64_t dispatch_qaddr; /* libdispatch queue address */ 115}; 116 117typedef struct thread_identifier_info thread_identifier_info_data_t; 118typedef struct thread_identifier_info *thread_identifier_info_t; 119#define THREAD_IDENTIFIER_INFO_COUNT ((mach_msg_type_number_t) \ 120 (sizeof(thread_identifier_info_data_t) / sizeof(natural_t))) 121 122/* 123 * Scale factor for usage field. 124 */ 125 126#define TH_USAGE_SCALE 1000 127 128/* 129 * Thread run states (state field). 130 */ 131 132#define TH_STATE_RUNNING 1 /* thread is running normally */ 133#define TH_STATE_STOPPED 2 /* thread is stopped */ 134#define TH_STATE_WAITING 3 /* thread is waiting normally */ 135#define TH_STATE_UNINTERRUPTIBLE 4 /* thread is in an uninterruptible 136 wait */ 137#define TH_STATE_HALTED 5 /* thread is halted at a 138 clean point */ 139 140/* 141 * Thread flags (flags field). 142 */ 143#define TH_FLAGS_SWAPPED 0x1 /* thread is swapped out */ 144#define TH_FLAGS_IDLE 0x2 /* thread is an idle thread */ 145 146/* 147 * Obsolete interfaces. 148 */ 149 150#define THREAD_SCHED_TIMESHARE_INFO 10 151#define THREAD_SCHED_RR_INFO 11 152#define THREAD_SCHED_FIFO_INFO 12 153 154#define IO_NUM_PRIORITIES 4 155 156struct io_stat_entry { 157 uint64_t count; 158 uint64_t size; 159}; 160 161struct io_stat_info { 162 struct io_stat_entry disk_reads; 163 struct io_stat_entry io_priority[IO_NUM_PRIORITIES]; 164 struct io_stat_entry paging; 165 struct io_stat_entry metadata; 166 struct io_stat_entry total_io; 167}; 168 169typedef struct io_stat_info *io_stat_info_t; 170 171#endif /* _MACH_THREAD_INFO_H_ */ 172