source: rtems/cpukit/score/src/threadtickletimeslice.c @ 5fa5185

4.104.114.95
Last change on this file since 5fa5185 was 5fa5185, checked in by Joel Sherrill <joel.sherrill@…>, on 06/06/08 at 15:44:11

2008-06-06 Joel Sherrill <joel.sherrill@…>

  • libcsupport/src/times.c, libmisc/cpuuse/cpuusagereport.c, libmisc/cpuuse/cpuusagereset.c, libmisc/monitor/mon-task.c, rtems/include/rtems/rtems/ratemon.h, rtems/src/ratemongetstatus.c, rtems/src/ratemonperiod.c, score/include/rtems/score/thread.h, score/src/threaddispatch.c, score/src/threadinitialize.c, score/src/threadtickletimeslice.c: Add typedefs for cpu usage and period timing statistics. Also renamed related variables and structure members so they are the same whether you are using nanosecond (e.g. struct timespec) or ticks (e.g. uint32_t) granularity. This lays the groundwork for future cleanup.
  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*
2 *  Thread Handler
3 *
4 *
5 *  COPYRIGHT (c) 1989-1999.
6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in found in the file LICENSE in this distribution or at
10 *  http://www.rtems.com/license/LICENSE.
11 *
12 *  $Id$
13 */
14
15#if HAVE_CONFIG_H
16#include "config.h"
17#endif
18
19#include <rtems/system.h>
20#include <rtems/score/apiext.h>
21#include <rtems/score/context.h>
22#include <rtems/score/interr.h>
23#include <rtems/score/isr.h>
24#include <rtems/score/object.h>
25#include <rtems/score/priority.h>
26#include <rtems/score/states.h>
27#include <rtems/score/sysstate.h>
28#include <rtems/score/thread.h>
29#include <rtems/score/threadq.h>
30#include <rtems/score/userext.h>
31#include <rtems/score/wkspace.h>
32
33/*PAGE
34 *
35 *  _Thread_Tickle_timeslice
36 *
37 *  This scheduler routine determines if timeslicing is enabled
38 *  for the currently executing thread and, if so, updates the
39 *  timeslice count and checks for timeslice expiration.
40 *
41 *  Input parameters:   NONE
42 *
43 *  Output parameters:  NONE
44 */
45
46void _Thread_Tickle_timeslice( void )
47{
48  Thread_Control *executing;
49
50  executing = _Thread_Executing;
51
52  #ifndef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS
53    /*
54     *  Increment the number of ticks this thread has been executing
55     */
56    executing->cpu_time_used++;
57  #endif
58
59  /*
60   *  If the thread is not preemptible or is not ready, then
61   *  just return.
62   */
63
64  if ( !executing->is_preemptible )
65    return;
66
67  if ( !_States_Is_ready( executing->current_state ) )
68    return;
69
70  /*
71   *  The cpu budget algorithm determines what happens next.
72   */
73
74  switch ( executing->budget_algorithm ) {
75    case THREAD_CPU_BUDGET_ALGORITHM_NONE:
76      break;
77
78    case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
79    case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
80      if ( --executing->cpu_time_budget == 0 ) {
81        _Thread_Reset_timeslice();
82        executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
83      }
84      break;
85
86    case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
87      if ( --executing->cpu_time_budget == 0 )
88        (*executing->budget_callout)( executing );
89      break;
90  }
91}
Note: See TracBrowser for help on using the repository browser.