Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / resourcevar.h @ 13

History | View | Annotate | Download (4.29 KB)

1 13 up20180614
/*        $NetBSD: resourcevar.h,v 1.55 2014/09/05 05:47:40 matt Exp $        */
2
3
/*
4
 * Copyright (c) 1991, 1993
5
 *        The Regents of the University of California.  All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 * 1. Redistributions of source code must retain the above copyright
11
 *    notice, this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 * 3. Neither the name of the University nor the names of its contributors
16
 *    may be used to endorse or promote products derived from this software
17
 *    without specific prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
 * SUCH DAMAGE.
30
 *
31
 *        @(#)resourcevar.h        8.4 (Berkeley) 1/9/95
32
 */
33
34
#ifndef        _SYS_RESOURCEVAR_H_
35
#define        _SYS_RESOURCEVAR_H_
36
37
#if !defined(_KERNEL) && !defined(_KMEMUSER)
38
#error "not supposed to be exposed to userland"
39
#endif
40
41
#include <sys/mutex.h>
42
43
/*
44
 * Kernel per-process accounting / statistics
45
 */
46
struct uprof {                                /* profile arguments */
47
        char *        pr_base;                /* buffer base */
48
        size_t  pr_size;                /* buffer size */
49
        u_long        pr_off;                        /* pc offset */
50
        u_int   pr_scale;                /* pc scaling */
51
        u_long        pr_addr;                /* temp storage for addr until AST */
52
        u_long        pr_ticks;                /* temp storage for ticks until AST */
53
};
54
55
struct pstats {
56
#define        pstat_startzero        p_ru
57
        struct        rusage p_ru;                /* stats for this proc */
58
        struct        rusage p_cru;                /* sum of stats for reaped children */
59
#define        pstat_endzero        pstat_startcopy
60
61
#define        pstat_startcopy        p_timer
62
        struct        itimerspec p_timer[3];        /* virtual-time timers */
63
        struct        uprof p_prof;                        /* profile arguments */
64
#define        pstat_endcopy        p_start
65
        struct        timeval p_start;        /* starting time */
66
};
67
68
#ifdef _KERNEL
69
70
/*
71
 * Process resource limits.  Since this structure is moderately large,
72
 * but changes infrequently, it is shared copy-on-write after forks.
73
 *
74
 * When a separate copy is created, then 'pl_writeable' is set to true,
75
 * and 'pl_sv_limit' is pointed to the old proc_t::p_limit structure.
76
 */
77
struct plimit {
78
        struct rlimit        pl_rlimit[RLIM_NLIMITS];
79
        char *                pl_corename;
80
        size_t                pl_cnlen;
81
        u_int                pl_refcnt;
82
        bool                pl_writeable;
83
        kmutex_t        pl_lock;
84
        struct plimit *        pl_sv_limit;
85
};
86
87
/* add user profiling from AST XXXSMP */
88
#define        ADDUPROF(l)                                                        \
89
        do {                                                                \
90
                struct proc *_p = (l)->l_proc;                                \
91
                addupc_task((l),                                        \
92
                    _p->p_stats->p_prof.pr_addr,                        \
93
                    _p->p_stats->p_prof.pr_ticks);                        \
94
                _p->p_stats->p_prof.pr_ticks = 0;                        \
95
        } while (/* CONSTCOND */ 0)
96
97
extern char defcorename[];
98
99
extern int security_setidcore_dump;
100
extern char security_setidcore_path[];
101
extern uid_t security_setidcore_owner;
102
extern gid_t security_setidcore_group;
103
extern mode_t security_setidcore_mode;
104
105
void        addupc_intr(struct lwp *, u_long);
106
void        addupc_task(struct lwp *, u_long, u_int);
107
void        calcru(struct proc *, struct timeval *, struct timeval *,
108
            struct timeval *, struct timeval *);
109
110
struct plimit *lim_copy(struct plimit *);
111
void        lim_addref(struct plimit *);
112
void        lim_privatise(struct proc *);
113
void        lim_setcorename(struct proc *, char *, size_t);
114
void        lim_free(struct plimit *);
115
116
void        resource_init(void);
117
void        ruadd(struct rusage *, struct rusage *);
118
void        rulwps(proc_t *, struct rusage *);
119
struct        pstats *pstatscopy(struct pstats *);
120
void        pstatsfree(struct pstats *);
121
extern rlim_t maxdmap;
122
extern rlim_t maxsmap;
123
124
int        getrusage1(struct proc *, int, struct rusage *);
125
126
#endif
127
128
#endif        /* !_SYS_RESOURCEVAR_H_ */