• 你应该知道的那些计算机基础


    1. 编程语言的介绍

    1.1 什么是语言?

    语言(人类交际工具)

    语言是人类进行沟通表达的方式和工具 —— 来自百度百科

    语言对我们大家来说,应该不是完全陌生的东西,因为基本上在座的都接触过至少两种语言,汉语和英语

    汉语: 是我们中国人与中国人交流的语言

    英语: 是我们中国人和外国人交流的语言

    1.2 什么是编程?

    一提到编程大家肯定会联想到一个硬件设备——计算机(电脑)

    那么编程自然而然就和电脑有这一定的必要联系,因为我们编程大多数情况下是借助电脑这个工具完成的。那我们来解释一下编程是什么又和计算机有什么关系呢?

    编程就是人命令计算机完成某些指定的任务,但我们都知道计算机本质上就是一堆零件组成的,是不会说话的,也听不懂人们说的话,无论是英语还是汉语,那么怎么人怎么命令计算机呢? 这就引出了关于编程语言的概念,

    下面我们来看一下什么是编程语言

    1.3 什么是编程语言?

    编程语言是人与计算机之间沟通的介质。

    那么为何要有编程语言,或者说人为何要与计算机沟通呢?这是因为在编程的世界里,计算机就好比是人的奴隶,人与计算机沟通的目的就是为了奴役计算机,让计算机按照人类的思维逻辑自发地去工作从而把人力解放出来。

    做到机器代替人类处理一些无意义并且会大量重复的、繁琐的工作

    2. 计算机组成原理

    2.1 计算机五大组成部分

    2.1.1 控制器

    控制器是计算机的指挥系统,用来控制计算机其他组件的运行,相当于人类的大脑

    2.1.2 运算器

    运算器是计算机的运算功能,用来做算术运算和逻辑运算,相当于人脑。

    1589701248882

    控制器+运算器=CPU,cpu相当于人的大脑

    2.1.3 存储器

    存储器是计算机的记忆功能,用来存取数据。

    存储器主要分为内存与外存:

    • 内存(基于电工作)相当于人的短期记忆。断电数据丢失

    • 外存(如磁盘/硬盘),相当于记事的本子,断电数据不会丢失,是用来永久保存数据的

    ps:内存的存取速度要远远高于外存

    RAM: 内存

    ROM: “只读内存”

    • 存放计算机厂商写死计算机.上的一段核心程序 =》BIOS

    CMOS: 存取速度慢,断电数据丢失,耗电量极低,你电脑断电后开机时间还对,就是他存着计算的时间

    硬盘:

    • 机械硬盘:磁盘

      磁道:一圈数据,对应着一串二进制(1bit代表一个二进制位)

      8bit比特位= 1Bytes字节

      1024Bytes=1KB

      1 024KB= 1MB

      1024MB=1GB

      1024GB=1TB

      1024TB=1PB

      200G= 200* 1000* 1000B

      扇区 ( 一条弧线 ):

      一个扇区通过为512Bytes

      站在硬盘的解读,一次性读写数据的最小单为为扇区

      操作系统一次性读写的单位是一个block块=》 8扇区的大小=4096字节

    • 固态硬盘: 内部组成是闪存芯片,基于电子工作的,所以没有机器设备带来的延迟,相对快一点

    I0延迟

    7200转/ min
    120转/s 
    1/ 120转/s=转一圈需要花费8ms
    平均寻道时间:机械手臂转到数据所在磁道需要花费的时间,受限于物理工艺水平,目前机械硬盘可以达
    到的是5ms
    平均延迟时间:转半圈需要花费4ms,受限于硬盘的转速
    #I0延迟 = 平均寻道时间 + 平均延迟时间
    # 所以我们开发出来的程序竟可能少量与硬盘打交道,所以程序的优化本质就是减少与硬盘之间的io操作
    # 所以能从内存取数据就别从硬盘,别傻了吧唧存到文件中再从文件中读数据,自己增加与硬盘打交道
    

    优化程序运行效率的一个核心法则: 能从内存取数据,就不要从硬盘取

    io设备 = 设备控制器 + 设备本身 ,在控制器之上的是驱动程序

    2.1.4 输入设备

    输入设备是计算接收外界输入数据的工具,如键盘、鼠标,相当于人的眼睛或耳朵。

    2.1.5 输出设备

    输出设备是计算机向外输出数据的工具,如显示器、打印机,相当于人说的话,写出的文章。

    2.2 计算机的三大核心硬件

    2.2.1 cpu

    通常将运算器和控制器合称为中央处理器(Central Processing Unit,CPU), cpu里边有编写好的微指令集,我们在主机上的所有操作或者说任何软件的执行最终都要转化成cpu的指令去执行 。其中运算器用来主要负责程序运算与逻辑判断,控制器则主要协调各组件和各单元的工作,所以CPU的工作主要在于管理和运算。可以说计算机的大脑就是CPU,它从内存中**取指令->解码->执行,**然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。 
    

    运算器和控制器

    常将运算器和控制器合称为中央处理器(Central Processing Unit,CPU)。
    
    其中运算器用来主要负责程序运算与逻辑判断,控制器则主要协调各组件和各单元的工作,所以CPU的工作主要在于管理和运算。可以说计算机的大脑就是CPU
    
    #1、运算器
      运算器是对信息进行处理和运算的部件。经常进行的运算是算术运算和逻辑运算,所以运算器又可称为算术逻辑运算部件(Arithmetic and Logical,ALU)。
    
      运算器的核心是加法器。运算器中还有若干个通用寄存器或累加寄存器,用来暂存操作数并存放运算结果。寄存器的存取速度比存储器的存放速度快很多。
    
    #2 控制器
      控制器是整个计算机的指挥中心,它的主要功能是按照人们预先确定的操作步骤,控制整个计算机的各部件有条不紊的自动工作。
    
      控制器从主存中逐条地读取出指令进行分析,根据指令的不同来安排操作顺序,向各部件发出相应的操作信号,控制它们执行指令所规定的任务。控制器中包括一些专用的寄存器。
    

    CPU读取的数据都是从主存储器(内存)来的!主存储器内的数据则是从输入单元所传输进来!而CPU处理完毕的数据也必须先写回主存储器中,最后数据才从主存储器传输到输出单元。

    1589718086144

    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。
        
    # 总结:
        CPU按照指令集可以分为精简指令集CPU和复杂指令集CPU两种,区别在于前者的指令集精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。后者的指令集每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。
    
    cpu的分类与指令集(了解即可)
    

    x86-64介绍

    #1、x86架构
        x86是针对cpu的型号或者说架构的一种统称,详细地讲,最早的那颗Intel发明出来的CPU代号称为8086,后来在8086的基础上又开发出了80285、80386....,因此这种架构的CPU就被统称为x86架构了。
            
        由于AMD、Intel、VIA所开发出来的x86架构CPU被大量使用于个人计算机上面,因此,个人计算机常被称为x86架构的计算机!
        程序员开发出的软件最终都要翻译成cpu的指令集才能运行,因此软件的版本必须与cpu的架构契合,举个例子,我们在MySQL官网下载软件MySQL时名字为:
          Windows(x86,32-bit),ZIP Archive
          (mysql-5.7.20-win32.zip)   
        我们发现名字中有x86,这其实就是告诉我们:该软件应该运行在x86架构的计算机上。
    #2、64位  
        cpu的位数指的是cpu一次性能从内存中取出多少位二进制指令,64bit指的是一次性能从内存中取出64位二进制指令。
        在2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,到现在,个人计算机CPU通常都是x86_64的架构。
    #cpu具有向下兼容性
        指的是64位的cpu既可以运行64位的软件,也可以运行32位的软件,而32位的cpu只能运行32位的软件。这其实很好理解,如果把cpu的位数当成是车道的宽,而内存中软件的指令当做是待通行的车辆,宽64的车道每次肯定既可以通行64辆车,也可以通信32辆车,而宽32的车道每次却只能通行32辆车,而且指令不能分割,所以你32的别想运行64的。
    

    寄存器

    寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。
    在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。比从内存中取
    

    内核态与用户态

    代表cpu的两种工作状态

    • 内核态:运行的程序是操作系统,可以操作计算机硬件
    • 用户态:运行的程序是应用程序,不能操作计算机硬件

    1589771468987

    内核态与用户态的转换:

    • 应用程序的运行必然涉及到计算机硬件的操作,那就必须由用户态切换到内核态下才能实现,所以计算机工作时在频繁的发生在内核态与用户态的转换
    • 是通过cpu上的psw寄存器进行之间的转换

    多核和多线程

    2核4线程:

    • 2核代表有两个cpu, 4线程指的是每个cpu都有两个线程=》假4核

    4核8线程

    • 4核代表有4个cpu, 8线程指的是每个cpu都有两个线程=》假8核

    1、首先站在硬件角度去看,cpu是整个计算机的核心,cpu内部集成用来控制其他计算机硬件操作的二进制指令集( 这也是cpu设计的精髓所在,我们国家为何无法研究出国产的强大芯片,这是一个需要攻克的核心问题 )

    2、然后需要知道cpu本身也是硬件,硬件本身是死的,它们不会自发地去工作,需要人类编写程序/软件去控制它们,可以说软件是计算机硬件的灵魂。

    3、结合1和2,更具体一点说,人类编写的程序最终都是转换成了cpu指令,然后去操作其他计算机硬件的,即人类的程序 ---> cpu内部的二进制指令 --> 计算机其他硬件

    ps:早期的二极管之类的,相当于直接编写二进制指令来控制计算机硬件了,即二进制值指令->计算机其他硬件

    2.2.2 内存

    内存称之为主存

    主存储器内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须先写回主存储器中,最后

    主存储器传输到输出单元。

    2.2.3 硬盘

    三者的速度比较:cpu > 内存 > 硬盘

    速度差异原因是:物理材料不同,造cpu的材料就是快,内存材料也不差基于电工作也快,硬盘基于磁,与他俩比不照
    

    一个程序的简单启动流程:

    • 程序最先是存放于硬盘之上

    • 程序的运行一定事 先把程序的代码加载到内存

    • 然后cpu从内存中读取指令执行。

    硬盘也可以存放指令,为什么还要有内存呢?这就好比你有了本子怎么还要背古诗呢?

    内存相当于人的记忆,只要记忆在,我们就能背诵出之前记住的古诗,但是如果没有记忆,我们每次都看翻小本本去看,这就会重复很多次,不符合设计。所以我们有小本本也要有记忆。计算机不光要有硬盘也要有内存,这样就省去了每次都要从硬盘中读取指令。

    3. 操作系统

    3.1 操作系统的由来

    上面我们已经知道我们为什么编程,就是为了奴隶计算机,帮我们干活。然后也知道了我们和计算机之间沟通的介质是编程语言。那么我们就可以奴隶计算机了。

    假如我想开发一个视频软件

    那么该软件的一个核心业务就是播放视频,开发者若要编写程序完成播放视频这个业务逻辑,必先涉及到底层硬

    硬盘的基本运作(视频文件都是先存放于硬盘中),这意味着开发者在编写业务逻辑代码之前,必须先编写一个

    制硬盘基本运行的控制程序,然而这仅仅只是一个开始,事实上,在编写应用程序的业务逻辑前,需要开发者编

    出一套完整的控制程序用来控制所有硬件的基本运行(这要求开发者需要详细了解计算机硬件的各种控制细节,

    如我们必须把CPU里面所有指令集都掌握一遍)

    那么如果软件都是这样开发的岂不是很头疼,而且每个人开发都要先写一套控制硬件的程序。这个时候就有人站了出来说,我来给你们写这个控制硬件的,你们只要写你们软件的核心业务就行啦, 我来把复杂的硬件的控制封装成简单的接口,你们只需要调用操作系统提供给我们的接口即可。这个控制硬件的就是操作系统,本质上就是一个大型软件而已。

    操作系统是一个协调、管理、控制计算机硬件资源与应用软件资源的控制程序

    它位于计算机硬件与应用软件之间,起承上启下的作用

    软件的分类:

    • 系统软件,如操作系统
    • 应用软件:谷歌浏览器,qq,微信等

    软件是计算机的灵魂,硬件就是一堆废铁是没有灵魂的。

    3.2 计算机系统三层结构

    综上,我们开发应用程序本质是在控制硬件,但是我们直接打交道的是操作系统,应用程序都是通过操作系统来

    接地操作硬件的,所以一套完整的计算机系统分为三层,如下 :

    1589703058349

    3.3 操作系统的启动流程

    BIOS介绍:

    BIOS: Basic Input 0utput System

    BI0S被写入ROM设备

    裸机:

    cpu

    ROM:充当内存,存放BI0S系统

    CMOS:充当硬盘

    系统的安装:本质上就是把系统代码从其他存储设备中,拷贝到你电脑的本地硬盘

    启动流程
    
    1.计算机加电
    
    2.BIOS开始运行(有无win都是),检测硬件:cpu、内存、硬盘等
    
    3.BIOS读取CMOS存储器中的参数,选择启动设备
    
    4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
    
    5.根据分区信息读入bootloader启动装载模块,启动操作系统
    
    6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
    

    3.4 密码破解与安全相关

    进入BIOS页面,更改启动项为外部设备
    通过外部设备的操作系统接管计算机的硬件资源的控制权限
    	然后找到之前系统存在的硬盘,并进一步找到密码相关的设置文件,删除、修改
    	重启进入bios界面设置会原来启动项的加载顺序
    那好。我把bios加锁,也设置个密码不就好了,不让你直接进入bios页面
    我们知道bios的配置设置都存储在cmos中,这玩意基于电工作,断电数据丢失,配置自然就没了
    那么我们可以把机箱打开,把主板的内部的小电池拆了
    那我就把机箱焊死,不让你拆开,我带回家,慢慢拆,哈哈哈
    

    3.5 应用程序的启动流程

    1、双击exe快捷方式--》exe文件的绝对路径,就是在告诉操作系统
    	说:我有一个应用程序要执行,应用程序的文件路径是(exe文件的绝对路径)
    2、操作系统会根据文件路径找到exe程序在硬盘的位置,控制其代码从硬盘加载到内存
    3、然后控制cpu从内存中读取刚刚读入内存的应用程序的代码执行,应用程序完成启动
    

    3.6 平台

    什么是平台?

    平台就是 硬件 + 操作系统

    1589703187771

    常见的平台: windows系统+某款硬件、linux系统+某款硬件、ubuntu+某款硬件等

    那么什么语言支持跨平台?

    跨平台就是这个语言开发出来的应用程序,源代码不需要更改就可以在别的平台上使用。

  • 相关阅读:
    js 把数组中每个元素的某个字段取出
    vue 实现单选/多选效果
    js常用的array方法
    js的split()和join()的用法
    HTML 转 PDF 之 wkhtmltopdf
    微信小程序api封装(promise)
    常用的正则表达式
    更改MySQL的存储目录
    CentOS 6.X 安装VirtualBox-5.1
    CentOS 6.X 安装VNC Server实现图形化访问
  • 原文地址:https://www.cnblogs.com/xcymn/p/12918775.html
Copyright © 2020-2023  润新知