计算机与时间
计算机之中 时间相关的概念
- 节拍率 赫兹(HZ)
- 节拍(tick)
- 实时时钟
- 硬件时间
- 系统时间
- 时区
- 时间戳
- 时间
- 时钟中断
- 时钟周期
- 机器指令
- 指令周期
节拍率 赫兹(HZ)
节拍率是什么?
节拍率 是 软件设置的实时时钟的频率。
Linux 与 节拍率
在Linux下,节拍率 作为一个 预定义变量 被内置在操作系统之中。
节拍
什么是节拍
多久触发一次时间中断
节拍率 与 节拍
节拍 = 1 / 节拍率
实时时钟
什么是 实时时钟
实时时钟(RTC,是硬件):一种可编程的硬件芯片,能以固定的频率产生脉冲,在进一步的设计下,产生中断。
实时时钟又可以被称为 硬件时钟,时钟硬件,实时硬件。
实时时钟的频率是可以通过编程来设置的。
实时时钟通过纽扣电池的支持而能在计算机断电的情况下继续运行。
实时时钟位于计算机的哪个位置
实时时钟 位于 计算机的主板。
时钟中断
什么是时钟中断?
首先 时钟中断 是一个中断,是由硬件定时产生的一个中断。
时钟中断 与 实时时钟(RTC)的关系
实时时钟会按照一定的频率产生脉冲,根据实时时钟产生的脉冲的次数来设置阈值,来判定是否触发时钟中断。
时钟中断的作用?更准确地问 应该是时钟中断处理程序的作用有哪些(程序会执行哪些逻辑?)
- 1: 更新系统时间
- 2: 更新本地cpu统计数
- 3: 检查进程的时间片是否耗尽,如果进程的时间片耗尽,则触发进程调度,使进程让出cpu。
- 4: 统计cpu使用率 ......
时钟周期 机器周期 指令周期
时钟周期
时钟周期是cpu时钟晶振频率的倒数。时钟周期是计算机之中 最基本,最小的时间单位。时钟周期是cpu这边引出的概念。
机器周期
cpu之中,一条指令的执行 需要分为多个阶段,每个阶段执行完成所需的时间,被称为是机器周期。
指令周期
cpu执行一条指令所耗费的时间。
时钟周期 机器周期 指令周期 之间的关系
一个 指令周期 包含 若干个 机器周期;
一个 机器周期 包含 若干个 时钟周期。
时间片
时间片的含义是什么
时间片 又被称为 cpu时间片。是cpu分配给每个进程的执行时间。
时间片 与 时钟中断 之间的关系
每次时钟中断 会 触发时钟中断处理程序,时钟中断处理程序会进行 进程被分配的时间片是否耗尽的检查。
计算机断电一段时间后,重启,为什么计算机的时间还能是正常的?
这是由于 实时时钟的功劳。主板上的纽扣电池为 实时时钟 提供电源支持,是实时时钟在断电的情况下依然能够运行,进行计时。
硬件时间
什么是硬件时间
就是实时时钟所维持的时间,实时时钟由主板上的纽扣电池来维持运行。
硬件时间 存储的是 UTC 还是 LTC?
ubuntu:
cat /etc/default/rcS
如果输出值为 utc=no,那么硬件时间是LTC(本地时间)
Linux 与 硬件时间
Linux 下 硬件时间的客户端命令
hwclock
硬件时间的查看
hwclock --show
如何设置硬件时间
hwclock --set --date "20140225 20:23:00"
系统时间
什么是系统时间
在系统开机的时候,会自动从BIOS中取得硬件时间,根据时区设置,计算得到系统时间。
系统时间靠 tick 来维持更新
Linux 与 系统时间
Linux下 系统时间的客户端
date
Linux 如何查看当前的系统时间
执行命令 date
Linux 如何设置当前的系统时间
例子:
date -s "20140225 20:16:00"
系统时间 和 硬件时间 之间的关系
从三个阶段来分析 系统时间 和 硬件时间 之间的关系
-
在开机的时候:
在系统开机的时候,会自动从BIOS中取得硬件时间,设置为系统时间 -
在Linux 运行的时候:
系统时间 和 硬件时间 以异步的方式来运行,互不干扰 -
在关机的时候:
系统时间不会被保存,会被丢弃
系统时间 和 硬件时间之间的同步
- 以系统时间为基准,修改硬件时间
hwclock --systohc
- 以硬件时间为基准,修改系统时间
hwclock --hctosys
为什么要 进行 系统时间 和 硬件时间 之间的同步?
因为 Linux 启动的时候,会从实时时钟读取硬件时间作为系统时间, Linux关机的时候,并不会将系统时间写入到硬件时间,所以当我们发现计算机的系统时间不对,进行系统时间设置之后,还需要将系统时间写入到硬件时间之中,这样的话,计算机重启之后的系统时间才是正确的,不然的话,被设置的系统时间会丢失。
系统时间变化后,sleep函数会有如何反应?
假如 程序 sleep 10分钟,然后在另一个Linux终端,将系统时间调整到 10分钟之后,是否程序立刻结束睡眠呢?
实验方式:
1: 开启两个Linux终端,在一个终端上执行
date; sleep 300; date
在另一个终端上将时间设置为两分钟之后,查看第一个终端的输出结果即可。
实验结果证明:即使将系统时间调后,但是sleep还是会沉睡指定的时间。
时间戳
时间戳的含义是什么?
时间戳:也叫unix时间戳。在同一刻,地球上所有人看到的时间戳都是一致的。unix时间戳是指 从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
编程语言 与 时间戳 (或者说 程序员如何看待时间戳)
编程语言之中获取当前时间戳的方法 的返回值 和 时区无关,修改时区,所返回的时间戳也是不会变化的。
时间
时间的表示
2019-07-04T00:00:00.000Z
程序员看到时间应该注意的
时间是有时区属性的,如果一个时间没有时区的标志,那么这个时间一定是有歧义的,既然是有歧义的时间,那么就会存在bug。
golang 与 时间
golang之中使用什么来表示时间?时间的默认时区是什么?
使用 time.Time 这个结构体来表示时间。
使用 time.Location 这个结构体来表示时区。
golang 如何查看当前使用的时区?
func CurrentZone() {
fmt.Println(time.Local)
}
golang 如何修改时区?
var cstZone = time.FixedZone("UTC", 0) // 东八
time.Local = cstZone
golang 如何获得当前的时间
t := time.Now()
golang 如何获得当前的时间戳
t := time.Now().Unix()
时间戳 时区 时间 的关系
时间戳 + 时区 = 时间
时区
时区的一些信息
全球分为24个时区,在同一时刻,处于不同时区的人所看到的时间是不同的。
Linux 与 时区
Linux系统的时区 会影响哪些方面
Linux 系统启动的时候,会从实时时钟读取时间,并获取当前时区,进行计算,得到系统时间。(这是自己目前的认知)
ubuntu 如何查看当前系统时间的时区
cat /etc/localtime
文件的内容会包含 当前系统时间所出的时区。
Linux 之中的时区是进程级别的嘛?换个问法,进程可以拥有和操作系统不同的时区嘛?
进程是可以拥有与操作系统不同的时区的(java 其实就可以设置时区)