zoukankan      html  css  js  c++  java
  • 计算机基础

    一、编程语言的作用及与操作系统和硬件的关系

          编程语言就和我们人与人之间交流所用到的语音一样,是一门语言,只不过它是用于人与计算机交流的语言,比如:C,C++,C#,JAVA,Python等等都是编程语言。它的作用大多数是程序员用于编写程序,也就是我们所用到的软件。而我们程序员所编写的软件是必须运行在操作系统之上的,操作系统呢,就是用来控制计算机硬件的。所以说我们要学好一门编程语言,就要首先要学习计算机的硬件,然后是操作系统,最后就是python这门语言了。

    二、计算机硬件发展史

          http://www.cnblogs.com/linhaifeng/p/6428430.html

    三、计算机的组成

         计算机是由硬件系统和软件系统两大部分组成的。

         硬件系统主要有五大部分组成:运算器、控制器、存储器、输入设备、输出设备。

         运算器:是负责算术运算与逻辑运算。与控制器共同组成了中央处理器(CPU)。

         控制器:是负责发送和接收指令。

         存储器:是用来存储正在进行程序、将要进行程序的数据及刚处理完的数据。

         输入设备:是用来进行输入的设备。如键盘,扫描仪等。

         输出设备:是用来进行输出的设备。如显示器,音箱等。

         主板:主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。

         BIOS是英文"Basic Input Output System"的缩略语,即"基本输入输出系统"。是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

         I/O控制芯片:负责提供串行、并行接口及软盘驱动器控制接口。

    3.1  硬件和软件与用户的关系

          硬件是基础,硬件通过系统软件控制来启动硬件,并让各个硬件之间相互协同工作,在系统软件的基础上是用户,用户操纵的是操作系统,并在系统软件的基础上安装相应的应用软件,来完成用户所需的工作。所以说最底层的是硬件,硬件上是系统软件,系统软件上一层是应用软件,而最上层的是用户。

    3.2 操作系统

          操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口,功能包括管理计算机系统的硬件,软件及数据资源,控制程序运行,改善人机界面,为其他应用软件提供支持,为其他软件的开发提供必要的服务和相应的接口等。实际上,用户不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如划分CPU时间,内存空间的开辟,调用打印机等。

    3.3 计算机硬件介绍

          大致来讲,计算机可以抽象为CPU、内存以及I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信,如下图:

    (1)CPU:计算机的大脑

          CPU的作用就是从内存中取指令->解码->执行,然后再从内存里面取指->解码->执行,这样不断循环操作直到程序执行完成为止。在这期间,CPU访问内存的得到数据或者指令的时间要比执行的时间要长,所以,就需要一个地方来存储临时数据和关键变量,那就是寄存器

    寄存器的分类:

          1.通用寄存器:保持临时变量和运算结果

          2.程序计数器:它保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令。

          3.堆栈指针寄存器:它指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量

          4.程序状态字寄存器:这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要

    寄存器的维护:

      操作系统必须知晓所有的寄存器。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。

    处理器设计的演变:

          1.最开始取值、解码、执行这三个过程是同时进行的,这意味着任何一个过程完成都需要等待其余两个过程执行完毕,时间浪费

          2.后来被设计成了流水线式的设计,即执行指令n时,可以对指令n+1解码,并且可以读取指令n+2,完全是一套流水线。

          3.超变量cpu,比流水线更加先进,有多个执行单元,可以同时负责不同的事情,比如看片的同时,听歌,打游戏。

    两个或更多的指令被同时取出、解码并装入一个保持缓冲区中,直至它们都执行完毕。只有有一个执行单元空闲,就检查保持缓冲区是否还有可处理的指令

          这种设计存在一种缺陷,即程序的指令经常不按照顺序执行,在多数情况下,硬件负责保证这种运算结果与顺序执行的指令时的结果相同。

    内核态和用户态:

          一般在PSW中有一个二进制位控制CPU的两种用户模式,那就是内核态和用户态。

          内核态:当CPU以内核态运行时,CPU可执行包含的所有的指令集,包括那些可以操作硬件的指令集,我们的操作系统是运行在内核态的,所以可以操作我们的硬件;

          用户态:我们的应用软件是运行在用户态下的,用户态下的CPU只能运行全部指令集内的部分子集,这部分子集不含操作硬件的功能,所以,一般情况下,在用户态下I/O和内存是保护的,因为操作系统的内存是受保护的,不能被占用的,并且,用户态下,PSW设置成内核态也是禁止的。

    内核态和用户态的切换:

          我们上面已经了解到,用户态下工作的应用软件是不能直接操作硬件的,比如我们想用网易云音乐听歌,那CPU就必须经历用户态切换到内核态的过程,这就需要用到系统调用(system call)了,系统调用陷入内核并调用我们的操作系统,通过TRAP指令将内核状态进行切换,从而通过操作系统来获得我们想要的功能和服务。请把的系统调用看成一个特别的的过程调用指令就可以了,该指令具有从用户态切换到内核态的特别能力。

    多线程和多核芯片

          根据Moore定律,芯片中的晶体管数量每经历18个月就会增加一倍,所以,我们用的CPU不断的在更新强大中:

          1、第一步的增强就是在CPU芯片中加入了更大的缓存L1,他是用和CPU相同的的材质制成的,所以执行过程中并没有延时(后来又出现了二级缓存L2,三级缓存L3);

          2、第二步的增强就是Intel公司发明了多线程和超线程,使得CPU执行任务时能够同时执行多个任务,对用户来说也就相当于多个CPU来执行多个任务,这样CPU执行任务的效率有很大一步的提升,但是本质上其实是多个线程执行时,在执行过程中是用极短的时间来相互切换任务执行的,对于用户来说用肉眼是无法分辨的,所以多线程并不是真正的多个任务来并行处理。

          3、第三步的增强就是出现了2个或者4个或者8个核心的处理器的芯片,如下图:

    (2)存储器:计算机的记忆方式

         存储器系统采用如上图的分层结构,顶层的存储器速度较高,容量较小,与底层的存储器相比每位的成本较高,其差别往往是十亿数量级的

        寄存器:L1缓存,用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种情况下容量均<1KB。

       高速缓存:L2缓存,主要由硬件控制高速缓存的存取,内存中有高速缓存行按照0~64字节为行0,64~127为行1。。。最常用的高速缓存行放置在cpu内部或者非常接近cpu的高速缓存中。当某个程序需要读一个存储字时,高速缓存硬件检查所需要的高速缓存行是否在高速缓存中。如果是,则称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存(内存),这毕竟是慢的。高速缓存的命中通常需要两个时钟周期。高速缓存为命中,就必须访问内存,这需要付出大量的时间代价。由于高速缓存价格昂贵,所以其大小有限,有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢但是容量大。

         随机存储器(RAM):我们通常说的内存就是RAM,具体分类这里不一一列举,也就是我们通常说的DDR1代、DDR2代、DDR3代的1G/2G/4G/8G内存,现在已经到了DDR4代的产品随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。如下图:
    EEPROM与闪存
          EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,存储器技术的成熟使得RAM和ROM之间的界限变得很模糊,如今有一些类型的存储器(如EEPROM和闪存)组合了两者的特性。这些器件像RAM一样进行读写,并像ROM一样在断电时保持数据,它们都可电擦除且可编程,但各自有它们优缺点。
          从软件角度看,独立的EEPROM和闪存器件是类似的,两者主要差别是EEPROM器件可以逐字节地修改,而闪存器件只支持扇区擦除以及对被擦除单元的字、页或扇区进行编程。对闪存的重新编程还需要使用SRAM,因此它要求更长的时间内有更多的器件在工作,从而需要消耗更多的电池能量。设计工程师也必须确认在修改数据时有足够容量的SRAM可用。
          存储器密度是决定选择串行EEPROM或者闪存的另一个因素。市场上可用的独立串行EEPROM器件的容量在128KB或以下,独立闪存器件的容量在32KB或以上。
    如果把多个器件级联在一起,可以用串行EEPROM实现高于128KB的容量。很高的擦除/写入耐久性要求促使设计工程师选择EEPROM,因为典型的串行EEPROM可擦除/写入100万次。闪存一般可擦除/写入1万次,只有少数几种器件能达到10万次。
    只读存储器(ROM)
          ROM表示只读存储器(Read Only Memory),在制造ROM的时候,信息(数据或程序)就被存入并永久保存,所以它是非易失性的。这些信息只能读出,一般不能写入,即使机器停电,这些数据也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。其物理外形一般是双列直插式(DIP)的集成块。
          BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
          CMOS因为它是易失性的所以需要一个电池来长久存储BIOS里面的设置信息的,比如计算机的时间和日期

    (3)磁盘

          在图中我们可以看到,硬盘内部是有好多盘面被一个转轴为同心圆连接起来的,由转轴来转动,然后磁臂的摆动,磁头在盘面不停的读写数据,就因为这样的构造,所以他的读写速度是有瓶颈的,一般读写速度都是依据他转轴的转速,我们目前一般的家用台式机或笔记本用的硬盘转速都是5400rpm或者7200rpm(RPM =revolutions per minute 每分钟多少转 ),只有服务器上面用的硬盘是比较高端的转速能达到10000rpm以上。

          机械硬盘存储数据一般是分扇区存储的这是他的物理属性,一个扇区是512Bytes,在Windows中一般是按照扇区存储数据,在Linux中是按照block块为单位存储数据的,1个block块=8个扇区=8*512Bytes=4kB。

          我们在存储设备是以2进制为基础的单位为bit,数据大小的统计单位是这样换算的,8个bit称为一个字节1bytes,1024bytes=1kB,1024KB=1MB,1024MB=1GB,1024GB=1TB。。。

          数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间

    平均寻道时间:

          机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置

    平均延迟时间:
          机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间
    虚拟内存:
          许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)
          PS:从一个程序切换到另外一个程序,成为上下文切换(context switch),缓存和MMU的出现提升了系统的性能,尤其是上下文切换
          MMU:是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。
    (4)磁带
          在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。
    (5)I/O设备

          CPU和存储器并不是操作系统唯一需要管理的资源,I/O设备也是非常重要的一环。I/O设备一般包括两个部分:设备控制器和设备本身。

          控制器:控制器负责控制连接的设备,它从操作系统接收命令,然后就对设备发起读请求。

          控制器的功能:为操作系统提供一个接口。

          设备本身:有相对简单的且标准的接口,这样大家都可以为其编写驱动程序了。

          要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。

    (6)总线:连接计算机各个组件的主线

          北桥即PCI桥:连接高速设备

          南桥即ISA桥:连接慢速设备

    四、计算机启动流程

          1.计算机加电

          2.BIOS开始运行,检测硬件:cpu、内存、硬盘等

          3.BIOS读取CMOS存储器中的参数,选择启动设备

          4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)

          5.根据分区信息读入bootloader启动装载模块,启动操作系统

          6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI

     五、软件的启动流程

          点击应用程序(软件)→软件将数据写入内存→CPU从内存中读取数据并执行然后返回内存→启动软件

  • 相关阅读:
    scrapy 模块功能流程--转
    CP三次握手和四次分手--转
    获取免费IP--代码--转
    爬虫介绍+Jupyter Notebook--转
    In Ubuntu, How to install Chinese Pinyin with Fcitx?
    对json文件进行简单读写操作
    ubuntu 中wget (下载)命令用法
    如何更改Ubuntu 16.04 默认Python版本方法
    如何将本地文件上传通过命令行命令上传到远程服务器上
    Ubuntu上,如何成功的安装pygrib
  • 原文地址:https://www.cnblogs.com/gpd-Amos/p/7716366.html
Copyright © 2011-2022 走看看