【ACCESS精品源码栏目提醒】:网学会员为广大网友收集整理了,计算机系统详解-从一个程序员的视角(124页精品课件PPT) - 大学课件,希望对大家有所帮助!
Computer Systems:A Programmer’s Perspective 计算机系统详解 ——从程序员的视角 Lecture 1 Intro Outline°Course Theme°Five great realities of computer systems°Administrative Matters°Lecture topics and assignments 课程出发点 Abstract v.s. Reality°抽象是必须的,但也应该考虑具体实现°其他计算机课程通常强调“抽象”: 抽象数据类型 渐进分析法°抽象往往是受限的: 特别是当计算机系统中存在一些小的缺陷 有必要去深入了解计算机系统中一些底层实现细节°通过了解具体的实现有助于: 成为更有效率的程序员 - 能够更有效的找出并且消除bug - 能够更好的进行程序性能调优 为以后的 计算机类“系统”级课程做好准备 - 编译 操作系统 网络 计算机体系结构 嵌入式系统等等Great Reality 1°Int’s 不是整数 Float’s不是实数°举例 x2 ≥ 0 - Float’s: 是 - Int’s: – 40000 40000 -- 1600000000 – 50000 50000 -- -1794967296 x y z x y z - Unsigned Signed Int’s: 是 - Float’s: – 1e20 -1e20 3.14 -- 3.14 – 1e20 -1e20 3.14 -- 0计算机运算规则°不会产生随机值 每种运算操作都有基本的数学含义和性质°但不能假设具有某些“通常”性质 由于表示精度的限制 整数运算操作满足“环”性质 - 交换性结合性 分配性 浮点运算操作满足“有序性”性质 - 单调性 正负符号不变性°可见: 需要结合上下文环境来理解某些“抽象” 对于编译器设计者或者关键应用的程序员,尤其关键Great Reality 2°编程人员应该了解一些汇编语言°幸运的是,可能永远也不会需要用汇编语言来写程序 编译器比程序员做的更好并且更有耐心°但理解汇编语言是认识机器级执行模型的关键 存在bug时的程序行为 - 此时高级语言执行模型失效 程序性能调优 - 找到程序低效的根源 实现系统级软件 - 编译器以机器码为最终目标代码 - 操作系统必须管理进程状态汇编代码例子°时间戳计数器(Time Stamp Counter) Intel兼容机中的特殊64位寄存器 每个时钟周期自动加1 通过 rdtsc 指令来读取°应用 测量程序的运行时间 - 以时钟周期为时间单位 double t start_counter P t get_counter printfP required f clock cyclesn t读计数器代码 利用GCC的“asm”特性在C源代码中编写小段汇编代码 最终GCC将汇编代码插入到编译产生的机器码中 static unsigned cyc_hi 0 static unsigned cyc_lo 0 / Set hi and lo to the high and low order bits of the cycle counter. / void access_counterunsigned hi unsigned lo asmrdtsc movl edx0 movl eax1 : r hi r lo : : edx eax 读计数器代码/ Record the current value of the cycle counter. /void start_counter access_countercyc_hi cyc_lo/ Number of cycles since the last call to start_counter. /double get_counter unsigned ncyc_hi ncyc_lo unsigned hi lo borrow / Get cycle counter / access_counterncyc_hi ncyc_lo / Do double precision subtraction / lo ncyc_lo - cyc_lo borrow lo ncyc_lo hi ncyc_hi - cyc_hi - borrow return double hi 1