计算机系统漫游

1、并发和并行
并发:指一个同时具有多个活动的系统
并行:指的是用并发来使一个系统运行的更快。

2、计算机三个层次实现并发和并行
(1)线程级并发
(2)指令级并行
通过借助于流水线(pipelining)技术,将执行一个指令所需要的活动划分为不同的步骤,将处理器的硬件组织成一系列的阶段,每一个阶段执行一个步骤,这些阶段可以并性地操作。
(3)单指令、多数据并行
允许一条指令产生多个可以并行执行的操作
3、抽象概念很核心
抽象使人不需要关注计算机底层的硬件和操作系统的复杂性。文件是对IO设备的抽象表示,虚拟内存是对主存和磁盘IO设备的抽象表示,进程是对处理器、主存和IO设备的抽象表示。
4、局部性原理
包括时间局部性和空间局部性,如果写的代码能够符合局部性原理,则执行效率也能提升不少,下面给一个体现空间局部性的例子。

写代码的时候,很多时候优化措施就是利用了局部性原理,只是没有明确地用这个概念来说,比如加缓存就是利用了局部性原理。

public class SolutionTest {

    public static void main(String[] args) {
        int size = 10000;
        int[][] arr = new int[size][size];

        int sum = 0;
        long start = System.currentTimeMillis();
        for(int i = 0; i < size; i++) {
            for(int j = 0; j < size; j++) {
                sum += arr[i][j];
            }
        }
        // 按行遍历二维数组花费110ms
        System.out.println((System.currentTimeMillis() - start));

        sum = 0;
        start = System.currentTimeMillis();
        for(int i = 0; i < size; i++) {
            for(int j = 0; j < size; j++) {
                sum += arr[j][i];
            }
        }
        // 按列遍历花费实现2100ms
        System.out.println((System.currentTimeMillis() - start));
    }

}

手动跑上面的程序,可见按行遍历的时间明显比按列遍历花费的时间少的多。因为对于多维数组,在内存中数组是按行顺序存储的,按行遍历明显符合空间局部性。

5、随机访问存储器
(1)SRAM(静态随机访问存储器)
常用与计算机的高速缓存部分,是非易失性的存储器,只要有点,它就会永远保持它的值。
(2)DRAM(动态随机访问存储器)
易失性,数据需要周期性的通过读出,重写来刷新内存的每一位,SRAM单元比DRA单元需要更多的晶体管。
(3)增强型的DRAM

  • 快页模式DRAM(Fast Page Mode DRAM,FPM DRAM)
    对同一行的连续访问可以直接从行缓存区得到服务
  • 扩展数据输出DRAM(Extended Data Out DRAM, EDO DRAM)
    和FPM DRAM类似,只是让CAS信号在时间上更紧密些
  • 同步DRAM(Synchronous DRAM, SDRAM)
  • 双倍数据速率同步DRAM(Double Data-Rate Synchronous DRAM, DDR SDRAM)
    是对SDRAM的一种增强,通过使用两个时钟沿作为控制信号,从而使DRAM的速度翻倍,后面还有DDR、DDR2、DDR3、DDR4等(用提高有效带宽的很小的预取缓存区的大小来划分的)。

6、磁盘存储
(1)磁盘构造

  • 盘片
  • 表面(每个盘片有两个表面)
  • 磁道(每个表面上有非常多的磁道)
  • 扇区(每个磁道又可以划分为非常多的扇区)

每个磁道上的扇区数是相同的,而每个扇区数存放的位数也是相同的,这样计算总的存储非常方便