《深入理解计算机系统lec01-intro》由会员分享,可在线阅读,更多相关《深入理解计算机系统lec01-intro(48页珍藏版)》请在金锄头文库上搜索。
1、CSAPP L1 Intro.1Wu Spring 11 USTCComputer Systems:A Programmers Perspective计算机系统详解计算机系统详解Lecture 1IntroFebruary 25, 2011 Wu junmin ()CSAPP L1 Intro.2Wu Spring 11 USTCOutline Course Theme Five great realities of computer systems Administrative Matters Lecture topics and assignmentsCSAPP L1 Intro.3Wu
2、Spring 11 USTC课程出发点课程出发点 Abstract vs. Reality 抽象是必须的,但也应该考虑问题的实现抽象是必须的,但也应该考虑问题的实现! 其他计算机课程通常强调抽象的地方:其他计算机课程通常强调抽象的地方: 抽象数据类型抽象数据类型 渐进分析法渐进分析法 这些抽象往往是受限的:这些抽象往往是受限的: 特别是当计算机系统中存在一些小的缺陷特别是当计算机系统中存在一些小的缺陷 有必要去深入了解计算机系统中一些底层的实现有必要去深入了解计算机系统中一些底层的实现 通过了解具体的实现有助于:通过了解具体的实现有助于: 成为更有效率的程序员成为更有效率的程序员-能够更有效的
3、找出并且消除能够更有效的找出并且消除bug-能够更好的进行程序性能调优能够更好的进行程序性能调优 为以后的为以后的 计算机类计算机类“系统系统”级课程做好准备级课程做好准备-编译编译, 操作系统操作系统, 网络网络, 计算机体系结构计算机体系结构, 嵌入式系统等等嵌入式系统等等CSAPP L1 Intro.4Wu Spring 11 USTCGreat Reality #1 Ints 不是整数不是整数, Floats不是实数不是实数 举例举例 x2 0?-Floats: 是是!-Ints: 40000 * 40000 - 1600000000 50000 * 50000 - ? (x + y)
4、 + z = x + (y + z)?-Unsigned & Signed Ints: 是是!-Floats: (1e20 + -1e20) + 3.14 - 3.14 1e20 + (-1e20 + 3.14) - ?-1794967296 0 CSAPP L1 Intro.5Wu Spring 11 USTCComputer Arithmetic Does not generate random values Arithmetic operations have important mathematical properties Cannot assume “usual” properti
5、es 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
6、issues for compiler writers and serious application programmersCSAPP L1 Intro.6Wu Spring 11 USTC计算机运算规则计算机运算规则 不会产生随机值不会产生随机值 每种运算操作都有很重要的数学含义和性质每种运算操作都有很重要的数学含义和性质 但不能假设具有某些但不能假设具有某些“通常通常”性质性质 由于数字表达精度的有限由于数字表达精度的有限 整数运算操作满足整数运算操作满足“环环”性质性质-交换性交换性,结合性结合性, 分配性分配性 浮点运算操作满足浮点运算操作满足“有序性有序性”性质性质-单调性单调性,
7、 正负符号的不变性正负符号的不变性 可见:可见: 需要结合上下文环境来理解某些需要结合上下文环境来理解某些“抽象抽象” 对于编译器设计者或者关键应用的程序员,这是都是很重要的问题对于编译器设计者或者关键应用的程序员,这是都是很重要的问题CSAPP L1 Intro.7Wu Spring 11 USTCGreat Reality #2你应该了解一些汇编语言你应该了解一些汇编语言 幸运的是幸运的是,你永远也不会用汇编语言来写程序你永远也不会用汇编语言来写程序 编译器比你做的更好并且也更有耐心编译器比你做的更好并且也更有耐心 但理解汇编语言是认识机器级执行模型的关键但理解汇编语言是认识机器级执行模型
8、的关键 存在存在bug时的程序行为时的程序行为-此时高级语言执行模型失效此时高级语言执行模型失效 程序性能调优程序性能调优-找到程序低效的根源找到程序低效的根源 实现系统级软件实现系统级软件-编译器以机器码为最终目标代码编译器以机器码为最终目标代码-操作系统必须管理进程状态操作系统必须管理进程状态CSAPP L1 Intro.8Wu Spring 11 USTC汇编代码例子汇编代码例子 时间戳计数器(时间戳计数器(Time Stamp Counter) intel兼容机器中的特殊兼容机器中的特殊64位寄存器位寄存器 每个时钟周期递增每个时钟周期递增 通过通过 rdtsc 指令来读取指令来读取
9、应用应用 测量程序的运行时间测量程序的运行时间-以时钟周期为时间单位以时钟周期为时间单位double t;start_counter();P();t = get_counter();printf(P required %f clock cyclesn, t);CSAPP L1 Intro.9Wu Spring 11 USTC读计数器代码读计数器代码 利用利用GCC的的“asm”特性在特性在C源代码中编写小段汇编代码源代码中编写小段汇编代码 最终最终GCC插入汇编代码到编译产生的机器码中插入汇编代码到编译产生的机器码中static unsigned cyc_hi = 0;static unsig
10、ned cyc_lo = 0;/* Set *hi and *lo to the high and low order bits of the cycle counter. */void access_counter(unsigned *hi, unsigned *lo) asm(rdtsc; movl %edx,%0; movl %eax,%1 : =r (*hi), =r (*lo) : %edx, %eax);CSAPP L1 Intro.10Wu Spring 11 USTC读计数器代码读计数器代码/* Record the current value of the cycle cou
11、nter. */void start_counter() access_counter(&cyc_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_counter(&ncyc_hi, &ncyc_lo); /* Do double precision subtraction */ lo = nc
12、yc_lo - cyc_lo; borrow = lo ncyc_lo; hi = ncyc_hi - cyc_hi - borrow; return (double) hi * (1 30) * 4 + lo;CSAPP L1 Intro.11Wu Spring 11 USTC测量运行时间测量运行时间比看上去要更难于处理比看上去要更难于处理 存在很多影响因素存在很多影响因素例子例子 从从1到到n的整数求和的整数求和 nCyclesCycles/n1009619.611,0008,4078.411,0008,4268.4310,00082,8618.2910,00082,8768.291,00
13、0,0008,419,9078.421,000,0008,425,1818.431,000,000,0008,371,2305,5918.37CSAPP L1 Intro.12Wu Spring 11 USTC main(int argc, char* argv) . for (i=0; it; i+) start_counter(); count(n); timesi = get_counter(); . int count(int n) int i; int sum = 0; for (i=0; in; i+) sum += i; return sum; 系统性能测量系统性能测量int c
14、ount(int n) int i; int sum = 0; for (i=0; in; i+) sum += i; return sum;main(int argc, char* argv) . for (i=0; it; i+) start_counter(); count(n); timesi = get_counter(); .CSAPP L1 Intro.13Wu Spring 11 USTC系统性能系统性能int count(int n) .main(int argc, char* argv) . main(int argc, char* argv) . int count(in
15、t n) . Experimentncycles/n1101649.221017.23100024.3410006.1Experimentncycles/n1101657.6210261a10202a1016.43a10001.74a10001.6CSAPP L1 Intro.14Wu Spring 11 USTCGreat Reality #3存储相关随机访问存储器(存储相关随机访问存储器(RAM)是一个非物理的抽象)是一个非物理的抽象 存储器并非是无限的存储器并非是无限的 必须对它进行分配和管理必须对它进行分配和管理 许多应用都是存储受限的(许多应用都是存储受限的(memory domin
16、ated) 存储器的性能并非是一致的(存储器的性能并非是一致的(uniform) Cache 和虚拟内存的效果会极大的影响程序性能和虚拟内存的效果会极大的影响程序性能 使程序适应存储系统的结构特性可以极大的提高其性能使程序适应存储系统的结构特性可以极大的提高其性能 访存访存bug是极其致命的是极其致命的 最终问题出现的时间和位置与对应的访存最终问题出现的时间和位置与对应的访存bug之间可能有很大的距离,导致难以察觉之间可能有很大的距离,导致难以察觉CSAPP L1 Intro.15Wu Spring 11 USTC存储器性能举例存储器性能举例 矩阵乘法实现矩阵乘法实现 多种循环嵌套方式多种循环
17、嵌套方式/* ijk */for (i=0; in; i+) for (j=0; jn; j+) sum = 0.0; for (k=0; kn; k+) sum += aik * bkj; cij += sum; /* ikj */for (i=0; in; i+) for (k=0; kn; k+) r = aik; for (j=0; jn; j+) cij += r * bkj; CSAPP L1 Intro.16Wu Spring 11 USTC020406080100120140160matrix size (n)ijkikjjikjkikijkjiMatmult性能性能 (Alp
18、ha 21164) 超过L1 Cache超过L2 CacheIterations/timeCSAPP L1 Intro.17Wu Spring 11 USTC存储系统存储系统CSAPP L1 Intro.18Wu Spring 11 USTC分块矩阵乘法性能分块矩阵乘法性能 (Alpha 21164)0204060801001201401605075100 125 150 175 200 225 250 275 300 325 350 375 400 425 450 475 500matrix size (n)bijkbikjijkikjIterations/timeCSAPP L1 Intr
19、o.19Wu Spring 11 USTC实际存储器性能实际存储器性能From Tom Womacksmemory latency benchmarkPointer-Chase Results1101001000Iteration Time nsCSAPP L1 Intro.20Wu Spring 11 USTC访存访存bug举例举例main () long int a2; double d = 3.14; a2 = 1073741824; /* Out of bounds reference */ printf(d = %.15gn, d); exit(0);main () long int
20、 a2; double d = 3.14; a2 = 1073741824; /* Out of bounds reference */ printf(d = %.15gn, d); exit(0);AlphaMIPSLinux-g5.30498947741318e-3153.13999986648563.14-O3.143.143.14(linux版本给出了正确的结果,但是通过函数调用实现该功能时会出现段错误版本给出了正确的结果,但是通过函数调用实现该功能时会出现段错误.)CSAPP L1 Intro.21Wu Spring 11 USTC访存错误访存错误 c和和c+语言不提供任何访存保护机
21、制语言不提供任何访存保护机制 越界数组访问越界数组访问 无效指针无效指针 滥用滥用malloc和和free 会导致非常讨厌的会导致非常讨厌的bug bug产生何种结果会依赖操作系统和编译器的实现产生何种结果会依赖操作系统和编译器的实现 与访存行为的距离与访存行为的距离-与刚刚访问的数据对象逻辑上不相关的对象值被修改与刚刚访问的数据对象逻辑上不相关的对象值被修改-bug的恶果要经过很长时间才被发现的恶果要经过很长时间才被发现 如何处理如何处理? 用用Java,Lisp,ML来编写程序来编写程序 理解任何可能的导致这种程序行为的原因理解任何可能的导致这种程序行为的原因 利用或者开发能够监测这种错误
22、的工具利用或者开发能够监测这种错误的工具CSAPP L1 Intro.22Wu Spring 11 USTCGreat Reality #4除了渐进复杂性外还有其他决定性能的因素除了渐进复杂性外还有其他决定性能的因素 常数因子也同样重要常数因子也同样重要! 代码编写的好坏可导致代码编写的好坏可导致10倍的性能差异倍的性能差异 必须在多个层次上进行性能优化:算法,数据表示必须在多个层次上进行性能优化:算法,数据表示, 过程过程, 以及循环以及循环 必须深入理解系统才能更好的优化程序性能必须深入理解系统才能更好的优化程序性能 程序是如何编译并执行的程序是如何编译并执行的 如果测量程序性能并确定性能
23、瓶颈如果测量程序性能并确定性能瓶颈 如何在不破坏程序原有结构和模块化的前提下改进程序性能如何在不破坏程序原有结构和模块化的前提下改进程序性能CSAPP L1 Intro.23Wu Spring 11 USTCGreat Reality #5计算机要做远比仅仅执行程序多的多的事情计算机要做远比仅仅执行程序多的多的事情 需要处理数据输入输出需要处理数据输入输出 I/O 系统对于程序的性能和可靠性至关重要系统对于程序的性能和可靠性至关重要 计算机之间通过网络进行通信计算机之间通过网络进行通信 由于网络的出现,许多问题随之产生由于网络的出现,许多问题随之产生-独立进程间的并发操作问题独立进程间的并发操
24、作问题-处理来自不可靠信息媒介的数据处理来自不可靠信息媒介的数据-跨平台的兼容性跨平台的兼容性-复杂的性能问题复杂的性能问题CSAPP L1 Intro.24Wu Spring 11 USTC硬件组织结构硬件组织结构 (示意图示意图)CSAPP L1 Intro.25Wu Spring 11 USTCOutline Course Theme Five great realities of computer systems Administrative Matters Lecture topics and assignmentsCSAPP L1 Intro.26Wu Spring 11 USTC
25、本课程的目的本课程的目的 大多数系统级课程都是面向系统设计与实现的(大多数系统级课程都是面向系统设计与实现的(Builder-Centric) 计算机体系结构计算机体系结构-使用使用 Verilog设计流水线处理器设计流水线处理器 操作系统操作系统-实现操作系统的主体部分实现操作系统的主体部分 编译编译-为简单程序设计语言设计编译器为简单程序设计语言设计编译器 网络网络-实现并仿真网络协议实现并仿真网络协议CSAPP L1 Intro.27Wu Spring 11 USTC本课程的目的本课程的目的 (Cont.) 本课程面向程序员(本课程面向程序员(Programmer-Centric) 课程
26、以如何深入了解更多系统底层知识,引导程序员编写更高效的程序为目的课程以如何深入了解更多系统底层知识,引导程序员编写更高效的程序为目的-编写性能更高也更可靠的程序编写性能更高也更可靠的程序-掌握涉及到操作系统的一些技术掌握涉及到操作系统的一些技术例如 并发, 信号量处理 并非仅为了潜心钻研的并非仅为了潜心钻研的“黑客黑客”而开的课程而开的课程-我们将唤醒每个人内心深处的我们将唤醒每个人内心深处的“黑客黑客” 包含在其他课程中不会了解到的内容包含在其他课程中不会了解到的内容CSAPP L1 Intro.28Wu Spring 11 USTCCourse Administration Instruc
27、tor: 吴俊敏吴俊敏 Materials: TextBook: Randal E. Bryant and David R. OHallaron, “Computer Systems: A Programmers Perspective”, Prentice Hall 2003,电子工业出版社(,电子工业出版社(2005)http:/csapp.cs.cmu.edu/ 中译本,深入理解计算机系统,龚亦利等译,中国电力出版社中译本,深入理解计算机系统,龚亦利等译,中国电力出版社(2004) Reference Book: Samuel P. Harbison III and Guy L. St
28、eele Jr., “C A Reference Manual 5th Edition”,Prentice Hall, 2002 http:/ L1 Intro.29Wu Spring 11 USTC成绩成绩 平时点名平时点名3次次 课程结束后提交一篇论文,论文可以是学习心得或完成某个实验的实验报告课程结束后提交一篇论文,论文可以是学习心得或完成某个实验的实验报告 根据到课率及最终论文评定成绩根据到课率及最终论文评定成绩CSAPP L1 Intro.30Wu Spring 11 USTC关于教材关于教材 作者作者: Randal E. Bryant: CMU, Professor, ACM I
29、EEE Fellow OHallaron: CMU,Professor 内容组织内容组织: 介绍介绍 信息表示与处理信息表示与处理 C语言程序的机器级表示语言程序的机器级表示 处理器结构处理器结构 程序性能优化程序性能优化 存储器层次结构存储器层次结构 链接链接 异常控制流异常控制流 测量程序运行时间测量程序运行时间 虚拟存储器虚拟存储器 系统级系统级I/O 网络编程网络编程 多线程编程多线程编程CSAPP L1 Intro.31Wu Spring 11 USTC课程结构课程结构 课程内容安排课程内容安排:介绍介绍1节节(chap.1,2-25)信息表示信息表示1节节 (chap.2,3-4)
30、机器语言机器语言3节节 (chap.3,3-11,3-18)代码优化代码优化2节节 (chap.5,3-25,4-1)存储器层次结构存储器层次结构2节节 (chap.6,4-8,4-15)链接链接2节节 (chap.7,4-22,4-29)异常处理异常处理2节节(chap.8,5-6,5-13)性能检测性能检测1节节(chap.9,5-20)虚拟存储器虚拟存储器 2节节(Chap.10,5-27,6-3) I/O系统系统1 节节(Chap.11,6-10)CSAPP L1 Intro.32Wu Spring 11 USTCOutline Course Theme Five great real
31、ities of computer systems Administrative Matters Lecture topics and assignmentsCSAPP L1 Intro.33Wu Spring 11 USTC程序与数据程序与数据 主要知识点主要知识点 位操作位操作, 计算机运算计算机运算, 汇编程序汇编程序, C语言控制与数据结构的机器表示语言控制与数据结构的机器表示 包括体系结构及编译方面的一些知识包括体系结构及编译方面的一些知识 学习使用某些工具学习使用某些工具 任务任务 L1: 位操作位操作 L2: 排除二进制炸弹排除二进制炸弹 L3: 缓冲区溢出实验缓冲区溢出实验CS
32、APP L1 Intro.34Wu Spring 11 USTC性能性能 主要知识点主要知识点 高级处理器模型高级处理器模型, 代码优化代码优化 (控制与数据控制与数据), 计算机时间测量计算机时间测量 涉及体系结构、编译、操作系统涉及体系结构、编译、操作系统 任务任务 L4: 代码性能优化代码性能优化CSAPP L1 Intro.35Wu Spring 11 USTC存储器层次结构存储器层次结构 主要知识点主要知识点 存储器技术存储器技术,存储器层次结构存储器层次结构, 高速缓存高速缓存, 磁盘磁盘, 局部性局部性 涉及体系结构、操作系统涉及体系结构、操作系统 任务任务 L4: 代码性能优化
33、代码性能优化CSAPP L1 Intro.36Wu Spring 11 USTC链接与异常控制链接与异常控制 主要知识点主要知识点 目标文件目标文件, 静态与动态链接静态与动态链接, 库库, 加载加载 硬件异常硬件异常, 进程进程, 进程控制进程控制, Unix 信号量信号量, 非局部跳转非局部跳转 涉及编译,操作系统,体系结构涉及编译,操作系统,体系结构 任务任务 L5: 自己编写能满足作业控制的自己编写能满足作业控制的shell CSAPP L1 Intro.37Wu Spring 11 USTC 虚拟存储器虚拟存储器 主要知识点主要知识点 虚拟存储器虚拟存储器, 地址转换地址转换, 动态
34、内存分配动态内存分配 涉及体系结构、操作系统涉及体系结构、操作系统 任务任务 L6: 自己实现自己实现molloc函数函数CSAPP L1 Intro.38Wu Spring 11 USTC I/O, 网络网络, 和并行处理和并行处理 主题主题 高级与低级高级与低级I/O, 网络编程网络编程, Internet服务服务, Web 服务服务 并发并发,并发服务设计并发服务设计, 线程线程, 基于基于select的的I/O多路复用技术多路复用技术 . 涉及操作系统,网络,体系结构涉及操作系统,网络,体系结构. 任务任务 L7: 自己编写自己编写web代理程序代理程序CSAPP L1 Intro.3
35、9Wu Spring 11 USTC实验指导实验指导 每一次实验有明确的目标:或者解决某个问题,或者为了在竞赛中取胜每一次实验有明确的目标:或者解决某个问题,或者为了在竞赛中取胜. 排除二进制炸弹排除二进制炸弹. 在性能调优比赛中取胜在性能调优比赛中取胜. 通过实验应该掌握相关方面的技能和知识通过实验应该掌握相关方面的技能和知识 Data Lab: 计算机运算计算机运算, 数字逻辑数字逻辑 Bomb Labs:汇编语言汇编语言, 使用调试器使用调试器, 理解栈理解栈 Perf Lab: 程序剖析程序剖析, 性能测试性能测试,性能调优性能调优. Shell Lab: 理解理解Unix中的进程与进
36、程控制中的进程与进程控制 Malloc Lab: 理解指针与相关的访存理解指针与相关的访存bug. Proxy Lab: 网络编程网络编程,服务端程序设计服务端程序设计CSAPP L1 Intro.40Wu Spring 11 USTCL1:数据实验数据实验 学生须实现简单的逻辑与算术函数,但只能使用高度受限的学生须实现简单的逻辑与算术函数,但只能使用高度受限的C语言子集语言子集. 例如例如, 只能通过位级的运算来求某个数据的绝对值只能通过位级的运算来求某个数据的绝对值. 这一实验有助于学生理解这一实验有助于学生理解C语言中数据类型的位级表示以及在这些数据类型上操作的位级行为。语言中数据类型的
37、位级表示以及在这些数据类型上操作的位级行为。CSAPP L1 Intro.41Wu Spring 11 USTCL2:炸弹实验炸弹实验 “二进制炸弹二进制炸弹”是一个可执行程序是一个可执行程序. 运行时,它提醒用户输入运行时,它提醒用户输入6个不同的字符串。如果其中任何一个出错那么这个个不同的字符串。如果其中任何一个出错那么这个“炸弹炸弹”将爆炸,输出错误信息将爆炸,输出错误信息. 学生须通过反汇编与逆向工程方法破解自己的程序,从而确定这学生须通过反汇编与逆向工程方法破解自己的程序,从而确定这6个字符串个字符串. 这一实验引导学生学习汇编语言,强制他们学习使用二进制调试器。这是一件很有意思的事
38、情,也是在这一实验引导学生学习汇编语言,强制他们学习使用二进制调试器。这是一件很有意思的事情,也是在CMU本科生中很有知名度的实验之一本科生中很有知名度的实验之一. CSAPP L1 Intro.42Wu Spring 11 USTCL3: 缓冲区实验缓冲区实验 学生须在一段可执行代码中寻找缓冲区溢出漏洞并通过修改它来改变其运行时行为学生须在一段可执行代码中寻找缓冲区溢出漏洞并通过修改它来改变其运行时行为. 这一实验教会学生栈的运行原理以及使他们充分认识到编写易于遭受缓冲区溢出攻击程序的危险性这一实验教会学生栈的运行原理以及使他们充分认识到编写易于遭受缓冲区溢出攻击程序的危险性.CSAPP L
39、1 Intro.43Wu Spring 11 USTCL4: 性能试验性能试验 学生须对某段程序的核心函数进行优化,例如求卷积或者矩阵转置学生须对某段程序的核心函数进行优化,例如求卷积或者矩阵转置. 这一实验充分体现了高速缓存的性质并且给学生从底层进行程序优化的经验这一实验充分体现了高速缓存的性质并且给学生从底层进行程序优化的经验. CSAPP L1 Intro.44Wu Spring 11 USTCL5: Shell 实验实验 学生须实现自己的类学生须实现自己的类Unix shell的简单的简单shell程序,这一程序要能进行任务控制,包括对程序,这一程序要能进行任务控制,包括对 ctrl-
40、c和和ctrl-z快捷键的以及对快捷键的以及对fg,bg及其他一些作业控制命令的支持及其他一些作业控制命令的支持. 这是第一次引入任务级并行,可以使学生对这是第一次引入任务级并行,可以使学生对Unix中的进程控制,信号量,以及信号量处理等产生清晰的认识中的进程控制,信号量,以及信号量处理等产生清晰的认识. CSAPP L1 Intro.45Wu Spring 11 USTCL6: Malloc实验实验 学生须实现自己的学生须实现自己的malloc,free和和realloc函数函数 这一实验可以使学生掌握数据在内存空间的分配和组织,并了解如何在时间性能与空间性能中作出权衡这一实验可以使学生掌握
41、数据在内存空间的分配和组织,并了解如何在时间性能与空间性能中作出权衡. 这是本课程最受欢迎的实验之一这是本课程最受欢迎的实验之一. 当学生完成这一实验时,他们才真正掌握指针当学生完成这一实验时,他们才真正掌握指针! CSAPP L1 Intro.46Wu Spring 11 USTCL7: Proxy 实验实验 学生须实现一个实时代理程序,这一代理程序工作在自己的浏览器与万维网之间学生须实现一个实时代理程序,这一代理程序工作在自己的浏览器与万维网之间. 这一实验引导学生进入网络编程世界,同时也涉及到许多课程中的其他概念,例如字节序列,进程控制等这一实验引导学生进入网络编程世界,同时也涉及到许多课程中的其他概念,例如字节序列,进程控制等. CSAPP L1 Intro.47Wu Spring 11 USTCAcknowledgement This course was developed and fine-tuned by Randal E. Bryant and David OHallaron. They wrote The Book!CSAPP L1 Intro.48Wu Spring 11 USTCHave a Great Semester!