一、计算机基础
计算机基础
一、我们为什么要学习计算机基础
我们学习python离不开计算机基础,想要学好,就必须要把基础打牢,不然在学习的期间很多知识都不知道是怎么来的。
程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质。
程序员如果想要计算机去工作运行,就必须知道计算机是干什么用的?怎么干活的?这就是我们必须学习的计算机基础的理由。
然而光有编程语言和硬件也并不能满足大家的编程需求,为什么这么说呢?
程序用编程语言写程序,最终开发出的结果就是一个软件,既然是软件,那就与腾讯qq、暴风影音、快播等软件没有区别了。这些软件必须运行在操作系统之上,你肯定会问:为何要有操作系统呢?没错,远古时代的程序员确实是在没有操作系统的环境下,用编程语言之间操作硬件来编程的,你可能觉得这没有问题,但其实问题是相当严重的,因为此时你必须掌握如何操作硬件的所有具体细节,比如如何具体操作硬盘(现在你得把硬盘拆开,然后你能看见的所有的东西,你都得研究明白,因为你编程时要用到它),这就严重影响了开发的效率,操作系统的出现就是运行于硬件之上,来控制硬件的,我们开发时,只需要调用操作系统为我们提供的简单而优雅的接口就可以了。
所以的一套完整的计算机系统分为:应用程序、操作系统、计算机硬件。如下图。我们的python编程之路分为计算机硬件基础,操作系统基础,和python编程三部分,我们就先从计算机基础硬件开始学习。
二、计算机硬件介绍
计算机硬件分为五大部分:控制器、运算器、储存器、输入设备、输出设备,下面我们来详细的描述下这五大部分的工作原理。
1.控制器:是计算机的指挥系统(就好比人的大脑)。控制器通过地址访问储存器,从储存器中取出指令,经过译码器分析后,根据指令分析的结果产生相应的操作控制信号作用与其他部件,使得各部件在控制下协调的工作。
2.运算器:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算等。
3.储存器:是计算机用来存放所以数据和程序的记忆部分。他的基本功能是按指令的地址写入或读取出信息,计算机的储存器分为两大类:一类是储存器,简称为内存或者主存;另一类是外存储器,简称外存或辅存。存储器由若干个存储单元组成,每个存储单元都有一个地址,计算机通过地址对存储单元进行读写。一个存储器所包含的字节数称为存储容量,单位有B、KB、MB、GB、TB等。
4.输入设备:是向计算机中输入信息(程序、数据、声音、文字、图形、图像等)的设备。常见的输入设备有:键盘、鼠标、图形扫描仪、触摸屏、条形码输入器、光笔等。
外存储器也是一种输入设备。
5. 输出设备:主要有显示器、打印机和绘图仪等。外存储器也当作一种输出设备。
控制器+运算器=CPU,CPU、内存以及其他i/o设备都是有一条系统总线链接起来并通过其他设备通信。
CPU是人的大脑,负责控制全身和运算
内存是人的记忆,负责零食存储
硬盘是人的笔记本,负责永久存储
出入设备是人的耳朵或眼睛,嘴巴,负责接收外部的信息存入内存
输出设备是脸部或者屁股,负责经过处理后输出的结果
以上所有的设备都是通过总线链接,总线相当于人的神经
上课开始,老师讲课,学生听课,老师是程序员,学生是计算机,学生的器官都是计算机各部分组成
(1)你通过耳朵接收老师讲的知识->输入
(2)通过自己的神经,将接收的数据存入自己的内存/短期记忆(总线、内存)
(3)光听不行,你还需要反应/处理老师讲的知识,于是你的大脑/cpu从短期记忆里取出知识/指令,分析知识/指令,然后学习知识/执行指令 (cpu取指、分析、执行)
(4)你通过作业或者说话输出你学到的结果
(5)你想要永久将知识保存下来,只能拿出一个笔记本,把刚刚学会的知识都写到本子上,这个本子就是硬盘(磁盘)
1.处理器
计算机处理器是解释和执行指令的功能单元,也称为*处理器或cpu,它是计算机的中枢神经系统,与处理器和内存周围被称为外设的设备形成对比,如键盘、显示器、磁盘、磁带机等都是外设。每一种处理器都有一套独特的操作命令,可称为处理器的指令集,如存储、调入等之类都是操作命令。计算机的设计者喜欢将计算机称为机器,因此,指令集有时也称为机器指令,编写这些指令的二进制语言也叫机器语言。*处理器(英文Central Processing Unit,CPU)是一台计算机的运算核心和控制核心。
其中运算器用来主要负责程序运算与逻辑判断,控制器则主要协调各组件和各单元的工作,所以CPU的工作主要在于管理和运算。可以说计算机的大脑就是CPU,它从内存中取指令->解码->执行,然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。
既然CPU的重点在于进行运算和判断,那么要被运算与判断的数据是从哪里来的?CPU读取的数据都是从主存储器(内存)来的!主存储器内的数据则是从输入单元所传输进来!而CPU处理完毕的数据也必须先写回主存储器中,最后数据才从主存储器传输到输出单元。
综合上面所说的,我们会知道其实计算机是由:输入单元、输出单元、CPU(控制单元、算术逻辑单元)与主存储器五大单元构成的。也可以说CPU+输入输出+主存储器构成了电子计算机的三大核心组件,相关性如下图:
在超大规模集成电路构成的微型计算机中,往往将CPU制成一块具有特定功能的芯片,称为微处理器,芯片里边有编写好的微指令集,我们在主机上的所有操作或者说任何软件的执行最终都要转化成cpu的指令去执行,如输入输出,阅读,视频,上网等这些都要参考CPU是否内置有相关微指令集才行。如果没有那么CPU无法处理这些操作。不同的CPU指令集不同对应的功能也不同,这就好比不同的人脑,对于大多数人类来说,人脑的结构一样,但是大家的智商都有差别。
#1、CPU的分类
我们已经知道CPU内部是含有微指令集的,我们所使用的的软件都要经过CPU内部的微指令集来完成才行。这些指令集的设计主要又被分为两种设计理念,这就是目前世界上常见到的两种主要的CPU种类:分别是精简指令集(RISC)与复杂指令集(CISC)系统。下面我们就来谈谈这两种不同CPU种类的差异!
#1.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.2、复杂指令集
复杂指令集(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,后来依此架构又开发出80285、80386....,因此这种架构的CPU就被称为x86架构了。
在2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,为了区别两者的差异,因此64位的个人计算机CPU又被统称为x86_64的架构了。
不同的x86架构的CPU的差别在哪呢?除了CPU的整体结构(如第二层缓存、每次运作可执行的指令数等)之外,主要是在于微指令集的不同。新的x86的CPU大多含有很先进的微指令集,这些微指令集可以加速多媒体程序的运作,也能够加强虚拟化的效能,而且某些微指令集更能够增加能源效率,让CPU耗电量降低,这对于高电费是个不错的消息。 试想一下,如果CPU的指令集都相同,那么OS是不是就不用分32bit和64bit了,各种程序的跨平台是不是就更简单了呢。
#2 CPU历史
1 计算机的发展主要表现在其核心部件——微处理器【微处理器由一片或少数几片大规模集成电路组成的*处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。】的发展上,每当一款新型的微处理器出现时,就会带动计算机系统的其他部件的相应发展,如计算机体系结构的进一步优化,存储器存取容量的不断增大、存取速度的不断提高,外围设备的不断改进以及新设备的不断出现等。根据微处理器的字长和功能,可将其发展划分为以下几个阶段。 2 3 4 5 第1阶段(1971——1973年)是4位和8位低档微处理器时代,通常称为第1代。 6 7 第2阶段(1974——1977年)是8位中高档微处理器时代,通常称为第2代。 8 9 第3阶段(1978——1984年)是16位微处理器时代,通常称为第3代。 10 11 第4阶段(1985——1992年)是32位微处理器时代,又称为第4代。 12 13 第5阶段(1993-2005年)是奔腾(pentium)系列微处理器时代,通常称为第5代。 14 15 第6阶段(2005年至今)是酷睿(core)系列微处理器时代,通常称为第6代。“酷睿”是一款领先节能的新型微架构,设计的出发点是提供卓然出众的性能和能效,提高每瓦特性能,也就是所谓的能效比。 16 17 若想具体了解CPU历史参见链接: 18 19 20 21 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 22 23 24 25 总结:CPU按照指令集可以分为精简指令集CPU和复杂指令集CPU两种,区别在于前者的指令集精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。后者的指令集每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。
根据位数又可分为32bit和64bit(指的是CPU一次执行指令的数据带宽),这个具体后面了解。CPU往往又可细分为运算器和控制器两部分,下面我们再来叙说一下这两部分.
2.运算器
运算器是对信息进行处理和运算的部件。经常进行的运算是算术运算和逻辑运算,所以运算器又可称为算术逻辑运算部件(Arithmetic and Logical,ALU)。
运算器的核心是加法器。运算器中还有若干个通用寄存器或累加寄存器,用来暂存操作数并存放运算结果。寄存器的存取速度比存储器的存放速度快很多。关于寄存器,我们在后面介绍CPU的时候再认识。
3.控制器
整个计算机的指挥中心,它的主要功能是按照人们预先确定的操作步骤,控制整个计算机的各部件有条不紊的自动工作。
控制器从主存中逐条地读取出指令进行分析,根据指令的不同来安排操作顺序,向各部件发出相应的操作信号,控制它们执行指令所规定的任务。
控制器中包括一些专用的寄存器。
因访问内存以得到指令或数据的时间比cpu执行指令花费的时间要长得多,所以,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器,这样通常在cpu的指令集中专门提供一些指令,用来将一个字(可以理解为数据)从内存调入寄存器,以及将一个字从寄存器存入内存。cpu其他的指令集可以把来自寄存器、内存的操作数据组合,或者用两者产生一个结果,比如将两个字相加并把结果存在寄存器或内存中。
寄存器的分类:
1.除了用来保存变量和临时结果的通用寄存器外
2.多数计算机还有一些对程序员课件的专门寄存器,其中之一便是程序计数器,它保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令
3.另外一个寄存器便是堆栈指针,它指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量
4.最后 一个非常重要的寄存器就是程序状态字寄存器(Program Status Word,PSW),这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要
寄存器的维护:
操作系统必须知晓所有的寄存器。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。
4.储存器
CPU和磁盘之间的缓冲设备,是临时存储器()。
一般程序运行的时候会被调度到内存中执行,服务器关闭或程序关闭,自动从内存中释放掉。
寄存器即L1缓存:
用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种情况下容量均<1KB。
高速缓存即L2缓存:
主要由硬件控制高速缓存的存取
5.硬盘
功能:硬盘简单的来说就是一个容量大的存储器,存储视频,文本,音频等各种数据,成为现代电脑不可缺少的配件。
作用:由于计算机在工作时、CPU、输入输出设备与存储器之间要大量地交换数据、因此。存储器的存取速度和容量,也是影响计算机运行速度的主要因素之一
磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。从边缘开始有一个机械臂悬在盘面上,这类似于老式黑胶唱片机上的拾音臂。信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。每个磁头可以读取一段换新区域,称为磁道把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面每个磁道划成若干扇区,扇区典型的值是512字节
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
2.1 平均寻道时间
机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置
一个7200/m的磁盘的平均寻到时间:5ms
平均延迟时间:60/7200=0.008=8ms
4ms
2.2 平均延迟时间
机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间
2.3 虚拟内存:
许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)
6.磁带
在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)
7. 输入输出设备
#1、输入设备
输入设备的任务是把人们编好的程序和原始数据送到计算机中去,并且将他们转换成计算机内存所能识别和接受的信息方式。
安输入信息的形态可分为字符(包括汉字)输入、图形输入、图像输入及语言输入等。目前,常见的输入设备有:键盘、鼠标、扫描仪等。辅助存储器(磁盘、磁带)也可以看作输入设备。另外,自动控制和检测系统中使用的模数(A/D)转换装置也是一种输入设备。
#2、输出设备
输出设备的任务是将计算机的处理结果以人或其他设备所能接受的形式送出计算机。
目前最常用的输出设备是打印机和显示器。辅助存储器也可以看做输出设备。另外,数模(D/A)转换装置也是一种输出设备。
三、开机启动计算机步骤
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
四、完整的操作系统
4.1 什么是操作系统
是一个协调、管理、控制计算机硬件与软件的控制程序
4.2 操作系统分成两部分
cpu的两种工作状态
用户态:cpu执行用户程序/应用程序所处的状态,处于用户态不能控制硬件
内核态:cpu执行操作系统内核所处的状态,处于内核态能够控制硬件
4.3 应用程序的启动顺序
前提:先启动操作系统
1)向操作系统提交程序启动文件的路径
2)操作系统根据文件路径把硬盘的数据读入内存
3)操作系统调用cpu来执行内存中刚刚读入的程序代码