第一周
1. 描述计算机的组成及其功能
计算机的组成
一般而言,计算机的组成应该分为两部分:
一部分指的是硬件部分。根据冯诺伊曼提出的计算机体系架构,一台计算机主要分为五个部分:控制器、运算器、存储器、输入设备、输出设备
二部分指的是计算机软件。包括汇编语言、系统软件及应用软件,他们不像硬件一样“有形”,但只有软件硬件互相配合,才是一台标准的计算机组成
各组成的功能
硬件部分
控制器(Control):CPU的组成部分之一。相当于计算机的中枢神经,通过控制器,可以有效的控制和协调整个计算机的操作
运算器(Datapath):CPU的组成部分之一。包含算数逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等
通用寄存器组:可用于传送和暂存数据,也可以参与算术逻辑运算,保存运算结果,通用寄存器组包括以下几类:数据寄存器、变址寄存器、指针寄存器、段寄存器、指令指针寄存器
存储器(memory):存储程序和数据,并能在计算机运行过程中高速、自动地完成从程序或数据的存取,也就是俗称的内存RAM(Random Access Memory)
输入设备(Input):外部设备之一。作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据输入到计算机。常见的输入设备有:键盘、鼠标、磁带机、磁盘机、光盘机等
输出设备(Output):外部设备之一。作用是把计算机的中间结果或最后结果、机内的各种数据及文字等信息输出来。常见的输出设备有:CRT、打印机、绘图仪等
软件部分
汇编语言(assembly language):一种用于cpu的低级语言。它使用助记符代替二进制语言,方便人类的阅读及操作。但一种汇编语言只能与相对应的计算机系统结构对应,无法在不同平台移植
系统软件(system software):用来运行或控制硬件所开发的计算机软件,如操作系统、编译器、数据库等等
2. 描述内核功能以及作用
内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是一个操作系统的核心,是操作系统最基本的部分。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统等,决定着系统的性能和稳定性。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
一个内核不是一套完整的操作系统。比如一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
进程管理:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。 另外, 调度器, 控制进程如何共享CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个CPU 之上的抽象。
内存管理:计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单的malloc/free对到更多更复杂的功能。
文件管理:Linux 在很大程度上基于文件系统的概念;几乎Linux中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准Linux的ext3文件系统,普遍使用的FAT文件系统,或者其他几个文件系统。
驱动管理:几乎每个系统操作终都映射到一个物理设备上,除了处理器,内存和非常少的别的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行。这些代码称为设备驱动。内核中必须嵌入系统中出现的每个外设的驱动,从硬盘驱动到键盘和磁带驱动器。
网络管理:网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发,系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。
3.按系列罗列常见Linux的发行版,并描述不同发行版之间的联系与区别
Linux是一种自由和开放源代码的类Unix操作系统。该操作系统的内核由Linus Torvalds于1991年10月5日首次发布。根据其发布的内核(kernel)搭配上GNU上的应用程序,成为了当今世界上运用领域最广泛、使用人数最多的操作系统。通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版。
Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。个人计算机使用的Linux发行版通常包含X Window和一个相应的桌面环境,如GNOME或KDE.
什么是Linux发行版
Linux发行版(Linux distribution)
是一种为一般用户预先集成好的Linux操作系统及各种应用软件。一般不需要用户重新编译,在直接安装之后,只需要作出小幅度的更改设置即可。Linux发行版通常包含了桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常使用Linux、以及来自GNU计划的软件、和基于X Window的图形界面组成。
Linux发行版通常分为商业发行版和社区发行版。也有少部分既不属于发行版又不属于社区发行版,其中最有名的是Slackware.
著名的Linux发行版
按照程序包管理器的不同,通常Linux的发行版也被分成了不同的派系。
首先说一下什么是程序包管理器
程序本身是由二进制程序、配置文件、库文件以及帮助文件组成的。有时候我们发现,可能一个程序会有很多文件,非常不利于安装卸载管理,于是,又产生了程序包管理器。
程序包管理器的作用:
1)程序的组成文件打包成一个或有限几个文件;
2) 安装;
3) 卸载;
4) 查询;
因此,我们可以划分如下
Redhat系
Slackware系
Debian系
其他
发行版之间的不同
在Linux发行版中,通常均使用软件包管理系统,不同的操作系统,软件包管理系统也不尽相同。比较常见的软件包管理系统有以下几种
dpkg:一般为Debian系使用,前端管理工具为apt-get
rpm(The RPM Package Manager):一般为Red Hat系使用,S.u.S.E也有使用,前端工具包含多种:
yum:作为RHEL及CentOS的前端工具
dnf:作为Fedora的前端工具
ZYpper:作为S.u.S.E及opensuse的前端工具
urpmi:作为Mandriva Linux及Mageia的前端工具
4. 描述常见的开源协议(GPL,LGPL, BSD,Apache等)以及开源协议的区别
软件开源是许多软件企业需要关注的问题,不同的开源软件协议,对应不同的源代码使用限制。只有了解这些开源软件协议,才能更好地使用和回馈开源软件,否则就有可能触犯法律。今天介绍四种常见的开源软件协议:
GPL(GNU General Public License)LGPL(GNU Lesser General Public License)BSD(Berkerley Software Distribution)Apache License
GPL
GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。
GPL的“传染性”在于:只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。我们所熟悉的Linux就是采用了GPL。
LGPL
LGPL是GPL的一个为主要为类库使用设计的开源协议。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
BSD
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
当使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议;如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议;不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。因此,很多公司企业在选择开源软件的时候都首选BSD协议,因为可以完全控制这些第三方的代码,而且在必要的时候可以进行修改或者二次开发。
Apache License
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
需要给代码的用户一份Apache Licence;如果你修改了代码,需要在被修改的文件中说明;在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
5. 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述
- 一切皆文件:把几乎所有资源统统抽象为文件形式,包括硬件设备,甚至通信接口等 比如说:
- 物理终端:/dev/console
- 虚拟终端:/dev/tty#(#为1~6)
- 串行终端:/dev/ttyS#
- 伪终端:/dev/pts/#
- 把所有资源抽象成文件,不仅便于理解,且有助于管理
- 单一目的的小程序:一个程序只做一件事
- 组合小程序完成复杂任务:复杂的任务由多个程序组合完成
- 尽量避免跟用户交互
- 易于以编程的方式实现自动化任务
- 使用文本文件保存配置信息
- 文本是最易于实现的底层接口表现形式。通过文本保存,就可以使用文本编辑器实现大多数程序的管理工作
- 提供机制,而非策略:
- 机制,是实现某个功能需要的原语操作和结构
- 策略,是某功能的具体实现
- 提供机制,而非策略,指的就是要给用户充分的自主可调配性
6. 描述linux目录结构以及目录结构命名规定
-
Linux系统不同的目录可以分布在不同的分区或者不同的硬盘设备上,这是windows难以做到的。目录和磁盘分区没有关联。
-
挂载点是系统进入设备的入口。如mount /dev/cdrom /mnt就是把/mnt与/dev/cdrom联系起来。
-
所有的目录都是按照一定的类别有规律的组织和命名的。FHS(目录层次结构)是Linux的目录规范标准
[FHS(目录层次结构)]
Linux系统中常见目录功能如下:
- / 根目录; 文件系统的入口,最高一级目录
- /bin 常用的二进制命令目录;和/usr/bin类似
- /boot 存放内核以及启动所需的文件
- /dev 存放设备文件目录,比如声卡,磁盘,光驱等。
- /etc 存放系统配置文件
- /home 普通用户的家目录,用户数据存放在其主目录中
- /lib|lib64 存放必要的运行库
- /mnt 一般是用于临时挂载存储设备的挂载目录,比如有cdrom,U盘等目录,直接插入光驱无法使用,要先挂载后使用
- /proc 存放存储进程和系统信息
- /root 超级用户的家目录
- /sbin 大多涉及系统管理的命令的存放,是超级权限用户root可执行命令存放地,这个目录和/usr/sbin,/usr/X11R6/sbin或/usr/local/sbin目录是相似的
- /tmp 存放临时文件
- /usr 存放应用程序,命令程序文件、程序库、手册和其它文档
- /var 存放系统日志和缓存日志的目录。