资源简介
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
- 上一篇:google earth 截图软件
- 下一篇:易语言DLL注入视频教程 很难得的
相关资源
- 模拟设计动态分区存储管理的分配与
- 操作系统页面内存页面置换算法OPT、
- Linux操作系统基础教程
- Delphi XE 8 采用PosixAPI标准函数实现串口
- 计算机操作系统第四版(汤小丹等编
- WINCRIS亲测可用,附教程
- 计算机操作系统第四版课后答案
- 华中科技大学操作系统课程设计——
- 天气预报iPhone6版本swift工程
- 操作系统 综合性实验 包含代码 源程
- 联想B500一体机BIOS
- ucos-ii在mc9s12xdp512上的移植
- ros单线固定IP 一分钟搞定
- cocos2dx模仿人要慌绳子的物理小demo
- \\VS2005C《图像编程精髓从开发自己的
- 山东大学操作系统实验六报告
- 操作系统课程设计主要实现小型操作
- 现代操作系统第四版参考答案
-
Using Swift With Cocoa and ob
jective-C中文版 - 计算机操作系统答案+方敏版
- 操作系统课件交大
- Ericsson的moshell命令大全
- atheros ar8171网卡驱动 CentOS6.4 已调通
- 修片动作photoshop修片用的磨皮动作)
- simatic ProSave_v14 sp1
- Microsoft_LoopBack_Adapter
- Network Controller Sideband Interface (NC-SI)
- 清华大学操作系统例题
- Pioneer 3多机器人控制ROS)
-
NWli
nk IPX/SPX/NetBIOS Compatible Transport
评论
共有 条评论