Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )

Slides:



Advertisements
Similar presentations
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
Advertisements

2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
九年级物理一轮复习 第一章 声现象 知识要点. 1. 声音的产生和传播  ( 1 )声音的产生:声音是由于物体的振动产生的。  凡是发声的物体都在振动。振动停止,发声也停止。  ( 2 )声源:正在发声的物体叫声源。固体、液体、气体 都可以作为声源,有声音一定有声源。  ( 3 )声音的传播:声音的传播必须有介质,声音可以在.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
2017年3月5日 单片机原理与应用 背景知识调查.
第8章 机床操作 主讲:臧红彬 博士.
Oracle数据库 Oracle 子程序.
2-7、函数的微分 教学要求 教学要点.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
存储系统.
大学计算机基础 典型案例之一 构建FPT服务器.
SQL Injection.
走进编程 程序的顺序结构(二).
网络常用常用命令 课件制作人:谢希仁.
微机原理与接口技术 第9章 计时/计数接口.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
Online job scheduling in Distributed Machine Learning Clusters
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
CPU结构和功能.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
第五章 中断与异常 中断的基本知识 中断描述符表的初始化 中断处理 中断的下半部处理机制 中断的应用-时钟中断.
Windows 7 的系统设置.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第二章 登录UNIX操作系统.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
K60入门课程 02 首都师范大学物理系 王甜.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
分裂对象模型 C++ otcl.
实验七 安全FTP服务器实验 2019/4/28.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
HSC高速输出例程 HORNER APG.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
2.4 让声音为人类服务.
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
上节复习(11.14) 1、方式2、方式0的特点? 2、定时/计数器的编程要点? 3、实验5方案优化问题.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
DSP技术与应用 电子与信息技术系.
Presentation transcript:

Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008

Linux中的 时钟和定时测量 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008

定时测量 Linux内核提供两种主要的定时测量 定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的 获得当前的时间和日期 维持定时器 系统调用:time(), ftime()以及gettimeofday() 维持定时器 settimer(), alarm() 定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的 2019/5/5 Linux OS Analysis

主要内容 定时的硬件设备 Linux内核中与时间有关的程序 实现CPU分时、更新系统时间、维护软定时器 与定时测量相关的系统调用及相关服务例程 2019/5/5 Linux OS Analysis

硬时钟 80x86体系结构上,内核必须显式的与四种时钟打交道 实时时钟Real time clock,RTC 时间戳计数器Time stamp counter,TSC 可编程间隔定时器Programmable interval timer, PIT SMP系统上的本地APIC定时器 用于跟踪 当前时间 产生周期性的时钟中断, 用于计时 2019/5/5 Linux OS Analysis

实时时钟RTC 基本上所有的PC都包含实时时钟 与CMOS RAM往往集成在一个芯片内 独立于CPU与所有其他芯片 依靠一个独立的小电池供电给RTC中的振荡器 即使关闭PC电源,还会继续运转 与CMOS RAM往往集成在一个芯片内 例如:Motorala 146818 能在IRQ8上发出周期性的中断,频率在2HZ~8192之间 可以对其编程实现一个闹钟 2019/5/5 Linux OS Analysis

Linux本身只使用RTC获得时间和日期 对应的设备文件为/dev/rtc 内核通过0x70和0x71两个端口访问RTC 可以通过设备文件对其编程 内核通过0x70和0x71两个端口访问RTC 系统管理员可以通过执行时钟程序设置时钟 2019/5/5 Linux OS Analysis

时间戳计数器TSC 在80x86微处理器中,有一个CLK输入引线 从pentium开始,很多80x86微处理器都引入了一个TSC 接收外部振荡器的时钟信号 从pentium开始,很多80x86微处理器都引入了一个TSC 一个64位的、用作时间戳计数器的寄存器 它在每个时钟信号(CLK)到来时+1 例如时钟频率400MHz的微处理器,TSC每2.5ns就+1 rdtsc指令用于读该寄存器 2019/5/5 Linux OS Analysis

与后面介绍的可编程间隔定时器相比,TSC可以获得更精确的时钟 为此,Linux在系统初始化的时候必须确定时钟信号CLK的频率(即CPU的实际频率) calibrate_tsc 根据在一个相对较长的时间间隔内(约50ms)所发生的TSC计数的个数进行计算 那个间隔由可编程间隔定时器给出 由于只在系统初始化的时候运行一次,因此本程序可以执行较长时间,而不会引起问题 2019/5/5 Linux OS Analysis

可编程间隔定时器PIT 经过适当编程后,可以周期性的给出时钟中断 通常是8254 CMOS芯片 Linux将PIT编程为: 使用I/O端口0x40~0x43 Linux将PIT编程为: 100Hz 通过IRQ0发出时钟中断 每10ms产生一次时钟中断,即一个tick 2019/5/5 Linux OS Analysis

Tick的长短 短 Tick的设置是一个折中,例如 优点:分辨率高 缺点:需要较多的CPU时间处理,会导致用户程序运行变慢 适用于非常强大的机器,这种机器能够承担较大的系统开销 Tick的设置是一个折中,例如 在大多数惠普的Alpha和Intel的IA-64上约1ms产生一个tick(每秒1024个时钟中断) Rawhide Alpha工作站采用更高(1200tick/秒) 2019/5/5 Linux OS Analysis

在Linux中,下列宏决定时钟中断频率 每秒钟时钟中断的个数,即每秒tick的个数 8254芯片的内部振荡器频率,每秒多少次 对8254分频,获得HZ所需的时钟 2019/5/5 Linux OS Analysis

在init_IRQ()中初始化时钟中断频率 此后,只要允许处理时钟中断,约每10ms就会产生一个时钟中断 1tick约为10ms 2019/5/5 Linux OS Analysis

如何计算CPU的时钟频率CLK Linux在初始化的时候,利用可编程间隔定时器获得CPU的频率 观察calibrate_tsc(),了解如何计算CPU的频率 已知:PIT的频率 未知:CLK频率 方法:统计在PIT已知的一段时间内(50ms),CLK发生了多少次;然后计算出CLK频率(次数/50ms) 2019/5/5 Linux OS Analysis

Linux的计时体系结构 Linux要周期性的执行一些任务,例如 更新系统自启动以来所经过的时间 更新时间和日期 确定进程运行了多久 检查每个软定时器是否已经到期 2019/5/5 Linux OS Analysis

在单处理器系统中,所有定时活动都由IRQ0上的时钟中断触发,包括 在中断中立即执行的部分,和 作为下半部分延迟执行的部分 2019/5/5 Linux OS Analysis

PIT的时钟中断处理例程 Linux初始化时由time_init()建立IRQ0对应的中断处理函数 将irq0作为irq_desc的第一项 2019/5/5 Linux OS Analysis

如果有TSC,那么就得到时钟中断处理延迟, 以给用户提供更精确的时钟 该函数会调用do_timer进一步处理 2019/5/5 Linux OS Analysis

do_timer 全局变量,存放自系统启动 以来的时钟节拍数 32位 约497天会溢出(回归为0) 检查当前进程对时间片的使用 情况 激活下半部分 如果tq_timer非空,还要激活相关的下半部分处理 2019/5/5 Linux OS Analysis

update_process_times 统计当前进程对 CPU时间的使用 情况 更新时间片 视需要进行调度 2019/5/5 Linux OS Analysis

TIMER_BH下半部分 当时钟中断处理例程运行结束并返回时,会立即处理下半部分 更新系统日期和时间,计算当前的系统负载 维护软定时器处理 2019/5/5 Linux OS Analysis

更新时间和日期 用户程序从下面这个变量中获得当前时间和日期 存放从1970年1月1日凌晨0点 以来经过的所有秒数 最后一秒已经过去的微秒数 取值范围:0~999999 2019/5/5 Linux OS Analysis

系统初始化时,time_init()初始化时间和日期 观察get_cmos_time() 获得coms时间 一旦完成,Linux不再需要RTC, 依靠下半部分维护xtime 2019/5/5 Linux OS Analysis

上一次xtime更新后的jiffies 更新xtime 2019/5/5 Linux OS Analysis

软定时器 定时器是一种软件功能,它允许在将来的某个时刻调用某个函数 大多数设备驱动程序利用定时器完成一些特殊工作 软盘驱动程序在软盘暂时不被访问时就关闭设备的发动机 并行打印机利用定时器检测错误的打印机情况 2019/5/5 Linux OS Analysis

Linux中存在两类定时器: 动态定时器 间隔定时器 内核使用 间隔定时器 由进程在用户态创建 注意:由于软定时器在下半部分处理,内核不能保证定时器正好在时钟到期的时候被执行,会存在延迟,不适用于实时应用 2019/5/5 Linux OS Analysis

动态定时器 动态定时器被动态的创建和撤销,当前活动的动态定时器个数没有限制 数据结构: 系统使用512个双向链表维护动态定时器 到期时间 函数使用的参数 定时器到期时要执行的函数 2019/5/5 Linux OS Analysis

创建并激活一个动态定时器 创建一个新的timer_list对象 调用init_timer初始化,并设置定时器要处理的函数和参数 设置定时时间 使用add_timer加入到合适的链表中 通常定时器只能执行一次,如果要周期性的执行,必须再次将其加入链表 2019/5/5 Linux OS Analysis

动态定时器的处理 为提高处理动态定时器的效率,必须给定时器排序,并使用合适的数据结构 Linux根据expires的值,维护这样的数据结构 2019/5/5 Linux OS Analysis

index指向当前应当用来更新上一级定时器的链表 =64, 64个双向链表,包含了未来某个时间段内的 动态定时器 index指向当前应当用来更新上一级定时器的链表 (=256),256个双向链表,每个表示对应 时钟到期时的动态定时器链表 Index表示当前节拍对应的那个链表 一点点不同:最后一个链表中的 定时器的时间可以任意大 未来214-1个节拍内的定时器 每256个节拍内的定时器为1个链表 共64个 未来220-1个节拍内的定时器 每214个节拍内的定时器为1个链表 共64个 未来226-1个节拍内的定时器 每220个节拍内的定时器为1个链表 共64个 未来232-1个节拍内的定时器 每226个节拍内的定时器为1个链表 共64个 2019/5/5 Linux OS Analysis

run_timer_list 下半部分timer_bh()调用run_timer_list()检查到期的动态定时器,包括: 执行动态定时器 更新链表 观察run_timer_list() 2019/5/5 Linux OS Analysis

动态定时器的应用 使用schedule_timeout()可以使进程被延迟(睡眠一段时间) 2019/5/5 Linux OS Analysis

与定时测量相关的系统调用 time() ftime() gettimeofday() 返回从1970年1月1日凌晨0点开始的秒数 返回从1970年1月1日凌晨0点开始的秒数以及最后一秒的毫秒数 数据结构为timeb gettimeofday() 对应于sys_gettimeofday() 2019/5/5 Linux OS Analysis

settimer() alarm() 间隔定时器 引起SIGALARM信号 频率:周期性的触发定时器(若为0,只触发一次) 2019/5/5 Linux OS Analysis

与时钟相关的命令 date:显示或者更改系统时钟 使用time获得时钟 使用ctime改变时钟格式 2019/5/5 Linux OS Analysis

Project 5 具体要求参见课程主页 分析下列几个内核函数 calibrate_tsc、 get_cmos_time、 run_timer_list、 schedule_timeout 在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应 方法不限 分析你的程序的实际执行借助了内核的哪些机制 2019/5/5 Linux OS Analysis