资源简介

pintos os 操作系统 参数传递 系统调用

资源截图

代码片段和文件信息

#include “devices/timer.h“
#include 
#include 
#include 
#include 
#include “threads/interrupt.h“
#include “threads/io.h“
#include “threads/synch.h“
#include “threads/thread.h“
/* My Implementation */
#include “threads/alarm.h“
#include “threads/fixed-point.h“
/* == My Implementation */
  
/* See [8254] for hardware details of the 8254 timer chip. */

#if TIMER_FREQ < 19
#error 8254 timer requires TIMER_FREQ >= 19
#endif
#if TIMER_FREQ > 1000
#error TIMER_FREQ <= 1000 recommended
#endif

/* Number of timer ticks since OS booted. */
static int64_t ticks;

/* Number of loops per timer tick.
   Initialized by timer_calibrate(). */
static unsigned loops_per_tick;

static intr_handler_func timer_interrupt;
static bool too_many_loops (unsigned loops);
static void busy_wait (int64_t loops);
static void real_time_sleep (int64_t num int32_t denom);
static void real_time_delay (int64_t num int32_t denom);

/* Sets up the 8254 Programmable Interval Timer (PIT) to
   interrupt PIT_FREQ times per second and registers the
   corresponding interrupt. */
void
timer_init (void) 
{
  /* 8254 input frequency divided by TIMER_FREQ rounded to
     nearest. */
  uint16_t count = (1193180 + TIMER_FREQ / 2) / TIMER_FREQ;

  outb (0x43 0x34);    /* CW: counter 0 LSB then MSB mode 2 binary. */
  outb (0x40 count & 0xff);
  outb (0x40 count >> 8);

  intr_register_ext (0x20 timer_interrupt “8254 Timer“);
}

/* Calibrates loops_per_tick used to implement brief delays. */
void
timer_calibrate (void) 
{
  unsigned high_bit test_bit;

  ASSERT (intr_get_level () == INTR_ON);
  printf (“Calibrating timer...  “);

  /* Approximate loops_per_tick as the largest power-of-two
     still less than one timer tick. */
  loops_per_tick = 1u << 10;
  while (!too_many_loops (loops_per_tick << 1)) 
    {
      loops_per_tick <<= 1;
      ASSERT (loops_per_tick != 0);
    }

  /* Refine the next 8 bits of loops_per_tick. */
  high_bit = loops_per_tick;
  for (test_bit = high_bit >> 1; test_bit != high_bit >> 10; test_bit >>= 1)
    if (!too_many_loops (high_bit | test_bit))
      loops_per_tick |= test_bit;

  printf (“%‘“PRIu64“ loops/s.\n“ (uint64_t) loops_per_tick * TIMER_FREQ);
}

/* Returns the number of timer ticks since the OS booted. */
int64_t
timer_ticks (void) 
{
  enum intr_level old_level = intr_disable ();
  int64_t t = ticks;
  intr_set_level (old_level);
  barrier ();
  return t;
}

/* Returns the number of timer ticks elapsed since THEN which
   should be a value once returned by timer_ticks(). */
int64_t
timer_elapsed (int64_t then) 
{
  return timer_ticks () - then;
}

/* Sleeps for approximately TICKS timer ticks.  Interrupts must
   be turned on. */
void
timer_sleep (int64_t ticks) 
{
  /* Old Implementation
  int64_t start = timer_ticks (); */

  ASSERT (intr_get_level () == INTR_ON);
  /* Old Implementation
  while (timer_elapsed (start) < ticks) 
    thread_yield (); */
    
  /* My Implementation */
  set_alarm

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7245  2013-06-19 00:27  10112510138 高皆庆\devices\timer.c

     文件       3684  2013-05-28 21:58  10112510138 高皆庆\Makefile.build

     文件     927973  2013-06-19 20:12  10112510138 高皆庆\README.pdf

     文件      23157  2013-06-19 00:27  10112510138 高皆庆\threads\thread.c

     文件       6878  2013-06-19 00:27  10112510138 高皆庆\threads\thread.h

     文件       6967  2013-06-19 13:44  10112510138 高皆庆\userprog\exception.c

     文件        408  2013-06-19 00:27  10112510138 高皆庆\userprog\exception.h

     文件      18856  2013-06-19 13:39  10112510138 高皆庆\userprog\process.c

     文件        246  2013-06-19 00:27  10112510138 高皆庆\userprog\process.h

     文件      10625  2013-06-19 13:39  10112510138 高皆庆\userprog\syscall.c

     文件        143  2013-06-19 00:27  10112510138 高皆庆\userprog\syscall.h

     目录          0  2013-06-19 02:56  10112510138 高皆庆\devices

     目录          0  2013-06-19 13:47  10112510138 高皆庆\threads

     目录          0  2013-06-19 13:45  10112510138 高皆庆\userprog

     目录          0  2013-06-19 20:12  10112510138 高皆庆

----------- ---------  ---------- -----  ----

              1006182                    15


评论

共有 条评论