简述计算机组成

背景

计算机的构成,无外乎CPU,内存,硬盘之类的部件,本文并不是从硬件的角度来解读计算机,主要是我也不懂.所以关于各个部件的名称和分类不做过多的阐述,重点是为了后面写程序在计算机中的运行打个基础.

概述

主要介绍CPU,主存,磁盘,I/O总线,操作系统,他们在程序运行时如何协作和各自的作用.穿插着会介绍一些基本的概念.

1.总线

  • 总线的定义:贯穿整个系统的一组电子管道称为总线,它是CPU,内存,I/O设备互相传递信息的消息管道,主机的各个部件与总线相连从而形成了计算机系统.

  • 总线中的数据:总线中的数据单位是字(word),一个字(word)有多长通常与CPU的字长一致,现在大多数机器字长分为4个字节(32位)和8个字节(64位)

2. I/O设备

  • 包括键盘,鼠标,显示器,磁盘(主要说明这一类的设备,我不愿意用等等之类的词,太含糊,我不喜欢).每个I/O设备都通过控制器或者适配器与I/O总线相连.(控制器与适配器功能相同,不同的是控制器是芯片组,适配器是插在主板上的卡)

3. 主存

  • 主存就是内存,叫法不同而已.相对的就是辅助存储器(外存储器).内存是个临时存储设备,计算机一断电它里面的东西就没了,主要用来存储CPU执行的程序和程序处理的数据

  • 在物理上主存是由一组动态随机存储器(DRAM)芯片组成的.逻辑上的存储器是一个线性的字节数组,索引从零开始.

  • 上面说到CPU执行程序,再继续说CPU之前,我想先说说对于CPU来说程序是什么?

我们平时说的程序指的是源程序(源代码),它是由0和1组成的位序列(比特),8位一个字节,每个字节代表一个字符.大部分计算机使用ASCⅡ标准表示一个字符.其实系统中所有的信息包括磁盘,内存,网络传输的程序和数据都是一串比特表示的.那么怎么区分哪些是数据哪些是程序呢?答案是:上下文,只有上下文可以确定数据对象.

4. 处理器

  • 处理器是解释和执行内存中指令的引擎,它的核心是一个大小为一个字(word)的存储设备(或寄存器),称为程序计数器(PC)

  • 在任何时刻PC都指向内存中的某条指令机器语言指令的地址,从系统通电开始直到断电,处理器一直不断执行程序计数器指向的指令再更新程序计数器,使其指向下一条指令

  • 它的运行围绕着主存,寄存器文件(register file)和算术/逻辑单元(ALU)进行.

  • 寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成.每个寄存器都有唯一的名字.比如 ALU计算新的数据和地址值.

  • 举几个CPU的简单操作的例子

    加载:从主存复制一个字节或一个字到主存某个位置,以覆盖原值

    存储:从寄存器复制一个字节或一个字到主存某个位置,以覆盖原值

    操作:把两个寄存器的内容复制到ALU,ALU对着两个字做算术运算,并将结果存放到 一个寄存器中,以覆盖这个寄存器的原值

    跳转:从指令本身中抽取一个字,并将这个字复制到PC中,以覆盖原PC值.

  1. 加载:从主存复制一个字节或一个字到主存某个位置,以覆盖原值

  2. 存储:从寄存器复制一个字节或一个字到主存某个位置,以覆盖原值

  3. 操作:把两个寄存器的内容复制到奥ALU,ALU对着两个字做算术运算,并将结果存放到一个寄存器中,以覆盖这个寄存器的原值

  4. 跳转:从指令本身中抽取一个字,并将这个字复制到PC中,以覆盖原PC值.

5. 操作系统

操作系统的两个基本功能
  1. 防止硬件被失控的应用程序滥用

  2. 向应用程序提供简单一致的机制来控制复杂而又不太统一的低级硬件设备.

操作系统通过几个基本的抽象概念实现这两个功能

进程 ,虚拟内存,文件,虚拟机

  1. 文件是对I/O设备的抽象

  2. 虚拟内存是对主存和磁盘I/O设备的抽象

  3. 进程是对处理器,主存和I/O设备的抽象

  4. 虚拟机提供对整个计算机的抽象,包括操作系统,处理器和程序

进程
  • 进程是操作系统对一个正在运行的程序的一种抽象. 一个系统上可以同时运行多个进程,而每个进程好像都独占资源

  • 并发运行则是说两个进程的指令是交错执行的.

  • 从一个进程到另一个进程的转换时操作系统内核(kernel)管理的,内核是操作系统代码常驻主存的部分.

  • 内核不是一个独立的进程,他是系统管理全部进程所用代码和数据结构的集合,实现进程需要操作系统和硬件之间紧密合作.

  • 线程: 一个进程中可以有多个线程,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据.多线程比多进程更容易共享数据,线程一般比进程更高效.

虚拟内存
  • 虚拟内存为每个进程提供一个假象,即每个进程都在独占内存.每个进程看到的内存都是一致的,称为虚拟地址空间.

  • 每个进程看到虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能,从最低的开始逐步向上介绍.

  1. 程序代码和数据:

对所有的进程来说,代码是从同一固定地址开始的,紧接着的是和C全局变量相对应的数据位置,代码和数据区是直接按可执行目标文件的内容初始化的.

  1. 堆:
    代码和数据区后紧随着的是运行时堆.代码和数据区在进程一开始运行时就被指定了大小,于此不同,当调用向malloc和free这样的C标准库函数时,堆可以在运行时动态地扩展和收缩.
  2. 共享库:
    大约在地址空间的中间部分是一块用来存放像C标准库和数学库这样的共享库的代码和数据区域
  3. 栈:
    位于用户虚拟地址空间顶部的是用户栈,编辑器用它来实现函数调用.和堆一样用户栈可以在程序执行期间动态的扩展和收缩.每次我们调用一个函数时,栈就会增长;从一个函数返回时,栈就会收缩
  4. 内核虚拟内存

地址空间顶部的区域是为内核保留的,不允许用户程序读写这个区域的内存或直接调用内核代码定义的函数.

文件
  • 文件就是字节序列

结尾

最近开始读<深入理解计算机系统>,学到了很多,本文是对书中知识的梳理和归纳,只学了一点皮毛,很多概念还没有完全吃透,日后功力见长再来补充.

你可能感兴趣的:(简述计算机组成)