os161-1.99
 All Data Structures
clock.h
00001 /*
00002  * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
00003  *      The President and Fellows of Harvard College.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University nor the names of its contributors
00014  *    may be used to endorse or promote products derived from this software
00015  *    without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00027  * SUCH DAMAGE.
00028  */
00029 
00030 #ifndef _CLOCK_H_
00031 #define _CLOCK_H_
00032 
00033 #include "opt-synchprobs.h"
00034 
00035 /*
00036  * Time-related definitions.
00037  *
00038  * hardclock() is called on every CPU HZ times a second, possibly only
00039  * when the CPU is not idle, for scheduling.
00040  *
00041  * timerclock() is called on one CPU once a second to allow simple
00042  * timed operations. (This is a fairly simpleminded interface.)
00043  *
00044  * gettime() may be used to fetch the current time of day.
00045  * getinterval() computes the time from time1 to time2.
00046  *
00047  * XXX we have struct timespec now, let's use it.
00048  */
00049 
00050 /* hardclocks per second */
00051 #if OPT_SYNCHPROBS
00052 /* Make synchronization more exciting :) */
00053 #define HZ  10000
00054 #else
00055 /* More realistic value */
00056 #define HZ  100
00057 #endif
00058 
00059 void hardclock_bootstrap(void);
00060 
00061 void hardclock(void);
00062 void timerclock(void);
00063 
00064 void gettime(time_t *seconds, uint32_t *nanoseconds);
00065 
00066 void getinterval(time_t secs1, uint32_t nsecs,
00067                  time_t secs2, uint32_t nsecs2,
00068                  time_t *rsecs, uint32_t *rnsecs);
00069 
00070 /*
00071  * clocksleep() suspends execution for the requested number of seconds,
00072  * like userlevel sleep(3). (Don't confuse it with wchan_sleep.)
00073  */
00074 void clocksleep(int seconds);
00075 
00076 
00077 #endif /* _CLOCK_H_ */
 All Data Structures