计算机是一个很是普遍的概念,大到占用数层楼的用于科学计算的超级计算机,小到手机上的前嵌入式芯片均可以称为计算机。虽然它们在外形、结构以及性能上都有很大的差别,可是它们都有计算的概念。如今咱们讨论一下计算机系统的基础,主要分为硬件部分和软件部分,为接下来的深刻学习作一点知识储备。编程
一:硬件部分windows
撇开计算机硬件中纷繁复杂的各类设备、芯片以及外围接口等,站在软件开发者的角度看,咱们只须要抓住硬件的几个关键部分:中央处理器CPU、内存和I/O控制芯片以及设备,这三个部分几乎就是计算机的核心了。数组
1.内存。内存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序要处理的数据,从物理上来讲,内存是由一组动态随机存取存储器(DRAM)芯片组成,从逻辑上来讲,存储器是一个线性的字节数组,每一个字节都有其惟一的地址,以便查询,这些地址是从零开始的。工具
2.中央处理器CPU。简称处理器,是解释存储在内存中的指令的引擎。处理器从程序计数器(PC)指向的存储器处读取指令,执行该指令指示的简单操做,而后更新PC,使其指向下一条指令,而这一条指令并不必定与存储器中刚刚执行的指令相邻。随着制造CPU的工艺到达了物理上的极限,CPU的频率再也不快速增加,这样的状况下,为了提升计算机的运行速度,多核计算机应运而生。性能
3.I/O设备。输入/输出(I/O)设备是系统与外部世界的联系通道,做为用户输入的键盘和鼠标、做为用户输出的显示器以及用于长期存储数据和程序的磁盘都是I/O设备。每个I/O设备都经过一个控制器或适配器与I/O总线相连,而控制器和适配器的功能就是在I/O总线和I/O设备之间传递消息,这样CPU即可以经过I/O总线来与I/O设备通讯。这里将会涉及到非阻塞型I/O和阻塞性I/O等概念,之后会深刻理解。学习
二:软件部分开发工具
系统软件这个概念比较模糊,传统意义上通常将拥有管理计算机自己的软件称为系统软件,以区别普通的应用程序。系统软件能够分为两块,一块是平台性的,好比操做系统内核、驱动程序、运行库以及数以千计的系统工具;另外一块是用于程序开发的,好比编译器、汇编器、连接器等开发工具和开发库。操作系统
“计算机的任何问题均可以经过增长一个间接的中间层来解决”。这句话几乎归纳了计算机系统软件体系的全部设计要点,整个体系都是按照严格的层次结构来设计的。设计
图1-1 计算机软件体系结构接口
由图1-1 易知每一个层次之间都须要相互通讯,既然要相互通讯就必须有一个通讯协议,通常咱们称其为接口。接口的上面那一层是接口的使用者,接口的下面那一层是接口的提供者,由它来定义接口。在层次体系中,接口是被精心设计过的,尽可能保持稳定不变,那么理论上层次之间只要遵循这个接口,任何一个层均可以被修改和替换。除了硬件和应用程序,其余都是中间层,每一个中间层都是对它下面那层的包装与扩展。从整个层次结构上来看,开发工具与应用程序是属于同一个层次的,由于它们都使用同一个接口:操做系统应用程序编程接口。应用程序编程接口的提供者是运行库。什么样的运行库提供什么样的API,例如Linux下的Glibc提供POSIX的API。Windows的运行库提供windows的API。运行库使用操做系统提供的系统调用接口。另外,操做系统内核层对于硬件来讲是硬件接口的使用者,而硬件是接口的定义者。硬件的接口定义决定了操做系统内核,具体来讲就是驱动程序如何与硬件交互通讯。硬件的生产厂商提供硬件规格,操做系统和驱动程序开发者经过阅读硬件规格来编写操做系统和驱动程序。