计算机硬件

来源:互联网 发布:网络利大于弊的例子 编辑:程序博客网 时间:2024/05/18 18:21
计算机、软件与计算机语言(python)
  • 语言是用来沟通的介质。编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质
  • 软件必须运行在操作系统之上。离开操作系统去编程会严重影响开发的效率,操作系统的出现就是运行于硬件智商,来控制硬件的,我们开发时,只需要调用操作系统为我们提供的接口即可。

一套完整的计算机系统
  • 应用软件(QQ、暴风影音)
    • 控制操作系统(所以最终还是控制了底层硬件)
    • 遵循操作系统提供的标准
    • 最终都是交由底层硬件来运行
  • 操作系统(windows、linux)
    • 控制所有硬件
    • 操作系统本身也是一种软件
    • 如果没有操作系统,在编写应用软件的时候就需要同时写程序来让该软件能够控制对应的硬件,这样显得非常的麻烦和低效
  • 底层硬件(CPU、内存、硬盘)
 
计算机硬件
  • CPU、内存以及I/O设备都有一条系统总线(bus)连接起来并通过总线与其他设备通信
    • CPU是人的大脑,负责运算
    • 内存是人的记忆,负责临时传输
    • 硬盘是人的笔记本,负责用就存储
    • 输入设备是耳朵或眼睛,负责接受外部信息来传递给CPU
    • 输出设备是你的表情,负责输出经过处理后的结果
    • 以上所有设备都是通过总线连接,总线相当于人的神经
CPU
  • 算术运算和逻辑运算
  • 每个CPU都有一套可执行的专门指令集,任何软件的执行最终都要转化成CPU能识别的指令去执行,其中包含操作其他硬件的指令。
  • 应用被CPU执行的过程
    • 从存储介质中取出指令——>解码——>执行(周而复始,直至整个程序被执行完成)
  • 寄存器(最快的一种存储设备)
    • 访问内存并获取指令或数据所需要花费的事件远长于CPU执行命令花费的时间
    • 用来保存关键变量和临时数据
    • 存取速度和CPU几乎相同(与CPU相同材质制造,CPU访问他无时延)
    • 程序状态字寄存器PSW(真、假)
      • 包含了条码位(由比较指令设置)、CPU优先级、模式(见下面内核态和用户态),以及各种其他控制位
      • 系统调用中,程序状态字寄存器超级重要!
  • 内核态与用户态
    • 内核态——操作系统被CPU执行的状态、用户态——用户应用程序被CPU执行的状态
    • 内核态与用户态的区分?
      • 处于内核态的CPU执行的操作系统,能够操作硬件,可以回去CPU的所有指令集
      • 处于用户态的CPU执行的是用户软件的状态,不能操作硬件,可以获取CPU指令集的一个子集,该子集中不包括操作硬件的指令集。
    • 内核态与用户态之间的互换
      • 应用程序想要控制底层硬件,就需要将CPU所处的用户态转换成内核态,当应用程序操作完硬件之后,再切换回内核态来继续运行应用程序
      • 用户态下工作的软件不能操作硬件,但是有些软件比如暴风影音,一定会由操作硬件的需求,比如从磁盘上读取一个电影文件,那就必须经历从用户态切换到内核态的过程。因此,用户程序必须使用系统调用(system call ),系统调用会先入内核并调用操作系统,CPU的状态从用户态切换到内核态,并启用操作系统而会的服务。
  • CPU指令集中的指令可以分成两部分
    • 算术运算和逻辑运算指令
    • 操作其他计算机硬件的指令
    • 对于操作系统而言,其指令被CPU转换成操作其他硬件的指令;而对于用户的应用软件而言其指令被CPU转换成算数运算和逻辑运算这类计算指令。
  • 合理地CPU工作状态应该是取指令、解码、执行这些命令每个阶段互相不影响。
  • 多线程和多核芯片
    • 一个CPU中的处理逻辑增多,成为多线程。对用户来说每一个拥有两线程的CPU就相当于两个CPU(进程是资源单位,而县城才是CPU的执行单位)
    • 一个物理CPU中可以模拟出多个虚拟的CPU来工作
    • 一个计算机上可以同时有多个物理级别的CPU
  • 多核芯片
    • Intel多个物理CPU共享一个高速缓存,需要有一种更加复杂的缓存控制器来控制高速缓存中资源的分配 
    • AMD每一个物理CPU中各自拥有一个高速缓存,为L2高速缓存的一致性上存在了极大的困难,为数据共享创造了麻烦

存储器
  • 存储器读取速度,容量,价格三者是不可兼备的
  • 高速缓存
    • 高速缓存命中——当程序需要读取一个存储字时,高速缓存硬件会检查所需要的高速缓存行是否在告诉缓存中,如果是,那么就称为高速缓存命中
    • 缓存满足了请求后,就不需要通过总线把访问请求送往内存(主存)。
    • 只要存在打了资源可以被划分为小的部分,那么这些资源中某些部分肯定会比其他部分更频繁的被使用,此时缓存能够带来性能的提升

  • 内存RAM(又称为主存,易失性存储)
    • 断电后,保存的数据就消失了
    • 非易失性随机访问存储ROM
      • ROM只读存储器在工厂里就被变成完毕,再也不能修改(有些计算机的引导加载模块就存放在ROM中,也有些I/O卡采用ROM处理底层设备的控制)
      • EEPROM:电可擦除可变成ROM,可以擦除和重写,不过重写耗费时间长
      • 闪存:也可以擦除和重写,不过重写耗费时间长。通常作为存储媒介,闪存额u过擦除次数过多的话就被磨损了
    • 易失性存储器——CMOS
      • 耗电非常少
      • 大部分计算机用它来保存当前时间和日期
      • 由一块电池驱动,即使计算机没电,时间仍可以正确更新
      • 用来保存配置参数,比如计算机启动时,用来确定启动磁盘。
    • 虚拟内存机制
      • 可以使计算机运行大于其物理内存的程序
      • 将正在使用的数据放入内存去执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方就是虚拟内存
      • 这种机制的核心在于能够快速的隐射内存地址,它由CPU中的存储器管理单元负责。
  • 磁盘
    • 磁头:用于读写数据
    • 磁道:用于存放数据
    • 扇区:硬盘最小的读写单位(512字节)
    • 柱面:一个戈丁手臂位置上所有的磁道合起来就是一个柱面。
      • 两个相邻圆柱之间的空间就可以当作一个分区
    • 数据都存放于一段段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
      • 平均寻道时间:机械手臂从一个柱面随机移动到相邻柱面的时间就是寻道时间,找到了磁道就意味着磁头找到了数据所在的磁道,但是此时还无法确认数据具体在磁道上的扇区
      • 平均延迟时间:机械手臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间就是延迟时间
总线
  • 北桥(PCI桥)连接高速设备,包括L2高速缓存、CPU、主存储器(内存)
  • 南桥(ISA桥)连接慢速设备,包括SCSI/IDE硬盘、USB接口,图形适配器,声卡,打印机,调制解调器等


计算机的启动
  • 硬盘中,电脑启动时,最终操作系统的代码要给CPU去运行。也就是说,硬盘中操作系统的代码首先会加载到内存,CPU读取内存中操作系统的指令之后再执行。但是必须有一种机制明确的告诉计算机哪一个硬盘是启动盘,而这个机制就是BIOS程序(基本输出输出程序)。
  • BIOS就相当于一个系统操作系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O。BIOS回到它对应的存储设备CMOS存储器中去读取上次认为配置的启动盘位置,因此BIOS可以确定启动盘是那一块硬盘。
  • 启动过程
    1. 计算机加电
    2. BIOS开始运行,检测硬件:CPU、内存、硬盘
    3. BIOS读取CMOS存储器中的参数,选择启动设备(BIOS告诉启动硬盘在哪儿)
    4. 从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
    5. 根据MBR读入grub(一种bootloader)之后找到内核,将内核代码读入内存,之后CPU加载代码并运行,进而启动操作系统
    6. 操作系统询问BIOS,获取配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户安装设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核,然后初始有关的表格(如进程表),创建需要的进程,并在每一个终端上启动登陆程序或GUI
用户应用软件的启动
前提:应用程序运行在操作系统之上的
  1. 双击软件快捷方式,操作系统会按照快捷方式给出的路径去硬盘上找该目标文件。
  2. 由硬盘将该文件加载到内存当中,再被CPU调用、运行
  3. 软件向操作系统发出操作硬件的命令,使CPU状态从用户态切换到内核态,操作系统就帮软件去硬盘中寻找该文件,读取文件完毕之后,CPU的状态再由内核态切换到用户态,应用软件   再继续运行。