系统是硬件和系统软件相互交织的集合体,必须共同协作以达到运行应用程序的最终目的

程序简介

// hello-world.cpp
#include<stdio.h>

int main()
{
    printf("hello world\n");
    return 0;
}

源程序是由0 / 1组成的位序列,1称为1比特,8位为一字节

ASCII码表示文本字符,每个字符用唯一的单字符大小的整数值表示

在这里插入图片描述

  • 文本文件:只由ASCII字符构成的文件
  • 其他为二进制文件

程序生命周期

高级c程序——低级机器语言指令(打包为可执行目标程序)

在这里插入图片描述

# 一条龙命令
gcc hello.c -o hello
输入后缀生成后缀命令类型转换
.c.igcc -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设备
虚拟内存程序存储器
进程正在运行的程序
虚拟机整个计算机,包括操作系统、处理器和程序

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部