/* kern_resource.c 4.11 82/08/22 */
long acctlow
= 2; /* stop accounting when < 2% data space left */
long accthigh
= 4; /* resume when space risen to > 4% */
* Perform process accounting functions.
register struct inode
*ip
;
uap
= (struct a
*)u
.u_ap
;
if((ip
->i_mode
& IFMT
) != IFREG
) {
if (acctp
&& (acctp
->i_number
!= ip
->i_number
||
acctp
->i_dev
!= ip
->i_dev
))
* On exit, write a record on the accounting file.
register struct inode
*ip
;
register struct acct
*ap
= &acctbuf
;
if (savacctp
&& savacctp
->i_fs
->fs_cstotal
.cs_nbfree
>
accthigh
* savacctp
->i_fs
->fs_dsize
/ 100) {
printf("Accounting resumed\n");
if (acctp
->i_fs
->fs_cstotal
.cs_nbfree
<
acctlow
* acctp
->i_fs
->fs_dsize
/ 100) {
printf("Accounting suspended\n");
for (i
=0; i
<sizeof(ap
->ac_comm
); i
++)
ap
->ac_comm
[i
] = u
.u_comm
[i
];
ap
->ac_utime
= compress((long)u
.u_vm
.vm_utime
);
ap
->ac_stime
= compress((long)u
.u_vm
.vm_stime
);
ap
->ac_etime
= compress((long)(time
- u
.u_start
));
ap
->ac_btime
= u
.u_start
;
if (i
= u
.u_vm
.vm_utime
+ u
.u_vm
.vm_stime
)
ap
->ac_mem
= (u
.u_vm
.vm_ixrss
+ u
.u_vm
.vm_idsrss
) / i
;
ap
->ac_io
= compress((long)(u
.u_vm
.vm_inblk
+ u
.u_vm
.vm_oublk
));
ap
->ac_flag
= u
.u_acflag
;
rdwri(UIO_WRITE
, ip
, (caddr_t
)ap
, sizeof (acctbuf
), siz
,
* Produce a pseudo-floating point representation
* with 3 bits base-8 exponent, 13 bits fraction.
register exp
= 0, round
= 0;
} *uap
= (struct a
*)u
.u_ap
;
if (copyout((caddr_t
)&u
.u_vm
, (caddr_t
)uap
->par_vm
,
sizeof(struct vtimes
)) < 0)
if (copyout((caddr_t
)&u
.u_cvm
, (caddr_t
)uap
->ch_vm
,
sizeof(struct vtimes
)) < 0)
register struct vtimes
*vp
, *wp
;
vp
->vm_utime
+= wp
->vm_utime
;
vp
->vm_stime
+= wp
->vm_stime
;
vp
->vm_nswap
+= wp
->vm_nswap
;
vp
->vm_idsrss
+= wp
->vm_idsrss
;
vp
->vm_ixrss
+= wp
->vm_ixrss
;
if (vp
->vm_maxrss
< wp
->vm_maxrss
)
vp
->vm_maxrss
= wp
->vm_maxrss
;
vp
->vm_majflt
+= wp
->vm_majflt
;
vp
->vm_minflt
+= wp
->vm_minflt
;
vp
->vm_inblk
+= wp
->vm_inblk
;
vp
->vm_oublk
+= wp
->vm_oublk
;