01-02 计算机基础知识详解
1、CPU详解
1.1 CPU的分类与指令集
-
前言:程序员控制的其实是cpu这个组件,由cpu这个组件帮我们下发控制其他组件的指令。
-
指令集:把程序员控制cpu的指令,转成cpu操作某个组件的指令。这些指令不会自发的运行,由人类控制它才能运行
-
cpu的分类:精简指令集、复杂指令集。
-
精简指令集:指令集简短,完成的事情,非常的简单。优点:不容易错,更稳定。缺点:实现复杂的操作,需要的指令集就会成堆,才会完成这一件事。作用:争对稳定的需求,争对大型的计算机架构的服务器,它就需要精简指令集。(例子:网络设备,服务器等)
-
复杂指令集:单条指令比较复杂。优点:单条指令集完成的事情比较多,意味着完成复杂的事,只需要几条就够。缺点:单挑指令比较复杂,容易出错,不稳定。作用:争对功能更丰富,更强大,因该需要cpu内部的复杂指令集。(例子:个人电脑)
-
拓展了解:中国计算机硬件行cpu行业的落后,更多的是cpu精简指令集的开发,做上层的开发,尤其是涉及到硬件方面,是比较薄弱的。
1.2 x86-64(重点)
- x86(掌握):指的是CPU的型号,或者说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架构的计算机上。
- 64(掌握): cpu的位数,指的是cpu一次性能从内存中取出多少位二进制指令,64bit指的一次性能从内存中取出64位二进制指令。注意:CPU的取主要决定于内存一次性能给多少二进制指令。
二进制是怎么来的呢❓
内存基于电信号工作,所以人为的定义,高电频代表数字1,低电频代表数字0,0101之间高低电频的变化,就类比出了二进制。
- CPU向下兼容性(掌握):x86-64的cpu既能运行32位的软件也能运行64位的软件。
为什么cpu具有向下兼容性❓
我们知道cpu取的指令集数,取决于内存提供的指令集数。举个例子:cpu与内存的关系就像车道与车的关系,车道:cpu的每次读取指令集数量 车:内存最大提供给cpu的指令集数,车道能越宽,一次性能容纳车的个数也就越多。
- 拓展:64位的cpu读取提供32位指令集的内存,会在32位之前补全32个0。
1.3 内核态与用户态(重点:面试的时候要用、平常写程序的时候也要用)
什么是内核态与用户态?
- CPU工作的两种状态,就是cpu的运行状态,也叫计算机的运行状态
为什么cpu要有这两种状态?
- 避免代码进行潜在微信的操作,防止给操作系统带来隐患。
了解cpu的2种指令集状态
- 我们已知cpu是计算机最核心的硬件,它里面的指令集是cpu最核心的硬件,因此cpu有2种指令集状态:分为控制其他硬件的指令集、运算相关的指令集
内核态
-
运行的程序是操作系统,也就是操作系统当前工作的状态,也就是说当前状态下,cpu中所有的指令集开放(控制其他硬件的指令集 + 运算相关的指令集),可以操作硬件。
-
总结(掌握):运行的程序时操作系统,可以操作硬件。
用户态
-
运行的程序是应用程序,当前状态cpu中只开放运算相关的指令集,不能操作硬件。
-
总结(掌握):运行的程序是应用程序。不可以操作硬件。
用户态与内核态的切换
- 在什么情况下会发生用户态与内核态的切换?应用程序的运行涉及到计算机硬件的操作,那就必须从用户态切换到内核态才能实现,因此计算机工作时频繁的发生内核态与用户态之间的转换。
- 总结(掌握):应用程序的运行涉及到计算机硬件的操作,就会发生内核态与用户态之间的转换。
1.4 多线程与多核芯片
- 了解moore定律,moore定律指出,计算机芯片的晶体管数量每18月翻一倍,到现在为止这个定律以及不太确切了。
2核4线程 与 4核8线程
-
2核代表有2个CPU,4线程指的是每个CPU都有2个线程,通常也叫假4核。
-
4核代表有4个CPU,8线程指的是每个CPU都有2个线程,通常也叫假8核。
2、存储器
引入
-
结构从上到下:cpu,寄存器,高速缓存,内存,硬盘,磁盘
-
为了提高cpu读取数据的速度,所以在cpu与磁盘之间引入了内存,然后cpu从内存中读取数据其实也是慢的,所以之间加入的高速缓存,高速缓存还是不够块,又在cpu与高速缓存之间又增加了寄存器,这样一步一步提高cpu读取数据的速度。
-
寄存器: 使用cpu同等材质制造而成,在cpu内部集成,cpu运行下一步操作立马需要的指令。
-
高速缓存:存放cpu经常使用的数据。cpu读取数据的时候,先从高数缓存中查看自己所需要的数据,如果有直接从高速缓存中取走,速度很快2ns(这叫高速缓存命中)。如果没有再跑到内存中。
2.1 RAM
-
RAM 英文全称 random access memory,又叫随机存取存储器。
-
可存可取内存,断电数据丢失,就是我们通常所说的内存。
2.2 ROM
-
ROM英文全称ready only memory又叫只读存储器。
-
只读内存,出产就有。为了保证安全性计算机产商出产就往ROM中写死一段核心程序。这段核心程序叫BIOS(BIOS英文全称basic input output system,又叫基本输入输出操作系统),保证计算机在没有任何操作系统的前提下,计算机可以启动。
2.3 CMOS
-
存放BIOS程序产生的数据,比如:启动设备的优先级等。
-
缺点:数据容易丢失,断电数据丢失
-
优点:耗电量极低,主板电池为时钟芯片供电,时钟芯片存放与CMOS中。(拓展:主板电池使用寿命3~5年)
2.4 硬盘
2.4.1 机械硬盘
什么是机械硬盘?机械硬盘依赖于机械的转动,盘片基于磁型号,所以也称之为磁盘。高低磁性号,高磁性号:代表1,二进制1。低磁性号:代表0,二进制0.
磁头
- 负责读写数据。
磁道
- 磁盘的一圈圈数据,对应一串二进制。看到👆面图了吗?那个一圈圈的就是。
单位换算如下:
注意:严格区分大小写,1kb是1kbit 而不是 1kBytes。小写b表示比特位,大写比表示字节。
1bit(比特位) = 8Bytes(字节)
1024Bytes = 1KBytes
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
拓展:对应产商的硬盘存储单位1000表示为一个单位,例200G=200*1000*1000B
扇区
-
注意:硬盘的1次性读写数据的最小单位就是扇区。1个扇区为512Bytes。
-
由扇区拓展出操作的1次性读写单位:操作系统的1次性读写的单位是1个block块,blcok的概念对应的是8个扇区的大小,也就是4096Bytes。操作系统攒够了block块的容量才交给硬盘,以此来减少与硬盘打交道的次数,从而减少IO次数。(block块大小可以自定义,默认1个block等于8个扇区大小)
柱面
-
如上图所示,所有的盘片,多个盘片上下当成一个整体.
-
磁盘的分区的概念,就是从一个柱面开始,到第二个柱面结束,下面的所有范围看作一个整体,就是一个磁盘的分区。
2.4.2 固态硬盘
- 基于电子工作,取代机械硬盘容易损坏的缺点,使用的是物理元件,闪存芯片。
2.5 IO延迟(重点)
举例
- 假设当前硬盘磁头转速是7200/min,也就是120/s,那么转一圈需要-花费1/120≈8ms,半圈也就是4ms
平均寻道时间(掌握)
- 机械手臂从一个柱面随即移动到相邻的柱面的时间成为寻道时间。找到了磁道就以为找到了数据所在的那个圈圈,但是还不知道数据具体在这个圈圈的具体时间。所以机械手臂移动柱面的时间,就叫平均寻道时间。(目前受限于物理工艺水平目前机械硬盘可以达到得是5ms)
平均迟时间(掌握)
- 机械手臂到达正确的磁道之后还必须等待旋转到数据所在的扇区,这段时间就叫平均延迟时间。(基于上面例子,转半圈需要花费4ms,受限于硬盘得转速)
IO延迟(掌握)
- 平均寻道时间 + 平均延迟时间 = IO延迟
硬盘为什么慢的正真原因
-
由上面可以知道,硬盘主要慢,是慢在找数据得过程,读数据是很快得过程。因此想优化程序运行效率,就要让程序减少与硬盘打交道得过程,数据能从内存取,就不要从硬盘取。
-
文件读写就是与硬盘打交道的过程,因此要减少文件的读写操作(文件时操作系统给人提供操作硬盘的虚拟单位)
2.6 虚拟内存
- 内存不够用的时候,在硬盘上划一块空间,这个空间就叫虚拟内存(拓展:linux系统的swap分区就是虚拟内存)
作用:当内存不够用的时候,保证程序的正常运行。
2.7 磁带
- 一般用于备份,价格低,容量大,便于携带
3、总线
所有的计算的组成部分,这些硬件,都是集成在一块板子上,这块板子就叫主板。而总线就是组件于组件之间来回传输数据的一种桥梁。
北桥即PCI桥:负责连接CPU与内存,可以发现北桥连接的都是高速设备。
南桥即ISA桥:负责连接SCSI(硬盘的一种接口)、USB(鼠标键盘等一些接口),可以发现南桥连接的是慢速设备。
4、操作系统的启动流程(重点)
裸机下的3大硬件
-
cpu
-
ROM:充当内存,存放BIOS系统,BIOS能保证没有安装任何操作系统的前提下,你的计算机能够启动起来。
-
CMOS:充当硬盘,存放BIOS程序产生的数据。
安装操作系统的启动流程(掌握)
1、计算机通电
2、BIOS开始运行,检测硬件:CPU、内存、硬盘等等
3、BIOS读取CMOS存储器中的参数,选择启动设备
4、从启动设备上(也就是即将安装的操作系统)读取第一个扇区的内容(MBR主引导记录:MBR主引导记录共512字节,前446字节为引导信息,后64字节为分区信息,最后2字节为标志位。)
5、根据分区信息读入boot loader启动加载模块,启动正真意义上的操作系统。(该分区信息指的就是上面所读取第一个扇区内容得后64个字节的分区信息)
6、然后正真意义上的操作系统询问BIOS,以获取配置信息。对于每种设备,操作系统会检查其设备驱动程序是否存在,如果没有,操作系统会要求用户安装设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核,完成了BIOS与操作系统的交接,获取了控制所有硬件的最高权限。
安装操作系统后的3大硬件
-
cpu
-
RAM:开机以后,操作系统就加载到内存。
-
本地硬盘:分区,启动盘存放操作系统这个软件。
5、密码破解与相关安全
破解操作系统设置的密码
1、拿个存有无密码的操作系统的U盘,插入电脑U盘接口,充当硬盘
2、启动BIOS,设置该没有密码的操作系统的启动优先级,待BIOS与该没有密码的操作系统交接完毕,重启计算机,此时优先加载的就是该没有密码的操作系统。
3、该没有密码的操作系统此时获取了控制所有硬件的最高权限,而那个设置密码了的操作系统,仅仅只是躺在硬盘上的一堆普通的程序无恙,这时就可以随意修改密码。
4、修改过后,重启计算机,进入BIOS中,把修改密码的操作系统的启动优先级,设置为最优先,重启计算机,拔出U盘,达到修改密码锁定的问题。
破解BIOS中设置的密码
归根结底,BIOS存放在ROM中,而提供启动信息的参数,都存放在CMOS中,可知道的是CMOS由主板电池供电,拔插 主板电池,数据缓存消失,插入以后,原始数据不存在,BIOS中的密码设置也不起作用了。所以说没有绝对的安全。
6、应用程序的启动流程(掌握)
1、双击exe可执行程序的快捷方式(就相当于把exe文件路径,告诉操作系统,说我有一个应用程序需要执行。)
2、操作系统会根据文件路径找到exe程序在硬盘上的位置,控制其代码从硬盘加载到内存
3、然后控制CPU从内存中读取刚刚读入的应用程序代码并执行,应用程序则完成启动。
本文详细信息查看地址👉:https://www.cnblogs.com/linhaifeng/p/6523843.html