
计算机系统(二)part1_liaohao概要.pptx
56页计算机系统(二) COMPUTER SYSTEMS II: ARCHITECTURE AND PROGRAMMING 深圳大学计算机与软件学院 1 主修班级:2014级计算机相关专业本科生 主讲:廖好 课程定位 • 专业必修课 • 与基础课不同的是:自主性,实验性,和专业性 • 后续课程:编译原理,操作系统,体系结构 教学及考试安排 • 课程名称:计算机系统(2) • 英文名称:Computer Systems II: Architecture and Programming • 总 学 时:72学时,其中,实验课为18学时 • 学 分:3.5 • 先修课程:计算机系统(1),面向对象程序设计(C语言或C++) 3 考核方式: • 总成绩=平时成绩×40%+期末成绩×60% • 平时成绩包括实验报告+平时作业 课程的时间 • 第一、二周的实验课不用上 • 理论课:单周二(1,2节)B307, 周四(5,6节)B307 • 实验课:双周二(1,2节) 南区D324 主讲老师介绍 • 主 讲 老师: 廖好 2015年计算机学院助理教授 • 深圳大学计算机与软件学院高性能计算研究中心 • 电 子 邮件: haoliao@ • 手 机: 13622336350 • 办 公 室: 科技楼1303 • : 26534207-84 • :jamesliao520 教学及考试安排 • 教 材:(美) Randal E. Bryant,David R.O Hallaren 著, 龚 奕利,雷迎春译,深入理解计算机系统(原书第2版),机械 工业出版社,2011. • 参考教材:袁春风,计算机系统基础(第1版),机械工业出 版社,2014年7月 6 课程实验 实验名称实验内容 类型 1实验环境配置 与使用 配置Linux实验环境,掌握Linux下的C编程、GCC编译与 链接、GDB调试等方法。
验证 2数据表示实验使用有限类型和数量的运算操作实现一组给定功能(位操 作、补码运算和浮点数操作)的函数此实验将加深对数 据二进制编码表示的了解 设计 3逆向工程实验 从字符串比较、循环、条件/分支、递归调用和栈、指 针、链表/指针/结构这六个方面增强对程序的机器级表 示、汇编语言、GDB调试器和反汇编等方面原理与技能 的掌握 设计 4缓冲区溢出攻 击实验 对一个可执行程序实施一系列缓冲区溢出攻击,即设法通 过造成缓冲区溢出来改变该可执行程序的运行内存映像 本实验的目的是加深对函数调用规则和堆栈结构的理解 设计 5Cache实验本实验通过一个Cache模拟器,利用Cache来优化一个矩阵 的转置以达到缺失率最小,从而分析cache对程序性能的 影响 设计 6性能优化实验本实验旨在让学生掌握测量程序执行时间的方法,并综合 利用循环展开、cache友好、替换变量等多种优化手段来 对两个函数进行代码优化,从而提升程序执行效率 选做 今天的主要内容 • 计算机系统漫游 – 硬件和软件的基本组成(1.4和1.8 ) – 程序的编码、编译和执行过程(1.1、1.2、1.3和1.4) – 计算机系统层次结构(1.5和1.6) – 操作系统(1.7) – 并行(1.9) 计算机系统基础—从程序员角度认识系统 • 目标: 培养学生的系统能力,使其成为一个“高效”程序员, 在程序调试、性能提升、程序移植和健壮性等方面成为高手 ;建立扎实的计算机系统概念,为后续的OS、编译、体系 结构等课程打下坚实基础 • 以 IA-32+Linux+C+gcc 为平台 • 主要内容:描述程序执行的底层机制 • 思路: 在程序与执行机制之间的建立关联,强化理解而不是记忆 课程内容概要 /*---sum.c---*/ int sum(int a[ ], unsigned len) { int i,sum = 0; for (i = 0; i ./hello hello, world 1.4.2 hello程序的执行 39 • 用户通过键盘输入hello命令,OS的shell外壳程序 创建hello进程 • hello程序被装入内存中,经调度后由CPU执行 • CPU – 依靠PC逐条指令执行,操作为围绕着 “寄存器 文件/ALU和主存” – 操作分为以下几类:加载/存储/运算/跳转 Hello程序的数据流动过程 “hello”HelloHello可执行文件可执行文件 Red:shell命令行处理 Blue:可执行文件加载 Cyan:hello程序执行过程 “hello” “hello,world/n” “hello,world/n” 所有过程都是在CPU执行指令所产生的控制信号的作用下进行的。
数据经常在各存储部件间传送故现代计算机大多采用“缓存”技术! Unix./hello hello, world unix [Enter] 41 用户键入hello命令 读入到shell程序的数据缓冲区 42 从磁盘加载hello可执行文件 hello程序的代码和数据(含 字符串“hello, world!”) 43 将字符串输出到显示器 1.5 & 1.6 存储设备的层次结构 44 1.5 高速缓存存储器(cache)的引入 – 问题: • CPU与主存、外设的速度差 – 处理器内部寄存器比主存快100倍; – 主存比磁盘快1000万倍; • CPU与主存、外设的容量差 – 处理器内部寄存器几十或几百字节,主存可以放几十亿字 节; – 磁盘容量可以比主存大1000倍; – 解决方法: • 插入中间一级存储器,速度和容量介乎两者之间,用于 保存常用数据 • 其工作原理建立在数据访问的“局部性”之上 45 高速缓存存储器 采用SRAM技术,速度接近于内部寄存器,容量介于寄存 器文件和主存之间; 可以形成多级结构,L1容量为几万字节(几KB~几十KB ),L2可以到几十万到几百万字节,还可以具有L3; 高速缓存存储器的利用情况不同,可能会引起性能上高 达一个数量级异常的差异 46 1.6 存储层次 – 将cache推广: 用户编程模型是 以进程的虚拟存 储为抽象中心, 主要对应于 DRAM; 主存和cache是 物理内存的概念 ,对软件透明; OS能看见虚存和 物理内存 1.7计算机系统中的OS 47 1.7.1 计算机系统的分层 • OS作用:1)防止硬件被失控的应用程序滥用;2) 向应用程序提供简单移植的接口来使用硬件。
• OS中的抽象:进程、虚拟内存和文件系统 48 1.7.2 进程 – 定义:操作系统对一个正在运行的程序的一种 抽象 • 是计算机系统中最重要的概念之一; • 一个系统上可以有多个进程并发执行; • 一个CPU上的进程可以交替执行——使用“上下文切 换”机制 (shell) (hello ) 上下文切 换的简单 示意: 49 1.7.3 线程 – 资源与调度的分离 – 一个进程可包含多个线程 • 这些线程共享进程空间,但各自有独立的线程控制 块和线程私有堆栈 – 创建线程的资源开销比进程小、切换比进程快 50 1.7.4 虚拟存储器 • 每个进程看到的是一个一 致的、虚拟的存储器—即 进程的虚拟地址空间 • 系统中有多个进程,因此 有多个独立虚拟地址空间 • 布局: – 程序代码和数据 – 堆 – 共享库 – 栈 – 内核虚拟空间 51 1.7.5 文件 – Unix中“万物皆文件” • IO系统在文件系统框架内 – 数据文件 • 字节序列,可以存储在磁盘上 – 特殊文件 • 设备文件 • 管道文件 • 其他 1.8 计算机系统间协作 52 1.8.1 网络接口 53 1.8.2 网络协议 – 应用层协议 – TCP/IP 1.9 并行技术 54 1.9.1 并发与并行 – 同时性simultaneity,多个事件同时在发生 – 并发concurrency,一段时间内的多个事件在活 动(可以是交织进行的) – 并行parallelism,包含同时性和并发性 55 1.9.2 不同层次的并行 – 线程级并发 • 单处理器系统上的多进程/ 多线程并发 • 多处理器上的并发 • 超线程(hyperthread)/ 同时多线程上的并发 – 普通核上的进程切换需要 20000个时钟周期 – 超线程处理器硬件线程切 换可以在单个周期完成 Intel Core i7多 核处理器 56 • 指令级并行 – 处理器可以同时执行多条指令的属性成为指令级并 行(ILP,Instruction Level Parallelism) – 流水 – 超标量(superscale)/多发射等技术 • 一个周期可以发送/完成一条以上指令 • 数据并行 – 处理器使用特殊硬件允许一条指令完成多个数据的 处理 – 称为单指令流多数据流SIMD 。
