计算机基础知识及UNIX发展史
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机基础知识及UNIX发展史相关的知识,希望对你有一定的参考价值。
TOC[-]
计算机基础知识及UNIX发展史
1、计算机系统组成机构
计算机系统由硬件(Hardware)系统和软件(Software)系统两大部分组成,如下图所示:
2、冯诺依曼体系结构
1946年数学家冯·诺依曼于提出,其中包括:运算器、控制器、存储器(主/辅助)、输入设备、输出设备。
五大部件组成简要描述:
- 存储器用来存放数据和程序
- 运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中
- 控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果
- 输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有键盘,鼠标等
- 输出设备可以将机器运算结果转换为人们熟悉的信息形式,如打印机输出,显示器输出等
3、服务器硬件简介
PC服务器含有的主要部件包括:CPU、内存、硬盘、RAID卡、网卡、HBA卡、风扇、电源等,其硬件结构图如下所示:
对关键部件的简要介绍如下:
a) CPU:
- 主频(CPU时钟频率)
- 外频(系统总线工作时钟频率)
- 倍频(外频与主频相差的倍数)
- 三者关系是:主频=外频x倍频
- 高速缓存(cache),分为一级,二级,三级缓存,即L1,L2,L3
b) 内存:
- RAM(random access memory),断电时将丢失其存储内容 内存是介于CPU和外部存储之间,与CPU直接交换数据的内部存储器,用于存放程序指令、数据和中间结果的临时场所
c) 外存:
- ROM(read only memory),一次写入,反复读取 外存通常是磁性介质或光盘,像硬盘,软盘,磁带,CD等,能长期保存信息,并且不依赖于电来保存信息,但是由机械部件带动,速度与CPU相比就显得慢的多。
d) 硬盘:
磁盘则为永久存放数据的存储器,磁盘上也是有缓存的(芯片),读取数据的性能比内存差,所以,在企业工作中,我们才会把大量的数据缓存到内存中,写入到缓冲区。
- 磁盘尺寸大小:2.5英寸、3.5英寸
- 硬盘的转速:7200rpm、10000rpm,15000rpm
- 磁盘的接口或类型:IDE,SCSI,SAS,SATA
- 硬盘接口类型:
- a) IDE接口:硬盘接口规范,采用ATA技术规范
- b) SCSI接口:应用于小型机上的高速数据传输技术
- c) SATA接口: Serial ATA,提高传输速率,支持热插拔
- d) SAS接口: Serial Attached SCSI,兼容SATA
- e) 目前主流的硬盘接口为SATA和SAS接口,其中IDE和SCSI已经退出历史舞台
- 企业应用中硬盘选取建议:
- 常规的正式工作场景建议选SAS(结合SATA和SCSI的优点)硬盘,转速可达15000rpm,机械磁盘转速高的性能相对还可以。
- 不对外提访问的服务器,如数据的备份,建议选SATA(7200-10000转/分),其特点是容量大、价格便宜、但是速度比较慢。
- 高并发访问、数据量小、资金充沛的情况下,建议选择SSD ,读取性能、用户体验较好。
- 大型的服务器,一般会把SATA和SSD结合起来使用等。
e) RAID卡:
用来实现RAID的建立和重建,检测和修复多位错误,错误磁盘自动检测等功能。RAID芯片使CPU的资源得以释放。 有Raid卡后,一般磁盘就会插在raid卡上再连接到主板上,而不是直接插到主板上面。当然Raid卡的级别和具体的配置做运维的同学也得掌握,如RAID0、1、5、6、10等(后续补充)。
RAID作用
- 阵列卡把若干硬盘驱动器按照一定要求组成一个整体、由阵列控制器管理的系统。
- 阵列卡用来提高磁盘子系统的性能及可靠性
如上简要介绍服务器组成结构的关键部件,其他部件如、网卡、HBA卡、风扇及电源等不在此赘述,请大家自行学习。
f) 关键概念:
- 热插拔技术也称为热交换技术(Hot Swap),允许在不关机的状态下更换故障热插拔设备。常见的热插拔设备:硬盘,电源,PCI设备,风扇等。热插拔硬盘技术与RAID技术配合起来,可以使服务器在不关机的状态下恢复故障硬盘上的数据,同时并不影响网络用户对数据的使用。
4、存储容量换算
关于存储容量方面的换算,具体如下:
DT时代,数据大爆炸......
5、存储基础知识
服务器外置存储根据连接方式可以分为:直连式存储(DAS: Direct-Attached Storage)和网络化存储(Fabric-Attached Storage,简称FAS)。网络化存储又分为:网络附加存储(NAS:Network-Attached Storage)和存储区域网络(SAN:Storage Area Network)。
a) DAS(Direct-Attached Storage)
DAS存储设备与服务器主机之间的连接通道通常采用SCSI连接,DAS存储设备主要是磁盘阵列(RAID: Redundant Arrays of Independent Disks)、磁盘簇(JBOD:Just a Bunch Of Disks)等。随着阵列的硬盘数量越来越多,SCSI通道将会成为IO瓶颈。PC中的硬盘或只有一个外部SCSI接口的JBOD都属于DAS架构。 注意: JBOD是在一个底板上安装的带有多个磁盘驱动器的存储设备。通常又称为Span。和RAID阵列不同,JBOD没有前端逻辑来管理磁盘上的数据分布。每个磁盘进行单独寻址,作为分开的存储资源。目前应用比较广泛。
JBOD是在逻辑上把几个物理磁盘一个接一个串联到一起,从而提供一个大的逻辑磁盘。JBOD存储容量等于组成Span的所有磁盘的容量的总和。但JBOD不能提供任何RAID所能带来的容错或是性能方面的好处。
b) NAS(Network-Attached Storage)
NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上。与DAS以及SAN不同,NAS是文件级的存储方法。采用NAS较多的功能是用来进行文件共享。
NAS存储需要有一台NAS服务器,NAS服务器可以为网络中的所有存储节点建立分布式的网络文件系统,一般采用的协议是网络文件系统(NFS:Network File System)协议或SMB(Server Message Block)协议。
NAS设备,或者说网络文件共享协议,一般支持多计算机平台,如Linux、Windows、Solaris等,即插即用,存储节点随时可以把自己的文件目录挂载到NAS服务器上。
不同的主机(如NFS客户机)通过NFS协议可访问到同一个文件。而DAS与SAN存储设备中的数据只属于与之相连的主机,其他主机则无法访问。
c) SAN(Storage Area Network)
存储区域网络,是通过光纤通道(Fiber Channel)交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。 与DAS相比,SAN存储的优点在于:
- 随着存储容量的增长,SAN允许企业独立地增加他们的存储容量。
- SAN允许任何服务器连接到任何存储阵列。
- 由于使用光纤接口,SAN具有更高的带宽。除了FC连接,SAN连接还有ISCSI(SCSI over IP)以及SAS(Serial Attached SCSI)接口。
- 光纤接口可以提供10公里的连接长度,非常容易实现物理分离的存储。
用图示说明DAS、NAS及SAN三者的区别,具体如下:
6、操作系统
(后续补充……)
7、开发相关概念
a) ABI和API区别
- ABI:Application Binary Interface
- ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
- API:Application Programming Interface
- API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。
综上所述,它们都是所谓的应用程序接口,只是它们所描述的接口所在的层面不一样。API往往指源代码级别的接口,必然我们可以说POSIX是一个API标准、windows所规定的应用程序接口是一个API;而ABI是指二进制层面的接口,ABI的兼容程度比API要更为严格,比如我们可以说C++的对象内存分布(Object Memory Layout)是C++ ABI的一部分。
b) Library fuction和System call
- 系统调用(system call)
- 操作系统为用户态运行的进程和硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口,即就是设置在应用程序和硬件设备之间的一个接口层。可以说是操作系统留给用户程序的一个接口。再来说一下,linux内核是单内核,结构紧凑,执行速度快,各个模块之间是直接调用的关系。放眼望整个linux系统,从上到下依次是用户进程->linux内核->硬件。其中系统调用接口是位于Linux内核中的,如果再稍微细分一下的话,整个linux系统从上到下可以是:用户进程->系统调用接口->linux内核子系统->硬件,也就是说Linux内核包括了系统调用接口和内核子系统两部分;或者从下到上可以是:物理硬件->OS内核->OS服务->应用程序,其中操作系统起到“承上启下”的关键作用,向下管理物理硬件,向上为操作系服务和应用程序提供接口,这里的接口就是系统调用了。
一般地,操作系统为了考虑实现的难度和管理的方便,它只提供一少部分的系统调用,这些系统调用一般都是由C和汇编混合编写实现的,其接口用C来定义,而具体的实现则是汇编,这样的好处就是执行效率高,而且,极大的方便了上层调用。
- 操作系统为用户态运行的进程和硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口,即就是设置在应用程序和硬件设备之间的一个接口层。可以说是操作系统留给用户程序的一个接口。再来说一下,linux内核是单内核,结构紧凑,执行速度快,各个模块之间是直接调用的关系。放眼望整个linux系统,从上到下依次是用户进程->linux内核->硬件。其中系统调用接口是位于Linux内核中的,如果再稍微细分一下的话,整个linux系统从上到下可以是:用户进程->系统调用接口->linux内核子系统->硬件,也就是说Linux内核包括了系统调用接口和内核子系统两部分;或者从下到上可以是:物理硬件->OS内核->OS服务->应用程序,其中操作系统起到“承上启下”的关键作用,向下管理物理硬件,向上为操作系服务和应用程序提供接口,这里的接口就是系统调用了。
- 库函数(Library fuction)
- 顾名思义是把函数放到库里。是把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。(由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口)
libc中就是一个C标准库,里面存放一些基本函数,这些基本函数都是被标准化了的,而且这些函数通常都是用汇编直接实现的。
库函数一般可以概括的分为两类,一类是随着操作系统提供的,另一类是由第三方提供的。随着系统提供的这些库函数把系统调用进行封装或者组合,可以实现更多的功能,这样的库函数能够实现一些对内核来说比较复杂的操作。比如,read()函数根据参数,直接就能读文件,而背后隐藏的比如文件在硬盘的哪个磁道,哪个扇区,加载到内存的哪个位置等等这些操作,程序员是不必关心的,这些操作里面自然也包含了系统调用。而对于第三方的库,它其实和系统库一样,只是它直接利用系统调用的可能性要小一些,而是利用系统提供的API接口来实现功能(API的接口是开放的)。部分Libc库中的函数的功能的实现还是借助了系统掉调用,比如printf的实现最终还是调用了write这样的系统调用;而另一些则不会使用系统调用,比如strlen, strcat, memcpy等。
- 顾名思义是把函数放到库里。是把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。(由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口)
实际上,系统调用所提供给用户的是直接而纯粹的高级服务,如果想要更人性化,具有更符合特定情况的功能,那么就要我们用户自己来定义,因此就衍生了库函数,它把部分系统调用包装起来,一方面把系统调用抽象了,一方面方便了用户级的调用。系统调用和库函数在执行的效果上很相似(当然库函数会更符合需求),但是系统调用是运行于内核状态;而库函数由用户调用,运行于用户态。 系统调用是为了方便使用操作系统的接口,而库函数则是为了人们编程的方便。 从实施者的角度,系统调用和库函数之间有重大区别,但从用户角度其区别并不非常重要。
c) 用户和内核空间
- 用户空间(User space)
- 用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响。只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发出指令
- 内核空间(Kernel space)
- 指Linux 内核的运行空间,可以执行任意命令,调用系统的一切资源
8、UNIX发展史
a) UNIX发展简史
1946年:世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生,目的是用来计算炮弹弹道,重达30吨。
1947年:BELL实验室发明晶体管。
1958年:TI发明集成电路。 1969年之前,BELL实验室、MIT、GE联合开发Multics。 1969年:BELL的Ken Thompson为自己开发了Unics(这个是戏称的非正式的名称,因为思想源自Multics)。 1971年:Intel发布第一微处理器4004。 1973年:UNIX正式诞生,BELL实验室的Dennis开发出C语言,并用C语言重写了Unics,正式取名UNIX。 1977年:UNIX分支--BSD诞生,加州伯克利大学Bill Joy取得了UNIX的源代码,加以修改和完善,成为UNIX重要分支BSD-UNIX。之后的x86上的FreeBSD就是BSD改版而来。 1979年:AT&T宣布收回UNIX版权,不再开放,同时发布System V架构的UNIX。期间众多公司的UNIX系统纷纷出现。 1979年:Intel推出8086/8088 CPU。 1981年:IBM发布IBM PC,x86架构的PC机开始流行。 1984年:x86架构的Minix操作系统诞生。 1984年:Stallman启动GNU项目,目的是开放一个自由、开源的UNIX(Free UNIX)。由于工程浩大,Stallman决定先编写应用程序,如GCC,Emacs等出现。 1988年:XFree86诞生,即x86版UNIX上的GUI系统。 1991年:Linux诞生,Linus Torvalds发布的运行在386机器上的内核程序。 2008年:Google发布基于Linux的手机操作系统android。
b) UNIX发展史博文
分享一篇以故事形式编写的UNIX发展史博文。 http://www.cnblogs.com/Dodge/articles/4264833.html
9、开源协议
License就是版权许可证,里面详尽表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的。软件的版权许可证可有很多方式,本文仅限于讨论开源软件协议 Open Source License。 世界上的开源许可证(Open Source License)大概有上百种,而我们常用的开源软件协议大致有GPL、BSD、MIT、Mozilla、Apache和LGPL。我们不必要每个开源协议都了然于心,但是可以了解几个主要的协议的权利和义务。
乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择开源协议,汉化版详细如下:
如下更加清晰和完全一点的图:
10、Linux哲学思想
分享几条大咖前辈们总结的Linux哲学思想:
- 一切都是一个文件(包括硬件)
- 小型,单一用途的程序
- 链接程序,共同完成复杂的任务
- 避免令人困惑的用户界面
- 配置数据存储在文本中
以上是关于计算机基础知识及UNIX发展史的主要内容,如果未能解决你的问题,请参考以下文章
linux和unix编程基础,《linux和unix编程基础》实小验指导书.doc