VirtualBox

source: vbox/trunk/include/iprt/system.h@ 19508

Last change on this file since 19508 was 19508, checked in by vboxsync, 16 years ago

iprt/system.h: api draft for querying memory installed and available to us.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
1/** @file
2 * IPRT - System Information.
3 */
4
5/*
6 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 *
25 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
26 * Clara, CA 95054 USA or visit http://www.sun.com if you need
27 * additional information or have any questions.
28 */
29
30#ifndef ___iprt_system_h
31#define ___iprt_system_h
32
33#include <iprt/cdefs.h>
34#include <iprt/types.h>
35
36
37__BEGIN_DECLS
38
39/** @defgroup grp_rt_system RTSystem - System Information
40 * @ingroup grp_rt
41 * @{
42 */
43
44/**
45 * Info level for RTSystemGetOSInfo().
46 */
47typedef enum RTSYSOSINFO
48{
49 RTSYSOSINFO_INVALID = 0, /**< The usual invalid entry. */
50 RTSYSOSINFO_PRODUCT, /**< OS product name. (uname -o) */
51 RTSYSOSINFO_RELEASE, /**< OS release. (uname -r) */
52 RTSYSOSINFO_VERSION, /**< OS version, optional. (uname -v) */
53 RTSYSOSINFO_SERVICE_PACK, /**< Service/fix pack level, optional. */
54 RTSYSOSINFO_END /**< End of the valid info levels. */
55} RTSYSOSINFO;
56
57
58/**
59 * Queries information about the OS.
60 *
61 * @returns IPRT status code.
62 * @retval VINF_SUCCESS on success.
63 * @retval VERR_INVALID_PARAMETER if enmInfo is invalid.
64 * @retval VERR_INVALID_POINTER if pszInfoStr is invalid.
65 * @retval VERR_BUFFER_OVERFLOW if the buffer is too small. The buffer will
66 * contain the chopped off result in this case, provided cchInfo isn't 0.
67 * @retval VERR_NOT_SUPPORTED if the info level isn't implemented. The buffer will
68 * contain an empty string.
69 *
70 * @param enmInfo The OS info level.
71 * @param pszInfo Where to store the result.
72 * @param cchInfo The size of the output buffer.
73 */
74RTDECL(int) RTSystemQueryOSInfo(RTSYSOSINFO enmInfo, char *pszInfo, size_t cchInfo);
75
76/**
77 * Queries the total amount of RAM accessible to the system.
78 *
79 * This figure should not include memory that is installed but not used,
80 * nor memory that will be slow to bring online. The definition of 'slow'
81 * here is slower than swapping out a MB of pages to disk.
82 *
83 * @returns IPRT status code.
84 * @retval VINF_SUCCESS and *pcb on sucess.
85 * @retval VERR_ACCESS_DENIED if the information isn't accessible to the
86 * caller.
87 *
88 * @param pcb Where to store the result (in bytes).
89 */
90RTDECL(int) RTSystemQueryTotalRam(uint64_t *pcb);
91
92/**
93 * Queries the amount of RAM that is currently locked down or in some other
94 * way made impossible to virtualize within reasonably short time.
95 *
96 * The purposes of this API is, when combined with RTSystemQueryTotalRam, to
97 * be able to determin an absolute max limit for how much fixed memory it is
98 * (theoretically) possible to allocate (or lock down).
99 *
100 * The kind memory covered by this function includes:
101 * - locked (wired) memory - like for instance RTR0MemObjLockUser
102 * and RTR0MemObjLockKernel makes,
103 * - kernel pools and heaps - like for instance the ring-0 variant
104 * of RTMemAlloc taps into,
105 * - fixed (not pagable) kernel allocations - like for instance
106 * all the RTR0MemObjAlloc* functions makes,
107 * - any similar memory that isn't easily swapped out, discarded,
108 * or flushed to disk.
109 *
110 * This works against the value returned by RTSystemQueryTotalRam, and
111 * the value reported by this function can never be larger than what a
112 * call to RTSystemQueryTotalRam returns.
113 *
114 * The short time term here is relative to swapping to disk like in
115 * RTSystemQueryTotalRam. This could mean that (part of) the dirty buffers
116 * in the dynamic I/O cache could be included in the total. If the dynamic
117 * I/O cache isn't likely to either flush buffers when the load increases
118 * and put them back into normal circulation, they should be included in
119 * the memory accounted for here.
120 *
121 * @retval VINF_SUCCESS and *pcb on sucess.
122 * @retval VERR_NOT_SUPPORTED if the information isn't available on the
123 * system in general. The caller must handle this scenario.
124 * @retval VERR_ACCESS_DENIED if the information isn't accessible to the
125 * caller.
126 *
127 * @param pcb Where to store the result (in bytes).
128 *
129 * @remarks This function could've been inverted and called
130 * RTSystemQueryAvailableRam, but that might give impression that
131 * it would be possible to allocate the amount of memory it
132 * indicates for a single purpose, something which would be very
133 * improbable on most systems.
134 *
135 * @remarks We might have to add another output parameter to this function
136 * that indicates if some of the memory kinds listed above cannot
137 * be accounted for on the system and therefore is not include in
138 * the returned amount.
139 */
140RTDECL(int) RTSystemQueryUnavailableRam(uint64_t *pcb);
141
142
143/** @} */
144
145__END_DECLS
146
147#endif
148
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette