一 为什么要学习计算机基础
python是编程语言,即python是语言python
语言有英语、法语、葡萄牙语等,但凡是语言,都是用来沟通的介质。mysql
程序员编程的本质就是让计算机去工做,而编程语言就是程序员与计算机沟通的介质linux
程序员要想让计算机工做,必须知道计算机能干什么,怎么干的,这也就是咱们必须学习计算机基础的缘由git
然而光有编程语言和硬件也并不能知足你们的编程需求,为何这么说呢?程序员
程序用编程语言写程序,最终开发出的结果就是一个软件,既然是软件,那就与腾讯qq、暴风影音、快播等软件没有区别了。这些软件必须运行在操做系统之上,你确定会问:为什么要有操做系统呢?没错,远古时代的程序员确实是在没有操做系统的环境下,用编程语言之间操做硬件来编程的,你可能以为这没有问题,但其实问题是至关严重的,由于此时你必须掌握如何操做硬件的全部具体细节,好比如何具体操做硬盘(如今你得把硬盘拆开,而后你能看见的全部的东西,你都得研究明白,由于你编程时要用到它),这就严重影响了开发的效率,操做系统的出现就是运行于硬件之上,来控制硬件的,咱们开发时,只须要调用操做系统为咱们提供的简单而优雅的接口就能够了web
因此一套完整的计算机系统分为:计算机硬件,操做系统,应用软件,以下图。于是咱们的python编程之路分为计算机硬件基础,操做系统基础,和python编程三部分,就让咱们先从计算机硬件学起吧sql
二 本节目标
- 了解计算机各组件及工做原理
- 了解计算机启动流程
三 计算机硬件发展史
http://www.cnblogs.com/linhaifeng/p/6428430.html数据库
四:计算机硬件介绍
计算机硬件有五大部分:(计算机是人的奴隶,能够将其看成一我的去看,请思考下述组件等同于人的哪些器官)编程
#一、控制器:计算机的指挥系统。控制器经过地址访问存储器,从存储器中取出指令,经译码器分析后,根据指令分析结果产生相应的操做控制信号做用于其余部件,使得各部件在控制器控制下有条不紊地协调工做。 #二、运算器:实现算术运算和逻辑运算的部件。 #三、存储器:是计算机用来存放全部数据和程序的记忆部件。它的基本功能是按指定的地址存(写)入或者取(读)出信息。 计算机中的存储器可分红两大类:一类是内存储器,简称内存或主存;另外一类是外存储器(辅助存储器),简称外存或辅存。 存储器由若干个存储单元组成,每一个存储单元都有一个地址,计算机经过地址对存储单元进行读写。一个存储器所包含的字节数称为存储容量,单位有B、KB、MB、GB、TB等。 #四、输入设备:是向计算机中输入信息(程序、数据、声音、文字、图形、图像等)的设备。常见的输入设备有:键盘、鼠标、图形扫描仪、触摸屏、条形码输入器、光笔等。 外存储器也是一种输入设备。 #五、输出设备:主要有显示器、打印机和绘图仪等。外存储器也看成一种输出设备。
控制器+运算器=CPU,CPU、内存(主存储器)以及其余I/O设备都由一条系统总线(bus)链接起来并经过总线与其余设备通讯
现代计算机的结构更复杂,包括多重总线,咱们将在后面的小节介绍,此时暂且让咱们如下图为例来介绍各个部件
cpu是人的大脑,负责控制全身和运算
内存是人的记忆,负责临时存储
硬盘是人的笔记本,负责永久存储
输入设备是耳朵或眼睛或嘴巴,负责接收外部的信息存入内存
输出设备是你的脸部(表情)或者屁股,负责通过处理后输出的结果
以上全部的设备都经过总线链接,总线至关于人的神经
上课开始,老师讲课,学生听课,老师是程序员,学生是计算机,学生的器官都是计算机各部分组成
1.你经过耳朵接收老师讲的知识->输入
2.经过本身的神经,将接收的数据存入本身的内存/短时间记忆(总线、内存)
3.光听不行,你还须要反应/处理老师讲的知识,因而你的大脑/cpu从短时间记忆里取出知识/指令,分析知识/指令,而后学习知识/执行指令 (cpu取指、分析、执行)
4.你经过做业或者说话输出你学到的结果
5.你想要永久将知识保存下来,只能拿出一个笔记本,把刚刚学会的知识都写到本子上,这个本子就是硬盘(磁盘)
4.1 处理器
一般将运算器和控制器合称为中央处理器(Central Processing Unit,CPU)。其中运算器用来主要负责程序运算与逻辑判断,控制器则主要协调各组件和各单元的工做,因此CPU的工做主要在于管理和运算。能够说计算机的大脑就是CPU,它从内存中取指令->解码->执行,而后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。
既然CPU的重点在于进行运算和判断,那么要被运算与判断的数据是从哪里来的?CPU读取的数据都是从主存储器(内存)来的!主存储器内的数据则是从输入单元所传输进来!而CPU处理完毕的数据也必须先写回主存储器中,最后数据才从主存储器传输到输出单元。
综合上面所说的,咱们会知道其实计算机是由:输入单元、输出单元、CPU(控制单元、算术逻辑单元)与主存储器五大单元构成的。也能够说CPU+输入输出+主存储器构成了电子计算机的三大核心组件,相关性以下图:
在超大规模集成电路构成的微型计算机中,每每将CPU制成一块具备特定功能的芯片,称为微处理器,芯片里边有编写好的微指令集,咱们在主机上的全部操做或者说任何软件的执行最终都要转化成cpu的指令去执行,如输入输出,阅读,视频,上网等这些都要参考CPU是否内置有相关微指令集才行。若是没有那么CPU没法处理这些操做。不一样的CPU指令集不一样对应的功能也不一样,这就比如不一样的人脑,对于大多数人类来讲,人脑的结构同样,可是你们的智商都有差异。
那么目前世界上的主流CPU由那些呢?咱们笔记本上贴的Intel、AMD是怎么回事呢?下面咱们来认识一下;

#一、CPU的分类 咱们已经知道CPU内部是含有微指令集的,咱们所使用的的软件都要通过CPU内部的微指令集来完成才行。这些指令集的设计主要又被分为两种设计理念,这就是目前世界上常见到的两种主要的CPU种类:分别是精简指令集(RISC)与复杂指令集(CISC)系统。下面咱们就来谈谈这两种不一样CPU种类的差别! #1.一、精简指令集 精简指令集(Reduced Instruction Set Computing,RISC):这种CPU的设计中,微指令集较为精简,每一个指令的运行时间都很短,完成的动做也很单纯,指令的执行效能较佳;可是若要作复杂的事情,就要由多个指令来完成。常见的RISC指令集CPU主要例如Sun公司的SPARC系列、IBM公司的Power Architecture(包括PowerPC)系列、与ARM系列等。【注:Sun已经被Oracle收购;】 SPARC架构的计算机经常使用于学术领域的大型工做站中,包括银行金融体系的主服务器也都有这类的计算机架构; PowerPC架构的应用,如Sony出产的Play Station 3(PS3)使用的就是该架构的Cell处理器。 ARM是世界上使用范围最广的CPU了,经常使用的各厂商的手机、PDA、导航系统、网络设备等,几乎都用该架构的CPU。 #1.二、复杂指令集 复杂指令集(Complex Instruction Set Computer,CISC)与RISC不一样,在CISC的微指令集中,每一个小指令能够执行一些较低阶的硬件操做,指令数目多并且复杂,每条指令的长度并不相同。所以指令执行较为复杂因此每条指令花费的时间较长,但每条个别指令能够处理的工做较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。 因为AMD、Intel、VIA所开发出来的x86架构CPU被大量使用于我的计算机(Personal Computer)上面,所以,我的计算机常被称为x86架构的计算机!举个例子,咱们在MySQL官网下载MySQL时名字为: Windows(x86,32-bit),ZIP Archive (mysql-5.7.20-win32.zip) 咱们发现名字中有x86,这其实就是告诉咱们该软件应用于x86结构的计算机。那么为什么称为x86架构呢?这是由于最先的那颗Intel发展出来的CPU代号称为8086,后来依此架构又开发出8028五、80386....,所以这种架构的CPU就被称为x86架构了。 在2003年之前由Intel所开发的x86架构CPU由8位升级到1六、32位,后来AMD依此架构修改新一代的CPU为64位,为了区别二者的差别,所以64位的我的计算机CPU又被统称为x86_64的架构了。 不一样的x86架构的CPU的差异在哪呢?除了CPU的总体结构(如第二层缓存、每次运做可执行的指令数等)以外,主要是在于微指令集的不一样。新的x86的CPU大多含有很先进的微指令集,这些微指令集能够加速多媒体程序的运做,也可以增强虚拟化的效能,并且某些微指令集更可以增长能源效率,让CPU耗电量下降,这对于高电费是个不错的消息。 试想一下,若是CPU的指令集都相同,那么OS是否是就不用分32bit和64bit了,各类程序的跨平台是否是就更简单了呢。 #2 CPU历史 计算机的发展主要表如今其核心部件——微处理器【微处理器由一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操做,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。】的发展上,每当一款新型的微处理器出现时,就会带动计算机系统的其余部件的相应发展,如计算机体系结构的进一步优化,存储器存取容量的不断增大、存取速度的不断提升,外围设备的不断改进以及新设备的不断出现等。根据微处理器的字长和功能,可将其发展划分为如下几个阶段。 第1阶段(1971——1973年)是4位和8位低档微处理器时代,一般称为第1代。 第2阶段(1974——1977年)是8位中高档微处理器时代,一般称为第2代。 第3阶段(1978——1984年)是16位微处理器时代,一般称为第3代。 第4阶段(1985——1992年)是32位微处理器时代,又称为第4代。 第5阶段(1993-2005年)是奔腾(pentium)系列微处理器时代,一般称为第5代。 第6阶段(2005年至今)是酷睿(core)系列微处理器时代,一般称为第6代。“酷睿”是一款领先节能的新型微架构,设计的出发点是提供卓然出众的性能和能效,提升每瓦特性能,也就是所谓的能效比。 若想具体了解CPU历史参见连接: https://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8/284033?fr=aladdin&fromid=368184&fromtitle=%EF%BC%A3%EF%BC%B0%EF%BC%B5#10 总结:CPU按照指令集能够分为精简指令集CPU和复杂指令集CPU两种,区别在于前者的指令集精简,每一个指令的运行时间都很短,完成的动做也很单纯,指令的执行效能较佳;可是若要作复杂的事情,就要由多个指令来完成。后者的指令集每一个小指令能够执行一些较低阶的硬件操做,指令数目多并且复杂,每条指令的长度并不相同。由于指令执行较为复杂因此每条指令花费的时间较长,但每条个别指令能够处理的工做较为丰富。 根据位数又可分为32bit和64bit(指的是CPU一次执行指令的数据带宽),这个具体后面了解。CPU每每又可细分为运算器和控制器两部分,下面咱们再来叙说一下这两部分。 #2.一、运算器 运算器是对信息进行处理和运算的部件。常常进行的运算是算术运算和逻辑运算,因此运算器又可称为算术逻辑运算部件(Arithmetic and Logical,ALU)。 运算器的核心是加法器。运算器中还有若干个通用寄存器或累加寄存器,用来暂存操做数并存放运算结果。寄存器的存取速度比存储器的存放速度快不少。关于寄存器,咱们在后面介绍CPU的时候再认识。 #2.2 控制器 控制器是整个计算机的指挥中心,它的主要功能是按照人们预先肯定的操做步骤,控制整个计算机的各部件有条不紊的自动工做。 控制器从主存中逐条地读取出指令进行分析,根据指令的不一样来安排操做顺序,向各部件发出相应的操做信号,控制它们执行指令所规定的任务。 控制器中包括一些专用的寄存器。

因访问内存以获得指令或数据的时间比cpu执行指令花费的时间要长得多,因此,全部CPU内部都有一些用来保存关键变量和临时数据的寄存器,这样一般在cpu的指令集中专门提供一些指令,用来将一个字(能够理解为数据)从内存调入寄存器,以及将一个字从寄存器存入内存。cpu其余的指令集能够把来自寄存器、内存的操做数据组合,或者用二者产生一个结果,好比将两个字相加并把结果存在寄存器或内存中。 寄存器的分类: 1.除了用来保存变量和临时结果的通用寄存器外 2.多数计算机还有一些对程序员课件的专门寄存器,其中之一即是程序计数器,它保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令 3.另一个寄存器即是堆栈指针,它指向内存中当前栈的顶端。该栈包含已经进入可是尚未退出的每一个过程当中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量 4.最后 一个很是重要的寄存器就是程序状态字寄存器(Program Status Word,PSW),这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各类其余控制位。用户一般读入整个PSW,可是只对其中少许的字段写入。在系统调用和I/O中,PSW很是很是很是很是很是很是重要 寄存器的维护: 操做系统必须知晓全部的寄存器。在时间多路复用的CPU中,操做系统会常常停止正在运行的某个程序并启动(或再次启动)另外一个程序。每次中止一个运行着的程序时,操做系统必须保存全部的寄存器,这样在稍后该程序被再次运行时,能够把这些寄存器从新装入。
处理器设计的演变
1.最开始取值、解码、执行这三个过程是同时进行的,这意味着任何一个过程完成都须要等待其他两个过程执行完毕,时间浪费
2.后来被设计成了流水线式的设计,即执行指令n时,能够对指令n+1解码,而且能够读取指令n+2,彻底是一套流水线。
3.超变量cpu,比流水线更加先进,有多个执行单元,能够同时负责不一样的事情,好比看片的同时,听歌,打游戏。
两个或更多的指令被同时取出、解码并装入一个保持缓冲区中,直至它们都执行完毕。只有有一个执行单元空闲,就检查保持缓冲区是否还有可处理的指令
这种设计存在一种缺陷,即程序的指令常常不按照顺序执行,在多数状况下,硬件负责保证这种运算结果与顺序执行的指令时的结果相同。
内核态与用户态

多线程和多核芯片
moore定律指出,芯片中的晶体管数量每18个月翻一倍,随着晶体管数量的增多,更强大的功能称为了可能,如
I.第一步加强:在cpu芯片中加入更大的缓存,一级缓存L1,用和cpu相同的材质制成,cpu访问它没有时延
II.第二步加强:一个cpu中的处理逻辑增多,intel公司首次提出,称为多线程(multithreading)或超线程(hyperthreading),对用户来讲一个有两个线程的cpu就至关于两个cpu,咱们后面要学习的进程和线程的知识就起源于这里,进程是资源单位而线程才是cpu的执行单位。
多线程运行cpu保持两个不一样的线程状态,能够在纳秒级的时间内来回切换,速度快到你看到的结果是并发的,伪并行的,然而多线程不提供真正的并行处理,一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)
III.第三步加强:除了多线程,还出现了傲寒2个或者4个完整处理器的cpu芯片,以下图。要使用这类多核芯片确定须要有多处理操做系统
4.2 存储器
计算机中第二重要的就是存储了,全部人都意淫着存储:速度快(这样cpu的等待存储器的延迟就下降了)+容量大+价钱便宜。而后同时兼备三者是不可能的,因此有了以下的不一样的处理方式
存储器系统采用如上图的分层结构,顶层的存储器速度较高,容量较小,与底层的存储器相比每位的成本较高,其差异每每是十亿数量级的
寄存器即L1缓存:
用与cpu相同材质制造,与cpu同样快,于是cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种状况下容量均<1KB。
高速缓存即L2缓存:
主要由硬件控制高速缓存的存取,内存中有高速缓存行按照0~64字节为行0,64~127为行1。。。最经常使用的高速缓存行放置在cpu内部或者很是接近cpu的高速缓存中。当某个程序须要读一个存储字时,高速缓存硬件检查所须要的高速缓存行是否在高速缓存中。若是是,则称为高速缓存命中,缓存知足了请求,就不须要经过总线把访问请求送往主存(内存),这毕竟是慢的。高速缓存的命中一般须要两个时钟周期。高速缓存为命中,就必须访问内存,这须要付出大量的时间代价。因为高速缓存价格昂贵,因此其大小有限,有些机器具备两级甚至三级高速缓存,每一级高速缓存比前一级慢可是容易大。
缓存在计算机科学的许多领域中起着重要的做用,并不只仅只是RAM(随机存取存储器)的缓存行。只要存在大量的资源能够划分为小的部分,那么这些资源中的某些部分确定会比其余部分更频发地获得使用,此时用缓存能够带来性能上的提高。一个典型的例子就是操做系统一直在使用缓存,好比,多数操做系统在内存中保留频繁使用的文件(的一部分),以免从磁盘中重复地调用这些文件,相似的/root/a/b/c/d/e/f/a.txt的长路径名转换成该文件所在的磁盘地址的结果真后放入缓存,能够避免重复寻找地址,还有一个web页面的url地址转换为网络地址(IP)地址后,这个转换结果也能够缓存起来供未来使用。
缓存是一个好方法,在现代cpu中设计了两个缓存,再看4.1中的两种cpu设计图。第一级缓存称为L1老是在CPU中,一般用来将已经解码的指令调入cpu的执行引擎,对那些频繁使用的数据自,多少芯片还会按照第二L1缓存 。。。另外每每设计有二级缓存L2,用来存放近来常用的内存字。L1与L2的差异在于对cpu对L1的访问无时间延迟,而对L2的访问则有1-2个时钟周期(即1-2ns)的延迟。
内存:
再往下一层是主存,此乃存储器系统的主力,主存一般称为随机访问存储RAM,就是咱们一般所说的内存,容量一直在不断攀升,全部不能再高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据所有消失
除了主存RAM以外,许多计算机已经在使用少许的非易失性随机访问存储如ROM(Read Only Memory,ROM),在电源切断以后,非易失性存储的内容并不会丢失,ROM只读存储器在工厂中就被编程完毕,而后不再能修改。ROM速度快且便宜,在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中,另一些I/O卡也采用ROM处理底层设备的控制。
EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,可是与ROM相反,他们能够擦除和重写。不太重写时花费的时间比写入RAM要多。在便携式电子设备中中,闪存一般做为存储媒介。闪存是数码相机中的胶卷,是便携式音译播放器的磁盘,还应用于固态硬盘。闪存在速度上介于RAM和磁盘之间,但与磁盘不一样的是,闪存擦除的次数过多,就被磨损了。
还有一类存储器就是CMOS,它是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,因此,即便计算机没有加电,时间也仍然能够正确地更新,除此以外CMOS还能够保存配置的参数,好比,哪个是启动磁盘等,之因此采用CMOS是由于它耗电很是少,一块工厂原装电池每每能使用若干年,可是当电池失效时,相关的配置和时间等都将丢失
4.3 磁盘
磁盘低速的缘由是由于它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。从边缘开始有一个机械臂悬在盘面上,这相似于老式黑胶唱片机上的拾音臂。信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,因此咱们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。
每一个磁头能够读取一段换新区域,称为磁道
把一个戈丁手臂位置上因此的磁道合起来,组成一个柱面
每一个磁道划成若干扇区,扇区典型的值是512字节
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据须要经历寻道时间和延迟时间
平均寻道时间
机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就觉得着招到了数据所在的那个圈圈,可是还不知道数据具体这个圆圈的具体位置
4.4 磁带
在价钱相同的状况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,可是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来作备份。(常见于大型数据库系统中)
4.5 I/O设备
cpu和存储器并非操做系统惟一须要管理的资源,I/O设备也是很是重要的一环。
见四中的图,I/O设备通常包括两个部分:设备控制器和设备自己。
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都须要插到一个口上,这个口连的即是控制器),控制器负责控制链接的设备,它从操做系统接收命令,好比读硬盘数据,而后就对硬盘设备发起读请求来读出内容。
控制器的功能:一般状况下对设备的控制是很是复杂和具体的,控制器的任务就是为操做系统屏蔽这些复杂而具体的工做,提供给操做系统一个简单而清晰的接口
设备自己:有相对简单的接口且标准的,这样你们均可觉得其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,因而有了控制器提供设备驱动接口给操做系统。必须把设备驱动程序安装到操做系统中。
4.5 输入输出设备
#一、输入设备 输入设备的任务是把人们编好的程序和原始数据送到计算机中去,而且将他们转换成计算机内存所能识别和接受的信息方式。 安输入信息的形态可分为字符(包括汉字)输入、图形输入、图像输入及语言输入等。目前,常见的输入设备有:键盘、鼠标、扫描仪等。辅助存储器(磁盘、磁带)也能够看做输入设备。另外,自动控制和检测系统中使用的模数(A/D)转换装置也是一种输入设备。 #二、输出设备 输出设备的任务是将计算机的处理结果以人或其余设备所能接受的形式送出计算机。 目前最经常使用的输出设备是打印机和显示器。辅助存储器也能够看作输出设备。另外,数模(D/A)转换装置也是一种输出设备。
4.6 总线
四小节中的结构在小型计算机中沿用了多年,并也用在早期的IBM PC中。可是随着处理器和存储器速度愈来愈快,单总线很难处理总线的交通流量了,因而出现了下图的多总线模式,他们处理I/O设备及cpu到存储器的速度都更快。
北桥即PCI桥:链接高速设备
南桥即ISA桥:链接慢速设备
主板图解:
电源(Power)==心脏:全部的组件要能运做,得要有足够的电力供给才行。这就好像心脏同样,若是心脏不跳动了,人就嗝屁了,电脑也是若是没有电源,那也就是一堆垃圾,什么做用都没有。
4.7 启动计算机
在计算机的主板上有一个基本的输入输出程序(Basic Input Output system)
BIOS就至关于一个小的操做系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中。
启动流程
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操做系统
6.而后操做系统询问BIOS,以得到配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,若是没有,系统则会要求用户按照设备驱动程序。一旦有了所有的设备驱动程序,操做系统就将它们调入内核。而后初始有关的表格(如进程表),穿件须要的进程,并在每一个终端上启动登陆程序或GUI