计算机系统结构的总体概述

我们(程序员)天天都在用计算器编写代码,但你了解计算机的整体架构和各个组件是如何相互配合来完成数据的录入,数据的流转,指令的执行,结果的输出吗?

我在学校期间和实习阶段对这些问题都有过系统的学习,但那时的关注点是,只知道有什么.工作后,在日常的工作中对这些计算机组件有了更深入的认识.

因此,现在抽时间把以前的知识点梳理下,并把自己的一些理解写下来.供自己备忘和有兴趣的同学一起探讨.

一 计算机系统的总体架构

我们从一张图开始吧,如下: 

计算机系统结构的总体概述_第1张图片

 <图1>

上图中有几个重要的概念.

1.1  总线

什么是总线?

总线是贯穿整个系统的电子管道

总线的传输单元是什么,大小是多大?

总线一般传送定长的字节块,也就是字(word). 字长大多数系统是4个字节(32位),有的是8个字节(64)位

总线在这计算机系统的重要性不言而喻, CPU在计算的过程中随时随地都在通过总线传递数据到其它部件.

1.2  IO设备

每个IO设备通过一个控制器或适配器与IO总线连接,接入整个计算机系统. 

可以把I/O设备(磁盘,键盘,显示器,网络)都可以视为文件. 


1.3  主存

通常说的内存. 程序运行过程中绝大多数的数据都存放在主存中,当计算需要用到某一部分数据时,通过总线把这部分数据从主存加载到寄存器,通过CPU运算得到结果后,再存储到主存.

主存在物理上是一组"动态随机存取存储器(DRAM)芯片组成",逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址,地址从0开始.


1.4 处理器

CPU(中央处理器),解释执行存储在主存指令的引擎. 

PC(程序计数器), 一个字长的存储设备. 任意时刻,PC都指向主存中的某条机器指令(指令的地址)


二 存储设备

图1中还有个重要的组件没列出来. cpu的高速缓存.

高速缓存在复制数据的过程中至关重要,现代CPU一般都有三级高速缓存.

cpu的寄存器,三级高速缓存,主存,磁盘,远程二级存储等一系列存储组件组成了计算机系统的一个存储层次结构.

为什么要设计成层次结构呢?

因为计算机把大量的时间用于存储器,I/O设备和CPU寄存器之间复制数据. 把存储设备划分为上述层次结构,高层比底层设备快,较高层次作为较低层次设备的高速缓存,有利于快速传递数据.

这个层次结构如下图所示

计算机系统结构的总体概述_第2张图片

很多人应该看过这张图. 

从下到上,他们有几个特点: 

1,  cpu从他们那拿数据的速度越来越快.

2,  存储容量越来越小,成本越来越贵.

cpu从各个存储组件拿数据的速度大致有如下数量级关系(读一个字为例).

1).  主存比磁盘快1000万倍.

2).  寄存器比主存快100倍.

3).  L2比L1的速度快5倍.

可以看出,主要的差距还是在主存和磁盘之间. L1,L2,L3和主存之间的差距,相对于磁盘读写数据就快很多. 



三 计算机中信息的表示

深入理解计算机体系一书中,把信息的概念归纳为:  信息就是位+上下文.

系统中所有的信息,包括磁盘文件,存储器中的程序,存储器中存放的用户数据,网络上传输的数据,都是由一串位表示的.
区分不同数据对象的唯一方法就是读取对象时的上下文. 不同上下文中,一个相同的字节序列可能表示整数,浮点数,字符串或者机器指令.

比如有个文件abc.txt, 内容是: "hello world" 

那么上述文件在计算机中是如何表示和存储的呢?

首先abc.txt是一个文件,在计算机中,文件就是字节序列. 所有的I/O设备(磁盘,键盘,显示器,网络)都可以视为文件. 系统中的所有输入输出都可以通过系统函数调用读写文件来实现. 

大部分的现代系统都用ASCII来表示文本字符,用一个字节大小表示一个字符. 0和1组成的位,8个位被组织成一组,成为字节.

上述abc.txt的存储结果如下:

  h           e           l          l          o        ,           w        o          r           l             d         

104      101      108     108    111    44     119     111     114      108      100    




四 虚拟存储器

虚拟存储器是一个抽象的概念,它为每个进程提供了一个假象,每个进程都在独占的使用主存. 每个进程看到的是一致的存储器,称为 虚拟地址空间. 
如下图所示: 
计算机系统结构的总体概述_第3张图片



4.1  程序代码和数据

代码和数据区是直接按照可执行目标文件的内容初始化加载进来的.
在进程一开始的时候就被规定了大小.

4.2 堆

堆在运行时可动态的扩展和收缩. 通过malloc/free这样的C标准库函数,可以收放自如. java中是new和gc动态收集.

4.3 共享库

标准库和数学库这样的共享库的代码和数据区域.

4.4 栈

函数调用时会用到. java的局部变量也在栈中存储.用户栈也可以动态收缩和扩张.

4.5 内核虚拟存储器

内核是操作系统的一部分,总是驻留在内存中.


五 进程和线程

什么是进程?  进程是操作系统对一个正在运行的程序的一种抽象.

多个进程看上去像是在并行执行,操作系统实现这种交错执行的机制成为 "上下文" 切换.

什么上下文? 操作系统保持跟踪进程运行所需的所有状态信息.

上下文具体包含的内容: PC和寄存器文件的当前值,以及主存的内容.

进程由多个线程的执行单元组成,每个线程运行在进程的上下文中,共享同样的代码和全局数据.

线程优点: 

                  1, 线程间比进程间更容易共享数据. 
 2, 线程一般比进程更高效.
 3, 有多处理器的时,线程是一种使程序运行更快的方法.


六 抽象

抽象是计算机科学中最为重要的一个概念之一.

操作系统的抽象:
1, 文件是对I/O的抽象.
2, 虚拟存储器是对程序存储器的抽象.
3, 进程是对一个正在运行的程序的抽象.
4, 虚拟机是对整个计算器(包括操作系统,处理器和程序)的抽象.



七 总结

1, 文件是对IO的抽象,所有的IO操作都可以看做文件的读写.

                                        2, 运行的程序在计算机中用进程来抽象.

                                        3, 计算机体系结构中,存储设备被分层设计和管理.

                                        4,  计算机用位和上下文来表示任何在计算机中存储的信息.


注: 本博客中的图都来自 <深入理解计算机系统> randal E. Bryant David R.O'Hallaron 第二版

你可能感兴趣的:(计算机基础,计算机体系结构,文件表示方式)