信息就是位+上下文
- 区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。
- 比如,在不同的上下文中,一个同样的字节可能表示一个整数、浮点数、字符串或者机器指令。
程序运行流程
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
-
图解
-
运行可执行文件
- shell程序等待输入
- 将命令读入寄存器,再把它放到内存中
- 敲击回车,shell程序知道我们已经结束了命令输入
- 将代码从磁盘复制到主存
- 通过图形适配器显示’hello, world\n’
高速缓存
-
读取速度
寄存器 >> 主存 >> 磁盘
-
针对读取差异,高速缓存存储器应运而生
访问速度几乎与寄存器一样,主要缓存常用信息,避免每次都从主存中取
操作系统管理硬件
操作系统两个基本功能:
- 防止硬件被失控的应用程序乱用
- 想应用程序提供简单一致的机制来控制复杂而又大不相同的硬件设备
进程
-
定义
进程是对一种正在运行的程序的抽象。
线程
-
与进程的关系
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中。
-
重要性
多线程之间比多进程之间更容易共享数据,线程一般来说都比进程更高效。
虚拟内存
这是一个抽象概念,它为每个进程提供了一个家乡,即每个进程都在独占地使用主存。在Linux中,地址空间最上面的区域是保留给操作系统中的代码和数据的,为所有进程公用,对用户不透明,地址空间的底部区域存放用户进程定义的代码和数据。
Ammdahl 定律
若系统执行某应用程序需要的时间为 Told ,假设系统某部分所需执行时间与该时间的比例为α,二改部分性能提升比例为k,即该部分初始所需时间为 αTold ,现在所需时间为 (αTold)/k,因此,总的执行时间为:
Tnew = (1-α) Told + ((αTold)/k) = Told[(1-α) + α/k]
由此,可以计算加速比为 S = Told / Tnew
1 ( 1 − α ) + α / k \frac{1}{ (1-α) + α/k } (1−α)+α/k1
并发和并行
-
并发
一个同时具有多个活动的系统
-
并行
用并发来使一个系统运行得更快
并行可以在计算机系统的多个抽象层次上运用
- 线程级并发
- 指令集并发
- 单指令、多数据并行