1. 计算机的组成及其功能
计算机由运算器,控制器,存储器,输入装置和输出装置五大部件组成计算机,每一部件分别按要求执行特定的基本功能。
(1)运算器或称算术逻辑单元(Arithmetical and Logical Unit) 运算器的主要功能是对数据进行各种运算。这些运算除了常规的加、减、乘、除等基本的算术运算之外,还包括能进行“逻辑判断”的逻辑处理能力,即“与”、“或”、“非”这样的基本逻辑运算以及数据的比较、移位等操作。
(2)存储器(Memory unit) 存储器的主要功能是存储程序和各种数据信息,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器是具有“记忆”功能的设备,它用具有两种稳定状态的物理器件来存储信息。这些器件也称为记忆元件。由于记忆元件只有两种稳定状态,因此在计算机中采用只有两个数码“0”和“1”的二进制来表示数据。记忆元件的两种稳定状态分别表示为“0”和“1”。日常使用的十进制数必须转换成等值的二进制数才能存入存储器中。计算机中处理的各种字符,例如英文字母、运算符号等,也要转换成二进制代码才能存储和操作。 存储器是由成千上万个“存储单元”构成的,每个存储单元存放一定位数(微机上为8位)的二进制数,每个存储单元都有唯一的编号,称为存储单元的地址。“存储单元”是基本的存储单位,不同的存储单元是用不同的地址来区分的,就好像居民区的一条街道上的住户是用不同的门牌号码来区分一样。 计算机采用按地址访问的方式到存储器中存数据和取数据,即在计算机程序中,每当需要访问数据时,要向存储器送去一个地址指出数据的位置,同时发出一个“存放”命令(伴以待存放的数据),或者发出一个“取出”命令。这种按地址存储方式的特点是,只要知道了数据的地址就能直接存取。但也有缺点,即一个数据往往要占用多个存储单元,必须连续存取有关的存储单元才是一个完整的数据。 计算机在计算之前,程序和数据通过输入设备送入存储器,计算机开始工作之后,存储器还要为其它部件提供信息,也要保存中间结果和最终结果。因此,存储器的存数和取数的速度是计算机系统的一个非常重要的性能指标。
(3)控制器(Control Unit) 控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 控制器从存储器中逐条取出指令,分析每条指令规定的是什么操作以及所需数据的存放位置等,然后根据分析的结果向计算机其它部分发出控制信号,统一指挥整个计算机完成指令所规定的操作。因此,计算机自动工作的过程,实际上是自动执行程序的过程,而程序中的每条指令都是由控制器来分析执行的,它是计算机实现“程序控制”的主要部件。 通常把控制器与运算器合称为中央处理器(Central Processing Unit-CPU)。工业生产中总是采用最先进的超大规模集成电路技术来制造中央处理器,即 CPU 芯片。它是计算机的核心部件。它的性能,主要是工作速度和计算精度,对机器的整体性能有全面的影响。
(4)输入设备(Input device) 用来向计算机输入各种原始数据和程序的设备叫输入设备。输入设备把各种形式的信息,如数字、文字、图像等转换为数字形式的“编码”,即计算机能够识别的用1和0表示的二进制代码(实际上是电信号),并把它们“输入”(INPUT)到计算机内存储起来。键盘是必备的输入设备、常用的输入设备还有鼠标器、图形输入板、视频摄像机等。
(5)输出设备(Output device) 从计算机输出各类数据的设备叫做输出设备。输出设备把计算机加工处理的结果(仍然是数字形式的编码)变换为人或其它设备所能接收和识别的信息形式如文字、数字、图形、声音、电压等。常用的输出设备有显示器、打印机、绘图仪等。
2. linux内核功能以及作用
①进程调度(SCHED) 进程调度负责控制进程对CPU的访问,如当需要选择下一个进程运行时,由进程调度子系统根据某种算法选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程。如果某个进程还在等待其它资源,则该进程将不会被选择。Linux操作系统使用了比较简单的基于优先级的进程调度算法选择新的进程。 ②.内存管理(Memory Management,MM) 内存管理子系统用来管理多个进程对内存的使用。Linux支持虚拟内存,即在计算机中运行的程序,其程序代码、数据、堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。 内存管理从逻辑上可以分为硬件无关部分和硬件有关部分。其中,硬件无关部分提供了进程的映射和逻辑内存的对换;硬件有关部分为内存管理硬件部分提供了虚拟接口。 ③.虚拟文件系统(Virtual File System,VFS) 虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。虚拟文件系统提供了数10种不同的文件系统,并且又分为逻辑文件系统和设备驱动程序。其中,逻辑文件系统是指Linux所支持的文件系统,如ext3、FAT等;设备驱动程序是指为每一种硬件控制器所编写的设备驱动程序模块。 ④.网络接口(Network Interface) 网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序2部分组成。其中,网络协议部分负责实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备的通信,每一种可能的硬件设备都有相应的设备驱动程序。 ⑤.进程通信(InterProcess Communication,IPC) 进程通信提供了进程之间的各种通信机制。所有其它的子系统都依赖于中心位置的进程调度,因为每个子系统都需要挂起或恢复进程。
3. Linux的发行版及不同发行版之间的联系与区别
Linux发行版主要有三个分支:Debian、Slackware、Redhat。
(1)Debian:(以社区的方式运作)
Ubuntu:基于Debian开发的开源Linux操作系统,主要针对桌面和服务器; Linux Mint:基于Debian和Ubuntu的Linux发行版,致力于桌面系统对个人用户每天的工作更易用,更高效,且目标是提供一种更完整的即刻可用体验。 (2)slackware
suse:基于Slackware二次开发的一款Linux,主要用于商业桌面、服务器。 SLES(SUSE Linux Enterprise Server(SLES):企业服务器操作系统,是唯一与微软系统兼容的Linux操作系统。 OpenSUSE:由suse发展而来,旨在推进linux的广泛使用,主要用于桌面环境,用户界面非常华丽,而且性能良好。 (3)Redhat
rhel(red hat enterprise Linux):Red Hat公司发布的面向企业用户的Linux操作系统。早起版本主要用于桌面环境,免费: Fedora:基于Red Hat Linux终止发行后,红帽公司计划以Fedora来取代Red Hat Linux在个人领域的应用,而另外发行的Red Hat Enterprise Linux取代Red Hat Linux在商业应用的领域。Fedora的功能对于用户而言,它是一套功能完备、更新快速的免费操作系统,而对赞助者Red Hat公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到Red Hat Enterprise Linux中。Fedora大约每六个月发布新版本。 Centos:基于Red hat Linux提供的可自由使用源代码的企业级Linux发行版本。每个版本的Centos都会获得十年的支持(通过安全更新的方式)。新版本的Centos大约每两年发行一次,而每个版本的Centos会定期(大概6个月)更新一次,以支持新的硬件。这样,建立一个安全、低维护、稳定、高预测性、高重复性的Linux环境。 (4)其他发行版本:
Gentoo:基于linux的自由操作系统,基于Linux的自由操作系统,它能为几乎任何应用程序或需求自动地作出优化和定制。追求极限的配置、性能,以及顶尖的用户和开发者社区,都是Gentoo体验的标志特点, Gentoo的哲学是自由和选择。得益于一种称为Portage的技术,Gentoo能成为理想的安全服务器、开发工作站、专业桌面、游戏系统、嵌入式解决方案或者别的东西--你想让它成为什么,它就可以成为什么。由于它近乎无限的适应性,可把Gentoo称作元发行版。 Aech Linux(或称Arch):以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅和代码最小化的设计宗旨。 不通发行版之间的联系和区别: 联系:所有发行版都是使用Linux内核;都需要遵循GNU的GPL协定;所有的发行版都有自己的版本号,版本格式约定基本一样(主版本号.次版本号.发行号.修正号)。 区别:发行版的本质区别,在于继承不同版本的内核,库、程序的组成。不同发行版几乎采用了不同包管理器(SLES、Fedora、openSUSE、centos、RHEL使用rmp包管理系统,包文件以RPM为扩展名;Ubuntu系列,Debian系列使用基于DPKG包管理系统,包文件以deb为扩展名。)
4.常见的开源协议(GPL,LGPL, BSD,Apache等)以及开源协议的区别
一、GPL
在自由软件所使用的各种许可证之中,最为人们注意的也许是通用性公开许可证(General Public License,简称GPL),GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。
GPL协议最主要的几个原则:
1.1、确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。
1.2、GPL 大致就是一个左侧版权(Copyleft,或译为“反版权”、“版权属左”、“版权所无”、“版责”等)的体现。你可以去掉所有原作的版权 信息,只要你保持开源,并且随源代码、二进制版附上 GPL 的许可证就行,让后人可以很明确地得知此软件的授权信息。GPL 精髓就是,只要使软件在完整开源 的情况下,尽可能使使用者得到自由发挥的空间,使软件得到更快更好的发展。
1.3、无论软件以何种形式发布,都必须同时附上源代码。例如在 Web 上提供下载,就必须在二进制版本(如果有的话)下载的同一个页面,清楚地提供源代码下载的链接。如果以光盘形式发布,就必须同时附上源文件的光盘。
1.4、开发或维护遵循 GPL 协议开发的软件的公司或个人,可以对使用者收取一定的服务费用。但还是一句老话——必须无偿提供软件的完整源代码,不得将源代码与服务做捆绑或任何变相捆绑销售。
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商 业软件公司开发的免费软件了。 GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题, 还可以享受免费的优势。 由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。 二、LGPL LGPL是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称GNU Library General Public License (GNU 库通用公共许可证),后来改称作Lesser GPL,即为更宽松的GPL,在宽松程度上与BSD, Apache,XFree86 许可证相似。GPL(General Public License)和LGPL是GNU的两种License。越来越多的自由软件(Free Software)使用GPL作为其授权声明,如果对GPL一点都不了解,有可能在使用自由软件时违反GPL的授权,恐怕会有被起诉的风险。所以任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。
LGPL 是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并 发布和销售。但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因 此LGPL协议的开源 代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。 GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。 三、BSD BSD许可证原先是用在加州大学柏克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkly Software Distribution的简写)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。BSD许可证被Apache和BSD操作系统等开源软件所采纳。 相较于GPL许可证和MPL许可证的严格性,BSD许可证就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。 四、Apache Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似: 4.1需要给代码的用户一份Apache Licence 4.2如果你修改了代码,需要在被修改的文件中说明。 4.3在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。 4.4如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
五、MIT MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其它的限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。MIT协议又称麻省理工学院许可证,最初由麻省理工学院开发。被授权人权利:1、被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。2、被授权人可根据程式的需要修改授权条款为适当的内容。被授权人义务:在软件和软件的所有副本中都必须包含版权声明和许可声明。
5.Linux的哲学思想
一切皆文件;由众多单一目的的小程序,一个程序只实现一个功能,多个程序组合完成复杂任务;组合小程序完成复杂任务;文本文件保存配置信息;尽量避免与用户交互;提供机制,而非策略。 一切皆文件:把几乎所有资源统统抽象为文件形式;包括硬件设备,甚至通信接口等;open(), read(), write(), close(), delete(), create(). 单一小程序:由众多功能单一的程序组成;一个程序只做一件事,并且做好;组合小程序完成复杂任务; 尽量避免与用户交互:目标易于以编程的方式实现自动化任务; 使用文本文件保存配置信息;
6.linux目录结构以及目录结构命名规定
Linux目录结构命名规定
几乎所有的Linux版本都会遵循FHS(Filesystem Hierarchy Standard),中文翻译过来即为文件系统层次化标准。类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
Linux目录结构
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:供所有用户使用的基本命令;不能关联至独立分区, OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
----b: block device,随机访问
----c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
--- bin:保证系统拥有完整功能而提供的应用程序
----lib:32位使用
--- lib64:只存在64位系统
----include: C程序的头文件(header files) share:结构化独立的数据,例如doc, man等
----local:第三方应用程序的安装位置
----bin, sbin, lib, lib64, etc, share
/var: variable data files
---- cache:应用程序缓存数据目录
---- lib:应用程序状态信息数据
-----local:专用于为/usr/local下的应用程序存储可变数据;
-----lock:锁文件
-----log:日志目录及文件
-----opt:专用于为/opt下的应用程序存储可变数据;
-----run:运行中的进程相关数据,通常用于存储进程pid文件
-----spool:应用程序数据池
tmp:保存系统两次重启之间产生的临时数据
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/proc:用于输出内核与进程信息相关的虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置