系统是硬件和系统软件相互交织的集合体,必须共同协作以达到运行应用程序的最终目的
程序简介
cpp
// hello-world.cpp
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
源程序是由0 / 1组成的位序列
,1位
称为1比特
,8位为一字节
ASCII码表示文本字符,每个字符用唯一的单字符大小的整数值表示
文本文件
:只由ASCII字符构成的文件- 其他为二进制文件
程序生命周期
高级c程序------低级机器语言指令(打包为可执行目标程序)
bash
# 一条龙命令
gcc hello.c -o hello
输入后缀 | 生成后缀 | 命令 | 类型转换 |
---|---|---|---|
.c | .i | gcc -E test.c -o test.i |
预处理器cpp 文本------>文本 |
.i | .s 汇编代码 |
gcc -S test.i -o test.s |
编译器ccl 文本------>文本 |
.s | .o obj文件 |
gcc -c test.s -o test.o |
汇编器as 文本------>二进制 |
.o | 可执行目标程序 | gcc test.o -o test | 链接器ld 二进制------>二进制 |
.c | 可执行目标程序 (含调试信息) 默认名a.out |
gcc -g test.c | 生成含调试信息的可执行文件 |
预处理
编译
汇编
链接
GNU项目(现代开放源码运动 ---- free software)是一个免税的慈善项目,目标为开发一个完整的类Unix操作系统;GNU环境包括EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器等工具,GCC编译器发展到可以支持多种不同的语言;Linux内核由Linux项目独立发展而来
编译系统
不同C 语言 翻译为 机器语言的形式不同,优化程序性能
系统硬件组成
- 总线 :贯穿系统的一组电子管道,传送定长的字节块(字
word
),字长一般为4字节32位
/8字节64位
- I/O设备 :系统与外部的联系通道,键盘、鼠标、显示器、用于存储的磁盘驱动器等;每个
I/O设备
通过控制器(主板芯片组)或适配器(插在主板插槽上的卡)
与I/O总线
相连 - 主存 :由一组
动态随机存取存储器(DRAM)芯片
组成,临时存储程序和数据
的设备;类比于线性字节数组,每个字节都有唯一的索引地址(从0开始)
- 处理器 : 中央处理单元CPU,
解释存储在主存中指令
的引擎;核心 :程序计数器PC
、大小为一个字的寄存器,指向主存中下一条
机器指令;CPU从PC指向的内存处读取指令,解释指令,执行操作,再更新PC,指向下一条指令
高速缓存
磁盘------主存------CPU 程序执行
------显示器
读取速度:寄存器>主存>磁盘
高速缓存存储器cache memory
存放经常访问的数据,处理大部分的内存操作:用静态随机访问存储器SRAM
硬件技术实现
存储器层次
操作系统
管理硬件
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂、大不相同的低级硬件设备
提供三个基本的抽象 :进程、虚拟内存、文件
进程
多个指令交错执行,上下文切换=>单处理器(单核)系统
;内核是系统管理全部进程所用代码和数据结构的集合
一个进程由多个线程组成,每个线程都运行在进程上下文中,共享同样的代码和全局数据=>更高效的多线程编程模型
虚拟内存
一个进程
=>一个虚拟地址空间(由大量标准定义且功能不同的区构成)
;进程虚拟内存的内容存储在磁盘上,用主存作为磁盘的高速缓存;地址从下往上增大
堆、用户栈:动态地扩展和收缩;编译器用栈
实现函数调用,调用=>栈增长,返回=>栈收缩
文件
字节序列;所有输入输出都通过系统函数Unix I/O
调用 读写文件
来实现;每个I/O设备(磁盘、键盘、显示器、网络)
都可以看成文件
系统间网络通信
系统从主存复制一串字节到网络适配器,数据流经过网络到达另一台机器
Amdahl定律
加速系统某部分
对整体性能的影响取决于该部分的重要性和加速程度
要想显著加速整个系统,必须提升全系统中相当大部分的速度
;k取极大值(某部分性能提升极致)
时,S=1/(1-a)
代表部分的系统占比
并发和并行
线程级并发
单处理器系统
:多个进程间快速切换=>模拟并发(耗时较多)
多处理器系统
:至少含有两个处理器的计算机系统
多核处理器
:多个CPU(处理器/核)
集成到一张集成电路芯片
超线程(同时多线程)
:允许一个CPU执行多个控制流
指令级并行
较低的抽象层次
流水线pipelining
:划分一条指令执行活动为不同的步骤
,每个阶段执行一个步骤,阶段可以并行操作,用来处理不同指令的不同部分
超标量(super-scalar)处理器
:执行效率 > 一个时钟周期一条指令
单指令、多数据并行
SIMD并行
单指令、多数据 :
最低抽象层次,处理器的特殊硬件,允许一个指令产生多个可以并发执行的操作 => 提高处理影像、声音和视频数据应用的执行速度
编译器支持的 特殊的向量数据类型
编写程序也可做到SIMD并行性
抽象
抽象概念 | 原型 |
---|---|
文件 | I/O设备 |
虚拟内存 | 程序存储器 |
进程 | 正在运行的程序 |
虚拟机 | 整个计算机,包括操作系统、处理器和程序 |