首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>系统管理>正文

64 位 Linux 中 Power Architecture Time Base 的寄存器

http://www.oklinux.cn  2007-07-14  IBM Carlos Cavanna  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn
使用 Power Architecture™ 技术的 Time Base 寄存器可以在使用 PowerPC® 和 Cell Broadband Engine™ (Cell/B.E.)微处理器运行 Linux® 的系统中以纳秒的精度来度量时间。可以有效使用这些技术的应用程序包括时间戳事务(通常是对单一用途的消息进行加密或进行数字签名),对代码进行分析,实现微小、精确的软件延时。

应用程序通常都会使用至少一种形式来度量时间(例如,事务时间戳)。为了实现这个目的,POSIX 库提供了一些与时间有关的函数,例如 gettimeofday,它为应用程序开发人员提供了一个简单易用的接口。当应用程序深入使用这些时间函数时,更有效地使用这些与时间有关的函数,可以改进程序的整体性能。这对于某些底层任务来说是无价的,例如对代码进行分析,或者在设备驱动程序或其他严格时间要求的代码中进行精确的延时。

在 Power Architecture 平台上,可以通过使用 gettimeofday 进一步改进性能。本文后面给出了一种在 PowerPC 和 Cell/B.E. PPE 处理器上运行的 64 位 Linux® 操作系统上从 UNIX® 纪元(1970 年 1 月 1 日)开始至今的一种有效而精确的时间度量机制,它可以提供毫秒和纳秒的精度。然而,需要注意有些 Linux 版本提供了本文中给出的一个 gettimeofday 的类似实现,不过您可能会注意到它们所实现的精度要稍微低一些。

这种技术也可以在 AIX 操作系统上实现。不过,下面介绍的例子和系统细节都是对应于 64 位的 Linux 实现的。

Time Base 寄存器

Power Architecture 文档(Book II: PowerPC Virtual Environment Architecture,请参阅 参考资料)提供了一个名为 Time Base(TB)的计数寄存器,它用来记录系统时间。TB 寄存器会以一种依赖于实现的频率周期性地增加,这个频率可能不是恒定的。操作系统(OS)要负责确定更新频率是否发生了变化,以及对内部结构进行必要的调整。

PowerPC Architecture 声明如下:

  • TB 寄存器是 64 位长的。
  • 每次更新都会增加 1。
  • 操作系统必须要能够确定更新频率。
  • 当 TB 达到自己的最大值时,就会溢出并从 0 重新开始。此时没有明显的迹象,要交由操作系统进行处理。
  • OS 必须要在开机时对 TB 寄存器进行初始化。

详细信息请查看 PowerPC Virtual Environment Architecture(可在本页底部的 参考资料 部分查看关于这些声明和本文提及的其他文档的链接)。注意 Cell/B.E. PPE 也实现了 TB 寄存器。

TB 寄存器自己并没有包含计算时间所需要的足够信息。Power Architecture 规范将很多对 TB 寄存器进行处理的责任都交给操作系统来完成,操作系统需要提供其他一些信息,例如更新频率、启动时的 Time Base 寄存器的值,等等。整个计算机制非常迅速且高效。

在 Linux 操作系统的情况中,系统库可以在 systemcfg 结构中导出以下信息:


清单 1. Time Base 特有的系统信息
                
struct systemcfg {
...
__u64 tb_orig_stamp;            /* Time Base at boot       */
__u64 tb_ticks_per_sec;         /* Time Base ticks / sec    */
__u64 tb_to_xs;                 /* Inverse of TB to 2^20  */
__u64 stamp_xsec;
__u64 tb_update_count;          /* Time Base atomicity ctr */
...
};

其中:

  • tb_orig_stamp:系统引导时 TB 寄存器的值
  • tb_ticks_per_sec:每秒 TB 寄存器的滴答数(在今后计算中不会使用)
  • tb_to_xs:用来将 TB 滴答数转换成 xseconds
  • stamp_xsec:包含了系统引导时的时间,单位是 xseconds
  • tb_update_count:在对 TB 寄存器进行更新时用作计数器使用

这个结构可以通过包含下面的头文件来访问:

#include <asm/systemcfg.h>





如何使用汇编语言读取寄存器

mftb 指令可以将 TB 寄存器的值传输到一个通用寄存器中。其语法如下:

mftb rx

PowerPC Virtual Environment Architecture [1] 提供了更多有关这条指令的技术细节,并介绍了一个使用汇编语言计算

共6页: 上一页 1 [2] [3] [4] [5] [6] 下一页

上一篇:Linux 上的 WebSphere MQ 开发快速入门   下一篇:Linux下建立Mysql镜像数据库(mysql 4.1)

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux操作系统下常用压缩文件的解压方式
·Linux平台下安全防护十大招数
·Linux系统磁盘存储区管理原理技巧详解
·Linux环境进程间通信—— 信号(下)
·Linux环境进程间通信——信号(上)
·如何恢复Linux系统中被删除的Ext3型文件
·详细讲解用命令行加挂Linux文件系统的方法
·使用 ActiveScaffold 增强 Ruby on Rails 的功能
·Linux攻略 用Ghost备份Linux系统的方法
·Linux系统攻略 如何重新划分Swap交换分区
·Linux安全攻略如何修复系统的Root密码
·Linux系统下如何进行磁盘配额Quota的设置
·故障排除 Linux操作系统死机处理方法总结
·Linux操作系统时间设置方法介绍
·解决RPM包不能正常使用的问题
·详细讲解 Linux系统下Ramdisk的制作过程
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·VirtualBox为Ubuntu系统配置共享文件夹
·Ubuntu下安装Netgear WG511v2 无线网卡
·Redhat Enterprise Linux磁带机简单操
·Linux系统下创建DBCA报错的解决方法
·Fedora和XP双系统中网卡Realtek冲突问
·Ubuntu开机自动挂载Win分区
·ubuntu8.04如何访问其它分区
·Fedora 9的安全措施
· 移动Linux系统中的TMP分区
·双Linux和多Linux系统的安装方法介绍
·轻松设置Wine程序的中文显示
·Linux系统下强大的杀毒软件:Avast
  阅读排行
·在Linux系统下查看端口的使用情况及启
·在Linux操作系统下查看磁盘空间的好方
·使用源代码将 Glibc 升级到 2.6
·Useradd和Adduser添加用户工具使用方法
·Linux系统的头文件和库文件搜索路径
·Linux下推荐的常用应用程序列表
·Linux环境进程间通信——信号(上)
·设置GRUB默认启动系统及Menu.lst参数介
·Linux系统挂载U盘和硬盘光驱的问题
·Df命令:查看Linux磁盘剩余空间方法介
·什么是Linux?Linux与UNIX之间的关系
·Linux系统利用Crontab命令实现定时重启
·使用 ActiveScaffold 增强 Ruby on Rai
·Linux系统下常用命令及账户管理
·新手入门:手把手教你如何写Makefile
网摘收藏: