20190822 计算机网络基础
一、计算机基础之编程
1.什么是编程语言
python和中文英文一样,都是一门语言,所谓编程语言就是人与计算机之间沟通的介质
2.什么是编程
编程指的是基于某种编程语言的语法格式将自己脑子中想要让计算机作的事,写到文件中
结果是一堆文件,构成了程序。
3.为什么要编程
更好的使用计算机,与提高工作效率。像是两个国家的人交流,需要学习翻译一样
二、计算机组成原理
计算机分为五大组成部分,分别是:控制器、运算器、存储器、输入设备、输出设备。
其中控制器+运算器是计算机的中央处理器(CPU),相当于人类的大脑。
1.控制器
计算机的指挥系统,相当于人类大脑接受指令然后控制身体行动。
2.运算器
运算器是计算机的运算系统。实现算术运算和逻辑运算
算术运算:1+1=2
逻辑运算:与或非
3.控制器+运算器(计算机的中央处理器CPU)
吃饭流程:吃饭时接受吃饭的指令,控制身体将要进行的动作(控制器)
根据看到的情况大脑分析使用筷子或者是叉子(运算器)
4.存储器
计算机的储存系统。计算机储存的数据格式都是0、1的形式,0是低电频、1是高电频
为什么计算机采用二进制
(1)技术上容易实现。用双稳态电路表示二进制数字0和1是很容易的事情。
计算机使用二进制进行编码,而不是我们熟悉的十进制,最重要的原因是二进制物理上更容易实现。因为电子器件大多具有两种稳定状态。比如晶体管的导通和截止,电压的高和低,磁性的有和无等。而找到一个具有十个稳定状态的电子器件是很困难的。使用二进制还有运算简单的优点。十进制有55种求和与求积的运算规则,二进制仅有各有3种,这样可以简化运算器等物理器件的设计。另外,计算机的部件状态少,可以增强整个系统的稳定性。所以,二进制对于计算机来讲,是自然而然的选择。
(2)可靠性高。二进制中只使用0和1两个数字,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。
(3)运算规则简单。与十进制数相比,二进制数的运算规则要简单得多,这不仅可以使运算器的结构得到简化,而且有利于提高运算速度。
(4)与逻辑量相吻合。二进制数0和1正好与逻辑量“真”和“假”相对应,因此用二进制数表示二值逻辑显得十分自然。
(5)二进制数与十进制数之间的转换相当容易。人们使用计算机时可以仍然使用自己所习惯的十进制数,而计算机将其自动转换成二进制数存储和处理,输出处理结果时又将二进制数自动转换成十进制数,这给工作带来极大的方便。
内存(主存)
内存是计算机临时存储数据的硬件设施。由于内存读取数据速度较快,CPU下达的指令会直接传输给内存,即cpu会与内存直接交互,比如内存条。
优点相较于外存 存取速度快,缺点 容量小,由于是基于电存储数据,因此断电数据马上消失。
内存的划分
1T = 1024 G;
1G =1024 MB;
1M = 1024 kb;
1KB = 1024 b;
1b = 8位;
1位 = 0或1。
8个 0 或 1构成一B,八千个0或1组成 1 kb,九百万0跟1组成1M
0跟1是计算机也是CPU采用的最基本的计算单位。这就是二进制。
计算机CPU以酷睿I3为例。 I3 集成了 6亿个晶体管。这些晶体管类似 灯泡,二极管灯泡,当数据为0灯泡就是关闭,为1灯泡打开,每个灯泡都是并联,独立电路。这样你可以理解了吧。6亿个晶体管以每秒3GHZ左右(3GZ速度快到光速了)的速度不停的同时开开关关,这就是频率。
数据存在硬盘里,使用时候读取到内存,比如1个1M的图片本质就是八百多万个0或者1的数据,这些0或者1控制cpu中晶体管的开关,这就是CPU工作的原理。也就是2进制的基本原理。因为只有0或1,cpu可以方便的读取计算,当然要加减乘除CPU会0 1 0 1弄几万几十万次,不过以CPU的晶体管数量跟频率,这些都是小儿科。
外存
磁带、磁盘、U盘等
容量大可以永久保存数据存取速度慢
5.CPU+内存+外存(计算机的三大核心组件)
电脑打开qq的流程
- 双击图标,CPU向内存发出取的指令(CPU+内存)
- 内存从硬盘中取出运行qq的指令(硬盘)
- 控制器分析 运行qq 的指令并告知运算器工作(控制器)
- 运算器在进行一系列的算术与逻辑运算打开qq,并从硬盘中读取qq的代码至内存(运算器+内存+硬盘)
- 计算机在内存中运行qq的代码(内存)
- 好友发送文件并下载,该文件会永久保存在硬盘中(硬盘)
- 关闭qq时CPU向内存发出指令,内存关闭qq并清理内存中qq的代码(内存)
6.输入设备
计算机输入信息的设备(相当于人的眼耳口鼻嘴)
常见的输入设备有:键盘、鼠标、图形扫描仪、触摸屏 U盘等
7.输出设备
计算机输出信息的设备
常见的输出设备有:显示器、打印机和绘图仪等。外存储器也是一种输出设备
8.计算机的五大组合部分补充
1.CPU相关
多核CPU:电脑可以同时干多件事,如四核CPU可以同时干四件事。
X86-64-32位 是CPU的一种型号,64表示CPU每次都能取64位二进制数。
CPU具有向下兼容性,即64位电脑能下载32位软件,而32位的电脑下载64位的软件会丢失数据。
2.存储器相关
ROM存储器:在工厂中就编程完毕,然后不能修改。他一般存放BIOS 程序,该程序一般用于启动计算机,或用于启动计算机
CMOS存储器:由电脑内置电池驱动供电,他一般用于保持时间与日期的更新,也就是说,及时计算机没有充电,时间也会更新,同时也会储存启动磁盘的路径
3.总线
连接计算机的所有硬件设备
4.启动计算机的流程
- 计算机加电
- BIOS开始运行,检测硬件,CPU、内存、硬盘灯
- BIOS读取CMOS存储器上的参数,选择启动设备等。
- 从启动设备上读取第一个扇区的内容
- 根据分区信息读入BootLoader启动装载模板,启动操作系统
- 操作系统询问BIOS获得配置信息。对于每种设备系统都会检查驱动的是否存在,如果没有,系统则会要求用户按照设备驱动程序,一旦有了全部的设备驱动程序,操作系统则会将它们调入内核,然后初始有关的表格(如进程表)。
5.硬盘的工作原理
市场上硬盘分为两种:固态硬盘与机械硬盘
- 机械硬盘
机械硬盘主要有机械手臂、磁道和扇区组成
机械手臂:机械硬盘由机械手臂读取数据,机械手臂的末端是磁头。
磁道:磁道是机械硬盘的磁面中得一个一个圈,用于储存数据
扇区:扇区的最小单位通常是512kb,为了减小i/o操作,机械硬盘也会将多个相邻的扇区组合在一起,形成一个块,这个块就是我们看到的Windows的中C/D/E盘。
平均寻道时间:数据存放在磁道是哪个,机械手臂想读取数据需先找到磁道,目前工艺水平下,找到磁道的时间为5ms,这个时间称为平均寻道时间。
平均延迟时间:机械手臂寻道后,接下来寻找数据,由于数据位置是不确定的,寻找数据需要从硬盘头部扫描到尾部。以7200r/min的硬盘为例,刚好在头部找到0ms,刚好在尾部为8.3ms,取平均值为4.15ms为平均延迟时间。
平均延迟时间:
自动换行需要加入 \ \ 两个反斜杠
6.固态硬盘
由主控与闪存芯片组成的ssd可以更快速度和准确性访问驱动器任何位置,传统机械硬盘必须依靠主轴主机、磁头和磁头臂来找到位置,而ssd用集成电路代替了物理旋转磁盘,访问时间及延迟远远超过了机械硬盘。得益于内部的组成控件:主存--闪存--固件算法。通过组件,让数据 以电荷的方式存储在每个NAND存储单元内。固态硬盘基于固态电子(SSD,断电数据也会保留)和算法实现数据存储的。
三、计算机的操作系统
1.什么是操作系统
操作系统将人与计算机之间的交流变得简单
2.什么是文件
文件是在操作系统上代码的一种虚拟显示,将代码封装为可视化高的文件和突图标
3.什么是应用程序
应用程序基于操作系统之上可以通过系统实现各种功能
4.为什么要有操作系统
一套完整的计算机系统分为三部分
1.应用程序
基于操作系统,不与硬件接触
2.操作系统
用于控制硬件,将对硬件的操作封装为简单的接口文件等
3.计算机硬件
以二进制的形式存储数据,如cpu、内存、硬盘等
5.操作系统的作业
承载应用程序操作硬件
6.操作系统和应用程序的启动
硬盘读入闪存(BIOS程序)--CPU运行操作系统代码(CMOS存储器)--操作系统接管操作硬件的工作
应用程序的启动:应用程序代码由硬盘读入内存,CPU运行应用程序代码,运行成功即可使用程序。
四、编程语言分类
1.机器语言
0和1组成的机器可以识别的语言
执行速度快,开发速度贼慢效率低
2.汇编语言
将二进制数写成一个英文单词
开发效率提高
执行效率下降
3.高级语言
1.编译型
全部写完统一编译执行
2.解释型
一句一句的翻译执行
开发效率贼高
4.主流编程语言介绍
1.C语言
既具有高级语言的特点,又具有汇编语言的特点。
他的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
2.C++
C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
3.JAVA
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
4.PHP
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域
5.Ruby
- Ruby 是开源的,在Web 上免费提供,但需要一个许可证。
- Ruby 是一种通用的、解释的编程语言。
- Ruby 是一种真正的面向对象编程语言。
- Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。
- Ruby 可以用来编写通用网关接口(CGI)脚本。
- Ruby 可以被嵌入到超文本标记语言(HTML)。
- Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby
6.Go
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。GO由其擅长并发编程。
7.Python
Python是一门优秀的综合语言, Python的宗旨是简明、优雅、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。
五、网络的瓶颈效应
如果只是开发互联网程序,我们更建议使用的是解释型语言。在了解为什么之前,我们首先给出一个木桶效应:木桶效应是讲一只水桶能装多少水取决于它最短的那块木板。好了,回归主题,将木桶效应是想告诉同学们,你在工业上开发一个项目的时候,你所开发的项目几乎都需要通过互联网传输数据。
假设一个程序使用编译型语言发送消息的执行效率为0.001ms;使用解释型语言的执行效率为0.1ms,但是,你要清楚是,互联网的网络延迟可能需要1ms,而你这靠语言节省下来的0.099ms相较于网络延迟的1ms可能无伤大雅,因为你发送第二条消息需要等网络延迟结束才能开始发送。这也就是互联网中的瓶颈理论。