计算机系统基础ppt2019第1章 计算机系统概论.pptx
文本预览下载声明
第一章 计算机系统概论 “计算机系统基础”课程的由来“计算机系统基础”课程内容概要计算机系统概述计算机性能评价主要内容课程的由来课程内容概要课程教学安排及考试安排硬件和软件的基本组成程序的开发和执行过程计算机系统层次结构计算机性能评价用“系统思维”分析问题 ISO C90标准下,在32位系统上 以下C表达式的结果是什么? -2147483648 2147483647 false(与事实不符)!Why? ISO C99标准下为true,Why? 以下关系表达式结果呢? int i = -2147483648; i 2147483647 true!Why? -2147483647-1 2147483647,结果怎样?理解该问题需要知道:编译器如何处理字面量高级语言中运算规则高级语言与指令之间的对应机器指令的执行过程机器级数据的表示和运算……用“系统思维”分析问题sum(int a[ ], unsigned len){ int i,sum = 0; for (i = 0; i = len–1; i++) sum += a[i]; return sum;}当参数len为0时,返回值应该是0,但是在机器上执行时,却发生访存异常。但当len为int型时则正常。Why?当用len=0调用sum函数时,其返回值应该是多少?理解该问题需要知道:高级语言中运算规则机器指令的含义和执行计算机内部的运算电路异常的检测和处理虚拟地址空间……用“系统思维”分析问题若x和y为int型, 当x=65535时, y=x*x; y的值为多少?y=-131071。Why?现实世界中,x2≥0,但在计算机世界并不一定成立。对于任何int型变量x和y,(xy) == (-x-y) 总成立吗? 当x=-2147483648,y任意(除-2147483648外)时不成立 Why?在现实世界中成立,但在计算机世界中并不一定成立。理解该问题需要知道:机器级数据的表示机器指令的执行计算机内部的运算电路用“系统思维”分析问题main.c p1.cint d=100;int x=200;int main() { p1( ); printf (“d=%d, x=%d\n”, d, x ); return 0;}double d; void p1( ) { d=1.0;}理解该问题需要知道:机器级数据的表示变量的存储空间分配数据的大端/小端存储方式链接器的符号解析规则……打印结果是什么?d=0,x=1 072 693 248Why? 用“系统思维”分析问题/* 复制数组到堆中,count为数组元素个数 */int copy_array(int *array, int count) { int i; /* 在堆区申请一块内存 */ int *myarray = (int *) malloc(count*sizeof(int)); if (myarray == NULL) return -1; for (i = 0; i count; i++) myarray[i] = array[i]; return count; } 当count=230+1时, 程序会发生什么情况?理解该问题需要知道:乘法运算及溢出虚拟地址空间存储空间映射……当参数count很大时,则count*sizeof(int)会溢出。如count=230+1时, count*sizeof(int)=4。堆(heap)中大量数据被破坏!用“系统思维”分析问题代码段一:int a = 2147483648;int b = a / -1; printf(%d, %d \n, a, b);运行结果为-2147483648, -2147483648代码段二:int a = 2147483648;int b = -1;int c = a / b; printf(%d, %d\n, a, c);运行结果为“Floating point exception”,显然CPU检测到了溢出异常理解该问题需要知道:机器级数据的表示(如:真值和机器数的关系)机器指令的含义和执行(如:取负指令、除法指令)计算机内部的运算电路(如:除法电路会判是否异常)编译器如何优化(如:a/-1可用取负指令实现)操作系统如何处理异常(如:除法错异常的处理)……Warning:this decimal constant is unsigned only in ISO C90[enabled by default]上述结果在Linux上获得,为什么两者结果不同?在Windows上运算的结果又为何不同?用“系统思维”分析问题以下是一段C
显示全部