编程语言,是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。就像人与人之间交流需要用语言去沟通一样,我们与计算机之间沟通的方式就是编程语言。
编程语言又分为:
- 机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。
- 汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
- 高级语言(High-level programming language)相对于机器语言(machine language,是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据)而言。是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。由于早期电脑业的发展主要在美国,因此一般的高级语言都是以英语为蓝本。
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行, 按转换方式可将它们分为两类:
解释型:相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程 序,每个语句都是执行的时候才翻译。
编译型:运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。像C/C++等都是编译型语言。程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。
操作系统:
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。
如图,最中心层为硬件层,计算机基于底层的硬件去工作。根据底层的硬件系统人们编写出操作系统,操作系统后附加各类系统软件,最后开放端口为我们日常实用的各种软件。
操作系统合理对各类作业进行调度,以及方便用户使用的一组程序的集合操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充,它在计算机中占据重要地位,其他软件都依赖于它
CPU即计算机的大脑,它从内存中获取指令然后进行解码,最后执行,周而复始直至程序被执行完成;但由于CPU的计算速度远大于内存,等待内存中的指令,就要浪费时间,所以在CPU的内部存在一个关键性的寄存器,用来保存临时数据,这样就可以弥补内存速度跟不上CPU的情况了;寄存器分为4类:
通用寄存器;程序计数器,堆栈指针,程序状态字存储器(PSW)
用于保存临时数据的就是通用寄存器了,CPU即将执行的指令会存放在程序计数器中,而还没有推出的过程框架会从存放在堆栈指针中,最重要的程序状态字寄存器是用来控制CPU的模式,内核态和用户态。
内核态:可以理解为让CPU对硬件直接进行操作调用所有指令集,一般操作系统的指令是可以直接将CPU转为内核态的
用户态:可以理解为不让CPU对硬件直接进行操作只能调用部分指令集,应用程序绝大部分只能将CPU在用户态下工作,只能通过系统调用(SystemCall)将状态转成内核态
存储器
CPU的L1L2缓存,曾经只听老师讲过CPU有1级2级缓存,但是没有深度的了解过L1L2的缓存是什么?
L1缓存就是刚才上面提到的寄存器了,与CPU同一个材质制造,死贵死贵的而且存储容量非常的小小小,32位CPU就是32*32位,64位CPU就是64*64位。
L2缓存可以理解为高速缓存区,其特性与RAM内存相似,是失忆性存储,断电数据就会消失了,但是其运行速度非常之快,介于CPU与内存之间。
RAM内存,这就是我们熟知的内存,后现代称其为运存,失忆性存储,断电数据就消失,用于快速存储指令供CPU调取。
闪存(FlashMemory)我是把它理解为读写速度非常快的记忆存储,你们也可以理解为U盘,SSD硬盘
CMOS是计算机最基础的存储器了,用于存储BIOS的相关设置和计时功能,可这么重要的存储器却是失忆性存储,不可以断电呀,所以只有靠BIOS电池CR2032,进行持续供电。
机械硬盘(磁盘),记忆存储器,用于存放大量资料数据,被广泛应用:
利用扇区存储,但是圆形寻道,这样的话每当想要寻找数据时,磁盘就会一圈一圈一圈的寻找存储的扇区,如果运气好,瞬间就可以寻找到,如果运气不好,就等着它一圈一圈的转吧,这个等待时间就叫平均寻道时间。
磁带,对于98年出生的我来说,已经没有见过了,存储速度慢,容积大,方便携带是它的特性,这个特性使他在数据备份领域占据了一定的优势。
虚拟内存,其实我的理解就是在物理内存不足以分配的时候,物理硬盘将部分存储空间划分为内存使用,在Linux操作系统中专门有一个虚拟内存的分区叫Swap,而虚拟内存映着在CPU中的地址则被称为MMU(存储器管理单元)
控制器,负责控制连接设备,从操作系统中得到指令并控制设备,例如操作系统保存一个数据,就会给硬盘控制器一个指令,控制器收到指令就去执行了,但是控制器本身也是需要执行方法的,这个执行方法,就是所谓的驱动程序了
总线是一个非常不好理解的概念,我把它理解成电路:
ISA南桥用于连接非关键的慢速设备
PCI北桥用于高速设备的连接和交互
我们开机的过程:
计算机通电开机-BIOS开始运行-检测硬件-BIOS加载CMOS中的设备参数-从启动设备中加载MBR主分区的内容-读取分区中的Boot启动模块-加载内容到内存中-出现小窗口
应用程序的启动
程序-输入设备操作系统发送应用程序的指令-操作系统会将应用程序存放在内存中-CPU将指令从内存中取出解码运算返回,程序就开启了。
2017年5月18日