语言是人与人之间交流的介质,咱们平时每时每刻用来交流都用的语言。编程语言也是一种语言,也是用来交流的介质,不一样的是编程语言是程序员和计算机之间交流的介质,程序员编程的目的就是让计算机去工做。知己知彼才能百战不殆,因此咱们要想成为一名合格的程序员,首先就要了解咱们的“工人”-计算机的特性,计算机能作什么,怎么作,因此咱们要学习计算机基础。程序员
咱们都能说出咱们的电脑有显示器,CPU,硬盘,内存,显卡。。。这些属于计算机的硬件系统,咱们平时常用的qq,360,word。。。这些属于计算机的软件系统。这些软件就是程序员经过没日没夜的操劳开发出来的最终产品,这些产品没法直接控制计算机硬件,还必需要有操做系统,固然若是是学习汇编语言的话,就不用这样了。操做系统就是运行在硬件之上来控制硬件的,当咱们编程时,只须要调用操做系统为咱们提供的便利的接口就能够了。编程
因此软件、硬件和操做系统的关系能够这样表述,软件经过操做系统来控制硬件。缓存
一套完整的计算机系统包括硬件系统,操做系统和软件。下面让咱们先来学习计算机硬件系统。编程语言
一台简单的我的计算机能够抽象为下图的模型,CPU、内存和I/O设备都由一条系统总线(bus)链接起来并经过总线与其余设备通讯。性能
计算机的大脑叫中央处理器(CPU),它从内存中取指令->解码->执行,而后再取指令->解码->执行下一条命令,直到整个程序被执行完。每一个CPU都有一套专门的可执行的指令集,任何软件的执行最终都要转化成CPU的指令去执行。 由于从内存读取数据比CPU执行指令花费的时间长的多,因此CPU内部有一些用来保存关键变量和临时数据的寄存器,一般在CPU的指令集中专门提供一些指令,用来将数据从内存调入寄存器,或者将数据从寄存器存入内存。CPU的其余指令则能够把来自寄存器和内存的数据组合或者用二者运算产生一个结果,并把结果存在寄存器或者内存中。学习
通用寄存器,用来保存变量和临时结果;spa
程序计数器,早期计算机只有一个cpu,执行程序只能按顺序进行,切换到下个程序时要断掉前一个程序,可是要保留程序的运行状态,即保存将要取出的下一条指令的内存地 址,以便再次运行该程序时能接着上次的状态,这就是程序计数器;操作系统
堆栈指针,当咱们须要寻找一个数据时,遍历整个硬盘会花费很长时间,由于硬盘的读写速度比较慢,咱们能够把数据的地址存储在寄存器里面,这就是堆栈指针;指针
程序状态字寄存器(Program Status Word,PSW),这个寄存器包含了条码位、CPU优先级、模式(用户态或内核态),以及各类其余控制位。在系统调用和I/O中,PSW 很是重要。blog
除了在嵌入式系统中的很是简单的CPU以外,多数CPU都有两种模式,即内核态和用户态。一般在PSW中有一个二进制位控制这两种模式。
内核态:当CPU在内核态运行时,CPU能够执行指令集中的全部指令,即操做系统在内核态下运行,能够访问整个硬件。
用户态:用户程序在用户态下运行,仅仅只能执行CPU整个指令集的一个子集,该子集不包括操做系统的硬件功能部分。即在用户态下,没法访问硬件系统。
用户态下工做的软件不能操做硬件,可是咱们使用的软件不少都有硬件操做的需求,好比读取一个文件,保存一个文件等等,就必须经历从用户态切换到内核态的过程。所以,用 户程序必须使用系统调用(system call),系统调用陷入内核并调用操做系统,TRAP指令把用户态切换成内核态,并启用操做系统从而得到服务。
咱们知道CPU的速度很快,比内存的速度快的多,这样当CPU须要从内存读取数据时,因为存在速度差,CPU就要等待内存,这样会大大下降效率。于是高速缓存就出现了,高速缓存是速度介于CPU和内存之间的存储介质,当cpu须要读取数据时,会先在高速缓存中寻找,若是找到所需数据,就称为命中,这样就不用去内存中寻找了,大大节省了时间。其中L1缓存采用与cpu相同的介质制成,速度和cpu同样,于是访问无延迟。L2缓存速度比CPU慢些,cpu访问时有1~2时钟周期(即1~2ns)的延迟。有些cpu还存在L3缓存,也是为了提高命中率存在。因为高速缓存价格昂贵,因此容量很小。
随机存储器(RAM)就是咱们平时所说的内存,既能够从中读取数据,也能够写入数据,全部在高速缓存中找不到的数据,就会到RAM中寻找。可是当电源切断时,存储在其中的数据就会丢失。
ROM是只读存储器,在ROM制造的时候,数据就被存入其中,并永久保存,即便断电数据也不会丢失,数据通常不能更改。
这种存储介质断电后数据也不会删除,但不一样的是,它们能够重复擦出和重写。固态硬盘,胶卷都属于这种。
CMOS是计算机主板上一块可读写的RAM芯片,用来保存时间日期和BIOS设置,它虽然是RAM芯片,可是它靠一块电池独立供电,因此即便计算机断电,日期时间和BIOS设置信息也不会丢失。
如今仍普遍使用的大容量存储介质还是机械硬盘,机械硬盘经过磁存储数据。主要由盘片、磁头、盘片转轴、控制电机、磁头控制器以及接口,缓存等部分组成。机械硬盘的内部结构以下图所示
与经过电存储的固态硬盘不一样,机械硬盘的机械手臂开始在一个固定的槽里,通电后会移动到盘片上,若是忽然断电,则机械手臂会停在盘片上,很容易对盘片形成损伤。一样的道理,若是在工做中受到碰撞,机械硬盘也很容易损坏。
当磁盘旋转时,若磁头保持在一个位置不动,每一个磁头都会在磁盘表面划出一个圆形轨迹,称为磁道。
磁盘上每一个磁道被等分红若干个弧段,称为扇区。默认一个扇区为512Bytes,在向磁盘读写数据时,一扇区为单位。
硬盘一般由一组重叠的盘片组成,每一个盘面都被划分红数量相等的磁道,并从外缘开始编号,具备相同编号的磁道造成一个圆柱,称为磁盘的柱面。咱们平时说的“分区”,就是指的柱面。
平均寻道时间
当硬盘接收到系统指令后,磁头从开始移动到移动到数据所在的磁道所花费时间的平均值,就叫平均寻道时间,它必定程度上体现了硬盘读取数据的能力,时间越短,产品性能越好。
平均延迟时间
磁头寻找数据时,磁头到达正确的磁道以后还须要等待磁盘旋转到数据所在的扇区下,这段时间称为延迟时间。
虚拟内存与MMU
有时计算机能够运行大于自身物理内存的程序,缘由是由于许多计算机都支持虚拟内存机制,即将硬盘的某一部分区域做为虚拟内存,将暂时不须要执行的程序放到这块区域。这块区域在Linux中称为swap,这种机制由cpu中的一个部件负责,称为存储器管理单元(Memory Management Unit ,MMU)
这里指计算机带,是一种存储容量大,价格低的信息存储介质,主要用于计算机的外存储器。虽然速度比磁盘低,可是可移动性强,经常使用来备份信息,以便在发生紧急状况时能快速移动。
咱们使用的硬件设备,如硬盘、网卡、声卡、鼠标等都须要插到主板上的一个接口上,这个接口就是控制器,它是主板上的一块或一组芯片,负责控制链接的设备。它从操做系统接收命令,而后对硬件设备发出控制请求。
然而要调用设备,还必须根据该接口编写复杂而具体的程序,这就是驱动程序,必须把驱动程序安装到操做系统中才能正常调用设备。
总线是计算机各功能部件之间传送信息的公共通讯干线,由导线组成传输线束。
主板芯片组是主板的核心组成部分,分为南桥芯片和北桥芯片。南桥芯片提供键盘控制器,RTC(实时时钟控制器),USB(通用串行总线)等的支持,北桥芯片则提供对CPU的类型和主频、内存的类型和存储容量、ISA/PCI/AGP插槽等的支持。简单来讲,南桥即ISA桥,链接慢速设备;北桥即PCI桥,链接高速设备。
1.计算机加电
2.BIOS开始运行,经过读取COMS中存储的配置信息识别硬件
3.BIOS读取CMOS中的参数,选择启动设备
4.从启动设备上读取包含MBR引导代码的主引导扇区(这一扇区共占512字节,其中主引导程序占446字节,分区信息占64字节,最后两个字节为标志位)
5.根据分区信息读入BootLoader启动装载模块,启动操做系统
6.操做系统询问BIOS,获取配置信息,而且查看是否全部设备的驱动程序都存在,若是存在,操做系统就将它们调入内核,而后初始化有关表格,并在终端启动登陆程序或者显示用户图形界面。
双击应用程序图标,计算机就会到相应的地址读取该程序存储在硬盘里的数据,而后将数据加载在内存里,CPU根据指令读取内存里的数据,程序运行。