欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux学习之计算机基础理论

程序员文章站 2022-06-27 14:14:31
一、描述计算机的组成及其功能。 计算机系统是由硬件系统(hardware)和软件系统(software system)两部分组成。 硬件系统: 从硬件基本结构上来讲,计算机是由运算器、控制器、存储器、输入设备、输出设备五大部分组成的,每一部分分别按要求执行特定的基本功能。 1、运算器(算数逻辑单元A ......

一、描述计算机的组成及其功能。

计算机系统是由硬件系统(hardware)和软件系统(software system)两部分组成。

硬件系统:

从硬件基本结构上来讲,计算机是由运算器、控制器、存储器、输入设备、输出设备五大部分组成的,每一部分分别按要求执行特定的基本功能。

 

1、运算器(算数逻辑单元arithmetical and logical unit)的主要功能是对数据进行各种运算。这些运算除了常规的加、减、乘、除等基本的的算术运算之外,还包括能进行“逻辑判断”的逻辑处理能力,即“与”、“或”、“非”这样的基本逻辑运算以及数据的比较、位移等操作。

 

2、控制器(control unit) 控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 控制器从存储器中逐条取出指令,分析每条指令规定的是什么操作以及所需数据的存放位置等,然后根据分析的结果向计算机其它部分发出控制信号,统一指挥整个计算机完成指令所规定的操作。因此,计算机自动工作的过程,实际上是自动执行程序的过程,而程序中的每条指令都是由控制器来分析执行的,它是计算机实现“程序控制”的主要部件。 通常把控制器与运算器合称为*处理器(central processing unit-cpu)。工业生产中总是采用最先进的超大规模集成电路技术来制造*处理器,即 cpu 芯片。它是计算机的核心部件。它的性能,主要是工作速度和计算精度,对机器的整体性能有全面的影响。

 

3、存储器(memory unit)的主要功能是存储程序和各种数据信息,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器是具有“记忆”功能的设备,它具有两种稳定状态的物理期间来存储信息。这些器件也称为记忆元件。由于记忆元件只有两种稳定状态,因此在计算机中采用只有两个数码“0”和“1”的二进制来表示数据。记忆元件的两种稳定状态分别表示“0”和“1”。日常使用的十进制数必须转换成等值的二进制数才能存入存储器中。计算机中处理的各种字符,例如英文字母、运算符号等,也要转换成二进制代码才能存储和操作。 存储器是由成千上万个“存储单元”构成的,每个存储单元存放一定位数(微机上为8位)的二进制数,每个存储单元都有唯一的编号,称为存储单元的地址。“存储单元”是基本的存储单位,不同的存储单元是用不同的地址来区分的,就好像居民区的一条街道上的住户是用不同的门牌号码来区分一样。 计算机采用按地址访问的方式到存储器中存数据和取数据,即在计算机程序中,每当需要访问数据时,要向存储器送去一个地址指出数据的位置,同时发出一个“存放”命令(伴以待存放的数据),或者发出一个“取出”命令。这种按地址存储方式的特点是,只要知道了数据的地址就能直接存取。但也有缺点,即一个数据往往要占用多个存储单元,必须连续存取有关的存储单元才是一个完整的数据。 计算机在计算之前,程序和数据通过输入设备送入存储器,计算机开始工作之后,存储器还要为其它部件提供信息,也要保存中间结果和最终结果。因此,存储器的存数和取数的速度是计算机系统的一个非常重要的性能指标。


4、输入设备(input device) 用来向计算机输入各种原始数据和程序的设备叫输入设备。输入设备把各种形式的信息,如数字、文字、图像等转换为数字形式的“编码”,即计算机能够识别的用1和0表示的二进制代码(实际上是电信号),并把它们“输入”(input)到计算机内存储起来。键盘是必备的输入设备、常用的输入设备还有鼠标器、图形输入板、视频摄像机等。


5、输出设备(output device) 从计算机输出各类数据的设备叫做输出设备。输出设备把计算机加工处理的结果(仍然是数字形式的编码)变换为人或其它设备所能接收和识别的信息形式如文字、数字、图形、声音、电压等。常用的输出设备有显示器、打印机、绘图仪等。

 

系统软件:

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

 

基本概念:

各种应用软件,虽然完成的工作各不相同,但它们都需要一些共同的基础操作,例如都要从输入设备取得数据,向输出设备送出数据,向外存写数据,从外存读数据,对数据的常规管理,等等。这些基础工作也要由一系列指令来完成。人们把这些指令集中组织在一起,形成专门的软件,用来支持应用软件的运行,这种软件称为系统软件。一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具),是支持计算机系统正常运行并实现用户操作的那部分软件。系统软件一般是在计算机系统购买时随机携带的,也可以根据需要另行安装。

 

系统软件的主要特征是:

*与硬件有很强的交互性

*能对资源共享进行调度管理

*能解决并发操作处理中存在的协调问题

*其中的数据结构复杂,外部口多样化,便于用户反复使用

 

主要类别:

系统软件在为应用软件提供上述基本功能的同时,也进行着对硬件的管理,使在一台计算机上同时或先后运行的不同应用软件有条不紊地合用硬件设备。例如,两个应用软件都要向硬盘存入和修改数据,如果没有一个协调管理机构来为它们划定区域的话,必然形成互相破坏对方数据的局面。

 

操作系统

操作系统管理计算机的硬件设备,使应用软件能方便、高效地使用这些设备。在微机上常见的有:dos、windows、unix、os/2等。

计算机软件中最重要且最基本的就是操作系统(os)。它是最底层的软件,它控制所有计算机运行的程序并管理整个计算机的资源,是计算机裸机应用程序及用户之间的桥梁。没有它,用户也就无法使用某种软件或程序。

 

操作系统计算机系统的控制和管理中心,从资源角度来看,它具有处理机存储器管理、设备管理、文件管理等4项功能。

常用的系统有dos操作系统、windows操作系统、unix操作系统和linux、netware、mac os x等操作系统。

 

语言处理程序

编译软件cpu执行每一条指令都只完成一项十分简单的操作,一个系统软件或应用软件,要由成千上万甚至上亿条指令组合而成。直接用基本指令来编写软件,是一件极其繁重而艰难的工作。

计算机只能直接识别和执行机器语言,因此要计算机上运行高级语言程序就必须配备程序语言翻译程序,翻译程序本身是一组程序,不同的高级语言都有相应的翻译程序。

语言处理程序汇编语言汇编器,c语言编译、连接器等。

为了提高效率,人们规定一套新的指令,称为高级语言,其中每一条指令完成一项操作,这种操作相对于软件总的功能而言是简单而基本的,而相对于cpu的一眇操作而言又是复杂的。用这种高级语言来编写程序(称为源程序)就象用预制板代替砖块来造房子,效率要高得多。但cpu并不能直接执行这些新的指令,需要编写一个软件,专门用来将源程序中的每条指令翻译成一系列cpu能接受的基本指令(也称机器语言)使源程序转化成能在计算机上运行的程序。完成这种翻译的软件称为高级语言编译软件,通常把它们归入系统软件。目前常用的高级语言有vb、c++、java等,它们各有特点,分别适用于编写某一类型的程序,它们都有各自的编译软件。

 

数据库管理

数据库管理系统有组织地、动态地存贮大量数据,使人们能方便、高效地使用这些数据。

数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。

foxpro,access,oracle,sybase,db2和informix则是数据库系统

 

辅助程序

系统辅助处理程序也称为“软件研制开发工具”、“支持软件”、“软件工具”,主要有编辑程序调试程序、装备和连接程序、调试程序。

 

二、描述内核功能以及作用

内核结构:

操作系统是一个用来和硬件打交道并为提供一个有限服务集的低级。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在linux的术语中被称为"内核",也可以称为"核心"。linux内核的主要模块(或组件)分以下几个部分:存储管理、cpu和、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

 

三、按系列罗列常见linux的发行版,并描述不同发行版之间的联系与区别。

linux发行版(linux distribution)是一种为一般用户预先集成好的linux操作系统及各种应用软件。一般不需要用户重新编译,在直接安装之后,只需要作出小幅度的更改设置即可。linux发行版通常包含了桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常使用linux、以及来自gnu计划的软件、和基于x window的图形界面组成。

linux发行版通常分为商业发行版和社区发行版。也有少部分既不属于发行版又不属于社区发行版,其中最有名的是slackware.

著名的linux发行版

按照程序包管理器的不同,通常linux的发行版也被分成了不同的派系。

 

基于debian

debian

ubuntu

linux mint

knoppix

mepis

sidux

 

基于red hat

red hat enterprise linux

fedora

centos

scientific linux

oracle linux

 

 

基于slackware

slackware

zenwalk

 vectorlinux

suse

arch linux

puppy linux

 

基于gentoo

gentoo linux

sabayon linux

calculate linux

funtoo linux

 

 

 

debian系列,包括debian和ubuntu等。debian是社区类linux的典范,是迄今为止最遵循gnu规范 的linux系统。debian最早由ian murdock于1993年创建,分为三个版本分支(branch): stable, testing 和 unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经 过unstable中的测试,相对较为稳定,也支持了不少新技术(比如smp等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是 稳定和安全性都非常的高。debian最具特色的是apt-get / dpkg包管理方式,其实redhat的yum也是在模仿debian的apt方式,但在二进制文件发行方式中,apt应该是最好的了。debian的资 料也很丰富,有很多支持的社区,有问题求教也有地方可去:)

ubuntu严格来说不能算一个独立的发行版本,ubuntu是基于debian的unstable版本加强而来,可以这么说,ubuntu就是 一个拥有debian所有的优点,以及自己所加强的优点的近乎完美的 linux桌面系统。根据选择的桌面系统不同,有三个版本可供选择,基于gnome的ubuntu,基于kde的kubuntu以及基于xfc的 xubuntu。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的linux发行版本。

 

redhat系列,包括rhel(redhat enterprise linux,也就是所谓的redhat advance server,收费版本)、fedora core(由原来的redhat桌面版本发展而来,免费版本)、centos(rhel的社区克隆版本,免费)。redhat应该说是在国内使用人群最多 的linux版本,甚至有人将redhat等同于linux,而有些老鸟更是只用这一个版本的linux。所以这个版本的特点就是使用人群数量大,资料非 常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般linux教程都是以redhat为例来讲解的。redhat系列的包管 理方式采用的是基于rpm包的yum包管理方式,包分发方式是编译好的二进制文件。稳定性方面rhel和centos的稳定性非常好,适合于服务器使用, 但是fedora core的稳定性较差,最好只用于桌面应用。

 

gentoo,伟大的gentoo是linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点,这也是gentoo 被称为最完美的linux发行版本的原因之一。gentoo最初由daniel robbins(freebsd的开发者之一)创建,首个稳定版本发布于2002年。由于开发者对freebsd的熟识,所以gentoo拥有媲美 freebsd的广受美誉的ports系统 ——portage包管理系统。不同于apt和yum等二进制文件分发的包管理系统,portage是基于源代码分发的,必须编译后才能运行,对于大型软 件而言比较慢,不过正因为所有软件都是在本地机器编译的,在经过各种定制的编译参数优化后,能将机器的硬件性能发挥到极致。gentoo是所有linux 发行版本里安装最复杂的,但是又是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。

 

suse ag在商界已经奋斗了8年多,它一直致力于创建一个连接数据库的最佳linux版本。为了实现这一目的,suse与oracle 和ibm合作,以使他们的产品能稳定地工作。suse还开发了suse linux email server iii,一个非常稳定的电子邮件群组应用。基于2.4.10内核的suse 7.3,在原有版本的基础上提高了易用性。安装过程通过gui完成,磁盘分区过程也非常简单,但它没有为用户提供更多的控制和选择。在suse 操作系统下,可以非常方便地访问windows磁盘,这使得两种平台之间的切换,以及使用双系统启动变得更容易。suse的硬件检测非常优秀,该版本在服务器和工作站上都用得很好。suse拥有界面友好的安装过程,还有图形,可方便地访问windows磁盘,对于终端用户和管理员来说使用它同样方便,这使它成为了一个强大的服务器平台。 suse也通过基于web的论坛提供技术支持,另外我还发现它有电话技术支持。

 

四、描述常见的开源协议(gpl,lgpl, bsd,apache等)以及开源协议的区别

我们很熟悉的linux就是采用了gpl。gpl协议和bsd, apache licence等鼓励代码重用的许可很不一样。gpl的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。 


gpl(gnu general public license):
    gpl协议的主要内容是只要在一个软件中使用("使用"指类库引用,修改后的代码或者衍生代码)gpl 协议的产品,则该软件产品必须也采用gpl协议,既必须也是开源和免费。这就是所谓的"传染性"。gpl协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。 
    由于gpl严格要求使用了gpl类库的软件产品必须使用gpl协议,对于使用gpl协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。其它细节如再发布的时候需要伴随gpl协议等和bsd/apache等类似。 

lgpl(gnu lesser general public license):
    lgpl 是gpl的一个为主要为类库使用设计的开源协议。和gpl要求任何使用/修改/衍生之gpl类库的的软件必须采用gpl协议不同。lgpl允许商业软件通过类库引用(link)方式使用lgpl类库而不需要开源商业软件的代码。这使得采用lgpl协议的开源代码可以被商业软件作为类库引用并发布和销售。 
    但是如果修改lgpl协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用lgpl协议。因此lgpl协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以lgpl协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。 
    gpl/lgpl都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

 

bsd(berkeley software distribution)协议:

1、如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码中的bsd协定;

2、如果二次发布产品是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的bsd协定;

3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广;

 

apache licence:

apache licence是著名的非盈利开源组织apache采用的协议。该协议和bsd类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和bsd类似:

1、需要给代码的用户一份apache licence

2、如果你修改了代码,需要在被修改的文件中说明。

3、在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

4、如果再发布的产品中包含一个notice文件,则在notice文件中需要带有apache licence。你可以在notice中增加自己的许可,但不可以表现为对apache licence构成更改。

 

五、描述linux的哲学思想,并按照自己的理解对其进行解释性描述。

linux的哲学思想:         

1、一切皆文件:把几乎所有资源统统抽象为文件形式;包括硬件设备,甚至通信接口等;

2、  由众多功能单一的程序组成;一个程序只做一件事,并且做好;组合小程序完成复杂任务;

3、尽量避免跟用户交互;目标:易于以编程的方式实现自动化任务;

4、使用文本文件保存配置信息;

 

六、描述linux目录结构以及目录结构命名规定。

linux目录结构(倒置树状结构):

文件系统的层次结构标准fhs(filesystem hierarchy standard)        

/bin:所有用户可用的基本命令程序文件;

             /sbin:供系统管理使用的工具程序;

             /boot:引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等;

             /dev:存储特殊文件或设备文件;

                  设备有两种类型:字符设备(线性设备)、块设备(随机设备);

             /etc:系统程序的配置文件,只能为静态;

             /home:普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/username;

             /root:管理员的家目录;可选;

             /lib:为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块

                  libc.so.*:动态链接的c库;

                  ld*:运行时链接器/加载器;

                  modules:用于存储内核模块的目录;

             /lib64:64位系统特有的存放64位共享库的路径;

             /media:便携式设备挂载点,cdrom, floppy等;

             /mnt:其它文件系统的临时挂载点;

             /opt:附加应用程序的安装位置;可选路径;

             /srv:当前主机为服务提供的数据;

             /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;

             /usr:usr hierarchy,全局共享的只读数据路径;

                  bin, sbin

                  lib, lib64

                  include:c程序头文件;

                  share:命令手册页和自带文档等架构特有的文件的存储位置

                  local:另一个层级目录;

                  x11r6:x-window程序的安装位置

                  src:程序源码文件的存储位置

             /usr/local:local hierarchy,让系统管理员安装本地应用程序;也通常用于安装第三方程序;

             /var:/var hierarchy,存储常发生变化的数据的目录;

                  cache    application cache data

                  lib      variable state information

                  local    variable data for /usr/local

                  lock lock files

                  log      log files and directories

                  opt      variable data for /opt

                  run      data relevant to running processes

                  spool    application spool data

                  tmp      temporary files preserved between system reboots

 

             /proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward;

             /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理linux设备提供一种统一模型的的接口;

 

linux目录命令规定:

严格区分字符大小写:file1, file1, file1

目录也是文件,在同一路径下,两个文件不能同名;

支持使用除/以外的任意字符;

最长不能超过255个字符;