1. 编程语言的介绍
1.1 什么是语言?
语言(人类交际工具)
语言是人类进行沟通表达的方式和工具 —— 来自百度百科
语言对我们大家来说,应该不是完全陌生的东西,因为基本上在座的都接触过至少两种语言,汉语和英语
汉语: 是我们中国人与中国人交流的语言
英语: 是我们中国人和外国人交流的语言
1.2 什么是编程?
一提到编程大家肯定会联想到一个硬件设备——计算机(电脑)
那么编程自然而然就和电脑有这一定的必要联系,因为我们编程大多数情况下是借助电脑这个工具完成的。那我们来解释一下编程是什么又和计算机有什么关系呢?
编程就是人命令计算机完成某些指定的任务,但我们都知道计算机本质上就是一堆零件组成的,是不会说话的,也听不懂人们说的话,无论是英语还是汉语,那么怎么人怎么命令计算机呢? 这就引出了关于编程语言的概念,
下面我们来看一下什么是编程语言
1.3 什么是编程语言?
编程语言是人与计算机之间沟通的介质。
那么为何要有编程语言,或者说人为何要与计算机沟通呢?这是因为在编程的世界里,计算机就好比是人的奴隶,人与计算机沟通的目的就是为了奴役计算机,让计算机按照人类的思维逻辑自发地去工作从而把人力解放出来。
做到机器代替人类处理一些无意义并且会大量重复的、繁琐的工作
2. 计算机组成原理
2.1 计算机五大组成部分
2.1.1 控制器
控制器是计算机的指挥系统,用来控制计算机其他组件的运行,相当于人类的大脑
2.1.2 运算器
运算器是计算机的运算功能,用来做算术运算和逻辑运算,相当于人脑。
控制器+运算器=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处理完毕的数据也必须先写回主存储器中,最后数据才从主存储器传输到输出单元。
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的两种工作状态
- 内核态:运行的程序是操作系统,可以操作计算机硬件
- 用户态:运行的程序是应用程序,不能操作计算机硬件
内核态与用户态的转换:
- 应用程序的运行必然涉及到计算机硬件的操作,那就必须由用户态切换到内核态下才能实现,所以计算机工作时在频繁的发生在内核态与用户态的转换
- 是通过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 计算机系统三层结构
综上,我们开发应用程序本质是在控制硬件,但是我们直接打交道的是操作系统,应用程序都是通过操作系统来
接地操作硬件的,所以一套完整的计算机系统分为三层,如下 :
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 平台
什么是平台?
平台就是 硬件 + 操作系统
常见的平台: windows系统+某款硬件、linux系统+某款硬件、ubuntu+某款硬件等
那么什么语言支持跨平台?
跨平台就是这个语言开发出来的应用程序,源代码不需要更改就可以在别的平台上使用。