深入理解计算机系统lec01-intro

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Computer Systems:

A Programmer’s Perspective

计算机系统详解

Lecture 1

Intro

February 25, 2011

Wu junmin (jmwu@)

Outline

°Course Theme

°Five great realities of computer systems °Administrative Matters

°Lecture topics and assignments

课程出发点

° Abstract vs. Reality

°抽象是必须的,但也应该考虑问题的实现!

°其他计算机课程通常强调抽象的地方:

•抽象数据类型

•渐进分析法

°这些抽象往往是受限的:

•特别是当计算机系统中存在一些小的缺陷

•有必要去深入了解计算机系统中一些底层的实现

°通过了解具体的实现有助于:

•成为更有效率的程序员

-能够更有效的找出并且消除bug

-能够更好的进行程序性能调优

•为以后的计算机类“系统”级课程做好准备

-编译, 操作系统, 网络, 计算机体系结构, 嵌入式系统等等

Great Reality #1

°Int ’s 不是整数, Float ’s 不是实数

°举例

• x 2 ≥ 0?

-Float ’s: 是!

-Int ’s:

– 40000 * 40000 --> 1600000000

– 50000 * 50000 --> ??• (x + y) + z = x + (y + z)?

-Unsigned & Signed Int ’s: 是!

-Float ’s:

– (1e20 + -1e20) + 3.14 --> 3.14

– 1e20 + (-1e20 + 3.14) --> ??-1794967296

Computer Arithmetic

°Does not generate random values

•Arithmetic operations have important mathematical properties

°Cannot assume “usual” properties

•Due to finiteness of representations

•Integer operations satisfy “ring” properties

-Commutativity, associativity, distributivity

•Floating point operations satisfy “ordering” properties -Monotonicity, values of signs

°Observation

•Need to understand which abstractions apply in which contexts •Important issues for compiler writers and serious application

programmers

计算机运算规则

°不会产生随机值

•每种运算操作都有很重要的数学含义和性质

°但不能假设具有某些“通常”性质

•由于数字表达精度的有限

•整数运算操作满足“环”性质

-交换性,结合性, 分配性

•浮点运算操作满足“有序性”性质

-单调性, 正负符号的不变性

°可见:

•需要结合上下文环境来理解某些“抽象”

•对于编译器设计者或者关键应用的程序员,这是都是很重要的问题

Great Reality #2

°你应该了解一些汇编语言

°幸运的是,你永远也不会用汇编语言来写程序•编译器比你做的更好并且也更有耐心

°但理解汇编语言是认识机器级执行模型的关键•存在bug时的程序行为

-此时高级语言执行模型失效

•程序性能调优

-找到程序低效的根源

•实现系统级软件

-编译器以机器码为最终目标代码

-操作系统必须管理进程状态

汇编代码例子

°时间戳计数器(Time Stamp Counter)

•intel兼容机器中的特殊64位寄存器

•每个时钟周期递增

•通过 rdtsc 指令来读取

°应用

•测量程序的运行时间

-以时钟周期为时间单位

double t;

start_counter();

P();

t = get_counter();

printf("P required %f clock cycles\n", t);

测量运行时间

°比看上去要更难于处理

•存在很多影响因素

°例子

•从1到n的整数求和

n Cycles Cycles/n

1009619.61

1,0008,4078.41

1,0008,4268.43

10,00082,8618.29

10,00082,8768.29

1,000,0008,419,9078.42

1,000,0008,425,1818.43 1,000,000,0008,371,2305,5918.37

相关文档
最新文档