python是编程语言
语言
- 一种事物与另外一种事物沟通的介质
所以说编程语言是程序员与计算机沟通的介质
什么是编程:
就是程序员用计算机所能理解的表达方式(编程语言)把自己的思维逻辑写下来,编程的结果就是一堆文件
什么要编程?
或者说为什么要和计算机沟通,让计算机按照人的逻辑执行程序,取代并解放人力
完整的计算机系统
3层结构
- 应用程序 (不能直接操作硬件,如果要操作硬件,需要向操作系统层发出请求)
- 操作系统 (往上服务于应用软件,往下控制硬件)
计算机硬件
五大组成
控制器:统筹规划硬件与软件的运行,调控计算机各组成部分协调合作 运算器:可以完成数据的 算数运算 与 逻辑运算,得到想要的结果 存储器:需要再次使用的数据可以通过存储器进行 临时 或 永久存储 - 内存: 基于电工作,通电能存数据,断电数据消失 - 外存: 外部存储(硬盘),永久保存数据 输入input设备:将外界的信息,通过输入设备,提供给计算机 输出output设备:从计算机内部提前想要的数据
数据的处理流程
数据先通过输入设备到内存,然后CPU从内存里取出数据在进行处理,最后处理完的数据给到内存,内存给到输出设备显示
计算机三大核心
cpu: 中央 控制器 + 运算器 内存:临时存储数据,断电后消失 硬盘:永久存储数据,断电后还拥有
CPU
- 控制器+运算器=CPU
- 功能: 控制+运算
- 工作方式: 取值--->分析--->执行
- 软件的执行都是由CPU执行,所有的软件最终都要转换成CPU的指令集去执行
如果一个软件和CPU所支持的指令集不匹配,则这个软件不能再CPU上运行
32位,64位: CPU从内存中一次能读写多大的数据(32个比特位还是64个比特位)
计算机基于通电工作
所有的运作方式都是二进制运算,程序存到硬盘上最后到计算机的各个组件都是二进制编码
程序就是一些代码, 安装程序就是拷贝代码到硬盘
比如是由python语言编写的,python程序内部会规定一些标准,比如说需要再屏幕中输出10这个数字,程序内部就要规定输出到屏幕上是10的这段程序如何转换成二进制编码让计算机识别
cpu具有向下兼容性: 64位能兼容32位
64位CPU一次性从内存取值64个比特位,而32位的软件只需要CPU取值32个比特位就行,所以64位的CPU能够兼容32位的软件
32位CPU一次性从内存取值32个比特位,二64位的软件则需要CPU取值64位,性能达不到,所以32位架构的CPU是不能兼容64位的软件
进制
''' 二进制:1010 1111 0001 01111011 八进制:12 17 1 173 十六进制:a f 1 7b 十进制: 10 十二进制 七进制 六十进制 八进制1位------>二进制3位 十六进制1位------>二进制4位 三十二进制------->二进制5位 六十四进制------->二进制6位 根据: 二进制111=7 为八进制最后一位 二进制1111=15 为十六进制最后一位 为什么要有八进制和十六进制? 八进制是32位操作系统的算法规则,32位操作系统下,CPU能调用内存4个字节的数据 十六进制是64位系统的算法规则,64位操作系统下,CPU能调用内存16字节的数据 一般来说,内存会从硬盘拉去尽可能多的数据,为了让CPU及时处理 '''
- 一个二进制位成为一个bit:111
十进制:
逢10进1, 个位数进1位,如果个位数进位到十,则往十位数上进一位
二进制:
逢2进1,个位数进1位,如果个位数进位到2,则往十位数上进一位
8bit=1Bytes 1024Bytes=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 1024TB=1PB #硬盘厂商计算容量以1000为单位 1GB=1000*1000*1000*8
进制间的换算
''' 1. 16进制换算成2进制 16进制一位相当于2进制4位,所以只需要把16进制的每一位所对应的数字是几用二进制表示出来,然后再进行拼接 - For example 16进制f21转换成二进制 f---->在16进制中表示15----->二进制中表示为 1111 2---->在16进制中表示2------>二进制中表示为 0010 1---->在16进制中表示1------>二进制中表示为 0001 所以最后f21 转换成二进制就是 1111 0010 0001 '''
内存分布图
''' ***** ''' 栈区:应用程序或者用户可以直接操作并通过堆区得到栈区内的信息 堆区:数据存放的地方,和堆区之间存在对应关系 堆区和栈区之间存在指针一一对应,另外,C语言可以不经过栈区直接调用堆区的操作 ''' '''
磁盘
计算机存储架构图
寄存器:
用与CPU相同材质制造, 容量小于1KB,速度和CPU是一样的
高速缓存:
为了减少CPU和内存之间的速度差,第一是CPU马上要用到的数据存到寄存器里,还有一种经常会访问到的数据,数据量比较大,这种存到寄存器中不合理,存到内存速度太慢,这种数据存到高速缓存中
当我们要经常访问一个数据时,必须要先找到操作系统所显示的路径,然后操作系统再把这个路径转换成二进制编码给到内存,最后交给CPU处理返回给内存,内存再返回给操作系统,这个过程太慢,所以将这条数据第一次转换成二进制编码后直接放到高速缓存中,当需要访问这个数据的时候,直接由高速缓存交给CPU处理,操作系统不需要再转换成二进制编码,减小IO访问次数
寄存器和高速缓存的作用
降低IO的等待时间,让CPU尽可能快的拿到数据
磁盘
速度比内存更慢
磁带
速度比磁盘更慢,容量更高,主要用于备份数据
RAM
内存,可读可写
ROM
速度和内存一样,只读内存,多用于存储机器出厂时候就写好的程序,比如说bios
闪存(flash memory)
可读可写,能永久存储,速度没有内存快,比磁盘快,价格也比磁盘贵
CMOS
保存系统当前的时间,以及保存配置的参数,比如,哪一个是启动磁盘 #主板电池: 机器断电后给机器供电,此时仅仅为时钟芯片供电
BIOS(Basic Input Output system)
控制计算机开机阶段的运行
机械硬盘相关
磁盘盘片:通常机械硬盘的盘片类似光盘 读写磁头:通过马达带动运转, 机械手臂: 带动磁盘盘片运转 磁道:存数据时候,磁头就会工作,磁道就是磁头接触盘片形成的圆柱形盘面 扇区:磁盘物理层面上最小的存储单位,一个扇区是512个字节 # 用扇区做磁盘的最小的存储单位,为了减小IO访问的次数,提升性能 一开始机械手臂都是在一个槽里面,只有硬盘通电了才户慢慢带动每个磁道进行运转,因为不可能一开始就转到数据所在磁道的位置,所以计算了一个平均值,叫平均寻道时间 ''' 平均寻道时间:平均寻找磁道的时间,一个7200转的硬盘是5ms 平均延迟时间:在磁道上寻找需要的数据所需要的时间,取决于转速,取一个平均值,7200转的硬盘是4ms 60/7200=0.008s=8ms ------>取平均值4ms #机械硬盘要找到数据平均时间需要9ms, #卡----->CPU不工作,CPU负载高 MIPS: million instruction per second 每秒能执行的百万条指令 一个单核CPU能达到500MIPS '''
应用程序操作硬件需要向操作系统发请求,操作系统进行操作
分区:两个柱面之间磁道的数量
总线
北桥即PCI桥:连接高速设备 南桥即ISA桥:连接慢速设备
操作系统
''' 操作系统: 可以直接往硬件上发生操作指令,完成对硬件的操作,同时协调运行在该操作系统上的软件 -- 软件与软件间的交流 -- 软件与硬件间的交流 内存|硬盘 -- 硬件 软件:应用程序,不能直接操作硬件,需要通过操作系统间接的控制硬件 操作系统操作硬盘也有一个最小的单位,叫一个磁盘块(block块),可以在bios中调整,Linux中默认最小读写大小是4KB ''' 操作系统封装好硬件,给上层的应用程序或者用户使用
如何安装操作系统
#安装软件———> 拷贝代码到硬盘 1. 开机进入bios, 配置系统启动盘,保存到CMOS芯片 2. 重启,Bios识别到系统启动盘,启动盘上的启动程序读到内存,CPU开始处理这个数据,将系统盘内部程序将操作系统拷贝到本地硬盘 3. 重启,BIOS修改启动盘为本地硬盘,到这里,系统安装完成 #双系统概念: 把另外一种操作系统的代码拷贝到硬盘上,启动时候根据用户选择来启动哪一个操作系统
操作系统启动流程
1. 加电 2. bios启动,检测硬件是否运行正常并从CMOS芯片读取启动盘信息 3. 读取启动盘信息后,BIOS读取启动盘的第一个扇区(446Bytes 引导信息 64bytes 分区信息 2bytes结束标志位) 4. 启动第一个扇区里的程序bootloader(存放在446bytes 的引导信息中) 5. 读取操作系统内核
操作系统分成2部分
接口程序:把硬件封装成简单的接口,给用户或者应用程序去用,对上(直接与用户或者应用程序沟通) 内核: 操作硬件,对下(直接与底层硬件沟通)
内核态与用户态(了解)
CPU 的两种工作状态,两种指令集(控制,运算)
用户态:CPU执行用户程序/应用程序所处的状态,处于用户态不能控制硬件,只能调用CPU的运算指令集 内核态:CPU执行操作系统内核所处的状态,处于内核态能够控制硬件,可以调用所有的指令集
应用程序的启动:(重点!!!)
前提:先启动操作系统 1. 我们双击应用程序的过程就是向操作系统提交应用程序的执行文件的路径,然后操作系统将路径读人内存 2. 操作系统调用CPU需要执行应用程序 3. CPU执行应用程序