兰海泽 2020-03-04
一、语言与编程语言
1.1、 什么是语言?什么是编程语言?为何需要编程语言? 语言是人与人之间沟通的介质,如汉语、英语、法语。 同样,编程语言(programming language)也起到这样的作用,作为人与计算机之间沟通的工具被使用,可以同时被计算机和人同时理解。 那么,为什么需要有编程语言呢?是人为了让计算机按照人的要求、思维逻辑,去达到某种目的,从而解放、提高人的生产力。
二、计算机基础知识
2.1、什么是计算机? 计算机就是俗称的“电脑”,人类期望将来有一天,计算机可以真的像人脑一样工作。 2.2、为什么要有计算机? 计算机是人类科技进步的产物,是为了提高人类的工作效率,创造更高的价值。 2.3、计算机的五大组成部分 2.3.1 控制器: 控制器是计算机的指挥系统,负责控制计算机各个组件的运行,进行各项工作,相当于人的大脑。 2.3.2 运算器: 顾名思义,是计算机进行数学运算以及逻辑运算的部分,也相当于人的大脑。 PS:控制器+运算器一起组成了CPU,CPU相当于人的大脑。 2.3.3 存储器(IO设备): 存储器是计算机实现记忆功能的部件,用于存取数据。存储器主要分为内存与外存。 内存:基于电工作,存取数据都快,但是断电数据会丢失,用于临时存取数据。相当于人类大脑的记忆功能,会遗忘。内存也称之为主存储器,因为所有的数据读写以及指令,都需要经过内存传输给CPU,而CPU处 理完的数据也必须先写回主存储器,再传输到输出单元。 外存:硬盘,通常是机械硬盘,基于磁工作,存取速度都慢,断电数据不会丢失,可以永久保存数据。相当于人类笔记本的功能,可永久保存。 2.3.4 输入设备(Input Device ): 向计算机输入数据和信息的设备,如:鼠标、键盘、麦克风。 2.3.5 输出设备(Output Device): 是计算机数据的输出设备,将信息传递到外界,如:显示器、打印机、音响等。 2.4、一个程序的运行与三大核心硬件(CPU、内存、硬盘)的关系 组成计算机的五大单元可以合并成三大核心组件:CPU、IO设备、主存储器。控制单元+算数逻辑单元=》CPU。主存储器,即主记忆体。输入单元Input+输出单元Output=》IO设备。 程序最先存放于硬盘中,程序运行时一定是先将程序代码从硬盘加载到内存中,在内存中加载好的代码被CPU提取去运行。
三、操作系统
3.1、操作系统的由来 计算机在最开始的时候,是没有操作系统的,由人类使用各种按钮,实现控制功能,随着计算机硬件的发展,简单的控制已经无法协调日益复杂的硬件设备,为了更好的控制计算机硬件,以及更好的协同作业,避免重复劳动,于是操作系统应运而生。如:Windows、Linux、Ubuntu等。 3.2、操作系统的概念 操作系统是管理计算机硬件与软件资源的程序,同时也是计算机的内核与基石。它能控制计算机的基本运行,也能协助上层应用软件使用计算机的相关硬件,把复杂的操作封装成简单的功能。例如:文件,就是操作系统提供给应用程序/用户操作硬盘的一种功能。 3.3、程序的区分,系统软件与应用软件 硬件上运行的程序都是软件,有了软件的计算机才算是具有了灵魂,而软件又分为两种: 应用软件:实现某个具体功能的软件,如:QQ、Wechat、千千静听以及IE浏览器等操作系统某些自带的软件。 系统软件:为了实现计算机控制底层硬件而开发的软件,是应用软件与硬件之间的桥梁,能够协调、管理、控制计算机硬件与应用软件资源的控制程序。 3.4、计算机系统的三层结构 简单来说,计算机系统由软件和硬件两部分组成,但是软件部分又可以划分为应用软件与操作系统,即:应用软件通过操作系统来控制计算机硬件,计算机硬件把功能通过操作系统提供给应用程序。 3.5、平台与跨平台的概念 应用程序都是运行于操作系统之上,而操作系统则是运行于硬件之上,故应用程序运行于硬件+操作系统的这样一个环境中,我们称之为应用程序的运行平台,即:操作系统+计算机硬件=平台。 常见的平台有:Windows+某款硬件,Linux+某款硬件,Unix+某款硬件 跨平台:跨平台是软件开发中一个重要的概念,即既不依赖操作系统,也不依赖硬件环境。一个操作系统下开发的应用程序,放到另一个操作系统下依然可以运行。广义而言,一般的计算机语言都可以做到跨平台。严格意义上讲,指某种计算机语言编制的程序只需要做少量的修改,编译之后即可在另一种平台上运行,并不需要借助其他的runtime/中间件环境。跨平台是衡量一款软件优秀与否的重要指标。
四、CPU详解
4.1、CPU的分类与指令集 4.1.1 CPU指令集 CPU是计算机的大脑,大脑里集成了一系列具体控制身体其他器官做事的指令集,所以从纯硬件角度看,计算机所有其他组件都由CPU发出指令控制。程序员所写的程序,是为了控制计算机硬件工作的,所有代码都会转换成CPU的指令集才能控制其他硬件,所以程序员是通过控制CPU达到控制其他硬件的目的。 内存中存放的是程序员的代码/指令,CPU从内存中读取这些指令后需要翻译成自己的指令去执行,即CPU在出场时就集成了一系列的指令集(指令集是CPU的灵魂)。 CPU内部是集成微指令集的,根据不同的指令集设计理念,具体可分为:精简指令集CPU、复杂指令集CPU。 精简指令集(Reduced Instruction Set Computing,RISC):这种CPU设计中,微指令集较为精简,每个指令的运行时间短,完成动作单纯,指令效果佳,但是若完成复杂的事情,就需要用多个指令完成。常见的RISC微指令集CPU有ARM系列CPU。 复杂指令集(Complex Instruction Set Computer,CISC):与RISC不同,在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度各不相同。因此执行每条指令花费的时间较长,但每条指令可以处理的工作较为丰富。常见的CISC微指令集CPU有AMD、Intel等x86架构的CPU。 4.2、x86-64 4.2.1 x86架构 x86架构是针对cpu的型号或者说架构的一种统称,详细的说,就是Intel发明的CPU代号称为8086,后来又在此基础上进行了开发,因此这种架构的CPU统称为x86架构了。又由于此种架构的CPU大量用于个人计算机上,因此,个人计算机通常被称为x86架构的计算机! 4.2.2 64位 CPU的位数指的是CPU一次能从内存中取出多少位二进制指令,64bit指的是一次性能从从内存中取出64位二进制指令。 CPU具有向下兼容性,64位的CPU上可以运行32位的软件,反之,则不行。 4.3、内核态与用户态 除了在嵌入式系统中的非常简洁的CPU之外,多数CPU都有两种模式,即内核态与用户态。通常,PSW(Program Status Word)中有一个二进制位控制这两种模式。 内核态:当CPU处于内核态的运行时,CPU可以执行指令集中的所有指令,即操作系统在内核态下运行,从而可以访问整个硬件。 用户态:用户程序在用户态下运行,仅仅只能执行CPU整个指令集的一个子集,该子集中不包含操作硬件功能部分。 内核态与用户态的切换:应用程序不能直接操作硬件,却必然要用到硬件,因此必须频繁通过用户态切换到内核态这么一个过程,去实现对计算机硬件的操作。 4.4、多线程与多核芯片 多核芯片指的是一个CPU中有多个完整的处理器,多线程指的是一个处理器有多个线程,可以相当于两个处理器却又弱于两个真正的处理器。 4核8线程:4核代表四个CPU,8线程指的是每个CPU都有两个线程,即假8核。
五、主存储器
5.1、RAM(Random Access Memory): 随机存取存储器,也叫主存,为存储系统的主力,主存是易失性存储,断电数据会消失。 5.2、ROM(Read Only Memory,ROM): 只读内存,电源切断后,非易失性存储的内容不会丢失,出厂就写入程序,不能被修改,通常用于存储启动计算机的引导加载模块,即BIOS。 5.3、CMOS(Complementary Metal Oxide Semiconductor互补金属氧化物半导体): 是计算机主板上的一块可读写RAM芯片,存取速度慢,断电数据丢失,耗电量极低,因此一般用于保存计算机的当前时间和日期,除此之外,还用于保存BIOS配置的参数,比如从那个磁盘启动操作系统等。 5.4、硬盘: 5.4.1 机械硬盘:磁盘 一般我们使用的硬盘是磁盘,它是一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。边缘有个机械臂悬在盘面上,信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位)。
磁道:一圈数据,对应着一串二进制(1bit代表一个二进制位)8个bit称为一个字节Bytes,1024Bytes=1KBytes,1024K=1MBytes,1024MBytes=1GBytes,所以我们平时说的磁盘容量最终指的就是磁盘能写多少个二进制位。 扇区:每个磁道划分为若干个扇区,一个扇区的典型值为512字节。站在硬盘的角度看,一次读写数据的最小单元为扇区。为了提高操作系统的运行效率,操作系统一次读写操作的单位是一个block块,即8个扇区的大小=4096Bytes。 柱面:把一个机械手臂位置上所有的磁道合起来,组成一个柱面。 5.4.2 固态驱动器(Solid State Disk或Solid State Drive,简称SSD),俗称固态硬盘: 固态硬盘是用固态电子存储芯片阵列而制成的硬盘,因为台湾英语里把固体电容称之为Solid而得名。 5.4.3 IO延迟: 数据都存放于一段一段的扇区,即磁道这个圈圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间。 平均寻道时间:机械手臂从一个柱面随即移动到相邻的柱面的时间称为寻道时间,受限于当今的物理工艺水平,一般时间为5ms。 平均延迟时间:机械臂到达正确的磁道后还必须等待旋转到数据所在的扇区下。 IO延迟:平均寻道时间+平均延迟时间=IO延迟 优化程序运行效率的核心法则:能从内存取数据,就不从硬盘取。 5.4.4 虚拟内存: 许多计算机支持虚拟内存机制,该机制使计算机实际可运行大于物理内存的程序,方法是将正在使用的程序放入内存去执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方称为虚拟内存。 5.4.5 IO设备: 即输入输出设备,设备的控制+设备本身。
六、总线
6.1、北桥即PCI桥:连接高速设备 6.2、南桥即ISA桥:连接慢速设备 6.3、多总线模式结构图
七、操作系统的启动流程
7.1、BIOS介绍: BIOS(Basic Input Output system):计算机主板上存在的一个基本的输入、输出系统,相当于一个小的操作系统,它有底层的I/O软件,存放于一个非易失性闪存RAM中,即写在ROM中。 7.2、裸机: CPU:ROM:CMOS:组成启动计算机的基本操作党员 7.3、操作系统启动流程: 7.3.1、计算机加电 7.3.2、BIOS开始运行,检测硬件:CPU、内存、硬盘等 7.3.3、BIOS读取CMOS存储器中的参数,选择启动设备 7.3.4、从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为为分区信息,最后两个为标志位) 7.3.5、根据分区信息读入bootloader启动装载模块,启动操作系统 7.3.6、然后操作系统询问BIOS,以活得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户安装驱动程序。一旦有了全部的设备驱动程序,操作系统就会将它们调入内核。(驱动程序安装后集成到操作系统中) 7.4、应用程序启动流程: 7.4.1、双击exe程序快捷方式/exe程序本身,找到exe程序的校对路径,即告知操作系统,有一个程序要执行,应用程序的绝对路径是XXXX 7.4.2、操作系统根据文件绝对路径找到exe程序在硬盘的位置,控制代码从硬盘加载到内存 7.4.3、然后控制CPU从内存中读取刚刚读入内存的应用程序代码执行,应用程序完成启动