Rev 52 | Rev 55 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
52 | jermar | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | |||
3 | <chapter id="time"><?dbhtml filename="time.html"?> |
||
4 | <title>Time management</title> |
||
5 | |||
6 | <para> |
||
7 | Time is one of the dimensions in which kernel, as well as the whole system, operates. |
||
53 | jermar | 8 | It is of special importance to many kernel subsytems. Knowledge of time makes it possible |
52 | jermar | 9 | for the scheduler to preemptively plan threads for execution. Different parts of the kernel |
10 | can request execution of their callback function with some specified delay. A good example |
||
11 | of such kernel code is the synchronization subsystem which uses this functionality to implement |
||
12 | timeouting versions of synchronization primitives. |
||
13 | </para> |
||
14 | |||
53 | jermar | 15 | <section> |
16 | <title>System clock</title> |
||
17 | <para> |
||
18 | Every hardware architecture supported by HelenOS must support some kind of a device that can be |
||
19 | programmed to yield periodic time signals (i.e. clock interrupts). Some architectures have |
||
20 | external clock that is merely programmed by the kernel to interrupt the processor multiple |
||
21 | times in a second. This is the case of ia32 and amd64 architectures<footnote><para>When |
||
22 | running in uniprocessor mode.</para></footnote>, which use i8254 or a compatible chip to |
||
23 | achieve the goal. |
||
24 | </para> |
||
25 | <para> |
||
26 | Other architectures' processors typically contain two registers. The first |
||
27 | register is usually called a compare or a match register and can be set to an arbitrary value |
||
28 | by the operating system. The contents of the compare register then stays unaltered until it is |
||
29 | written by the kernel again. The second register, often called a counter register, can be also |
||
30 | written by the kernel, but the processor automatically increments it after every executed |
||
31 | instruction or in some fixed relation to processor speed. The point is that a clock interrupt is |
||
32 | generated whenever the values of the counter and the compare registers match. Sometimes, the scheme of |
||
33 | two registers is modified so that only one register is needed. Such a register, called a decrementer, |
||
34 | then counts towards zero and an interrupt is generated when zero is reached. |
||
35 | </para> |
||
36 | <para> |
||
37 | In any case, the initial value of the decrementer or the initial difference between the counter and |
||
38 | the compare registers, respectively, must be set accordingly to a known relation between the real time |
||
39 | and the speed of the decrementer or the counter register, respectively. |
||
40 | </para> |
||
41 | |||
42 | </section> |
||
43 | |||
52 | jermar | 44 | </chapter> |