Linux 核心--3.软件基础

2016-01-29 19:41 5 1 收藏

Linux 核心--3.软件基础,Linux 核心--3.软件基础

【 tulaoshi.com - Linux 】

  第二章 软件基础 

程序是执行某个特定任务的计算机指令集合。程序可以用多种程序语言来编写:从低级计算机语言-汇编语言到高级的、与机器本身无关的语言入C程序语言。操作系统是一个允许用户运行如电子表格或者字处理软件等应用程序的特殊程序。本章将介绍程序设计的基本原则,同时给出操作系统设计目标与功能的概述。 


2.1 计算机编程语言
2.1.1 汇编语言
那些CPU从主存读取出来执行的指令对人类来说是根本不可理解的。它们是告诉计算机如何准确动作的机器代码。在Intel 80486指令中16进制数0x89E5表示将ESP寄存器的内容拷入EBP寄存器。为最早的计算机设计的工具之一就是汇编器,它可以将人们可以理解的源文件汇编成机器代码。汇编语言需要显式的操作寄存器和数据,并且与特定处理器相关。比如说Intel X86微处理器的汇编语言与Alpha AXP微处理器的汇编语言决然不同。以下是一段Alpha AXP汇编指令程序: 

    ldr r16, (r15)    ; Line 1
    ldr r17, 4(r15)   ; Line 2
    beq r16,r17,100   ; Line 3
    str r17, (r15)    ; Line 4
100:                  ; Line 5


第一行语句将寄存器15所指示的地址中的值加载到寄存器16中。接下来将邻接单元内容加载到寄存器17中。 第三行语句比较寄存器16和寄存器17中的值,如果相等则跳转到标号100处,否则继续执行第四行语句:将 寄存器17的内容存入内存中。如果寄存器中值相等则无须保存。汇编级程序一般冗长并且很难编写,同时还容易出错。 Linux核心中只有很少一部分是用汇编语言编写,并且这些都是为了提高效率或者是需要兼容不同的CPU。 


2.1.2 C编程语言和编译器
用汇编语言编写程序是一件困难且耗时的工作。同时还容易出错并且程序不可移植:只能在某一特定处理器 家族上运行。而用C语言这样的与具体机器无关的语言就要好得多。C程序语言允许用它所提供的逻辑算法来 描叙程序同时它提供编译器工具将C程序转换成汇编语言并最终产生机器相关代码。好的编译器能产生和汇编语言程序相接近的效率。Linux内核中大部分用C语言来编写,以下是一段C语言片段: 

        if (x != y)
                x = y ;

它所执行的任务和汇编语言代码示例中相同。如果变量X的值和变量Y的不相同则将Y的内容赋予X。C代码被 组织成子程序,单独执行某一任务。子程序可以返回由C支持的任何数据类型的值。较庞大的程序如Linux 核心由许多单独的C源代码模块组成,每个模块有其自身的子程序与数据结构。这些C源代码模块将相关函数组合起来完成如文件处理等功能。 C支持许多类型的变量,变量是一个通过符号名称引用的内存位置。在以上的例子中,X和Y都是内存中的位置。程序员并不关心变量放在什么地方,这些工作由连接程序来完成。有些变量包含不同类型的数据,整数和浮点数,以及指针。 指针是那些包含其他数据内存位置或者地址的变量。假设有变量X,位于内存地址0x80010000处。你可以使用指针变量px来指向X,则px的值为0x80010000。 C语言允许相关变量组合起来形成数据结构,例如: 

        struct {
                int i ;
                char b ;
        } my_struct ;

这是一个叫做my_struct的结构,它包含两个元素,一个是32位的整数i,另外一个是8位的字符b。 


2.1.3 连接程序
连接程序是一个将几个目标模块和库过程连接起来形成单一程序的应用。目标模块是从汇编器或者编译器中产生的机器代码,它包含可执行代码和数据,模块结合在一起形成程序。例如一个模块可能包含程序中所有的数据库函数而另一个主要处理命令行参数。连接程序修改目标模块之间的引用关系,使得在某一模块中引用的数据或者子程序的确存在于其他模块中。Linux核心是由许多目标模块连接形成的庞大程序。 


2.2 操作系统概念 
如果没有软件,计算机只不过是一堆发热的电子器件。如果将硬件比做计算机的心脏则软件就是它的灵魂。操作系统是一组系统程序的集合,它提供给用户运行应用软件的功能。操作系统对系统硬件进行抽象,它提供给系统用户一台虚拟的机器。大多数PC可以运行一种或者多种操作系统,每个操作系统都有不同的外观。Linux由许多独立的功能段组成。比如Linux内核,如果没有库函数和外壳程序,内核是没有什么用的。 为了理解操作系统到底是什么,思考一下当你敲入一个简单命令时,系统中发生了什么: 


$ ls
Mail            c               images          perl
docs            tcl
$ 


$符号是由用户登录外壳(这里指Bash)提供的提示符。它表示正在等待用户敲入一些命令。敲入ls命令,首先键盘驱动程序识别出敲入的内容

来源:http://www.tulaoshi.com/n/20160129/1509915.html

延伸阅读
  原著: David A Rusling 翻译: Banyan & fifa -------------------------------------------------------------------------------- 本书是为那些想了解Linux内核工作原理的Linux狂热爱好者而写。 它并非一本内部手册。主要描叙了Linux设计的原理与机制;以及Linux内核怎样工作及其原因。 Linux...
  第十四章 Linux核心资源 本章主要描叙寻找某个特殊核心函数时用到的Linux核心资源。 本书并不要求读者具有C编程语言的能力或者拥有Linux核心源代码来理解Linux核心工作原理。但是如果 对核心源代码进行阅读将加深对Linux操作系统的理解。本章提供了一个核心源代码的综述。 从哪里得到Linux核心源码 所有主要Linux分发版本...
  第八章 设备驱动 操作系统的目的之一就是将系统硬件设备细节从用户视线中隐藏起来。例如虚拟文件系统对各种类型已安装的文件系统提供了统一的视图而屏蔽了具体底层细节。本章将描叙Linux核心对系统中物理设备的管理。 CPU并不是系统中唯一的智能设备,每个物理设备都拥有自己的控制器。键盘、鼠标和串行口由一个高级I/O芯片统一...
      1、什么是Linux? 准确的说,是指Linux的kernel(系统的核心程序),其内核版权属于Linus Torvalds,在GPL(GNU General Public License)版权协议下发行, 任何人都可以自由的复制(copy), 修改(change), 套装分发(distribute),销售,但是不可以在分发时加入任何限制, 而且所有原码必须是公开的,所以任何人都...
  第三章 存储管理 存储管理子系统时操作系统中最重要的组成部分之一。在早期计算时代,由于人们所需要的内存数目远远大于物理内存,人们设计出了各种各样的策略来解决此问题,其中最成功的是虚拟内存技术。它使得系统中为有限物理内存竞争的进程所需内存空间得到满足。 虚拟内存技术不仅仅可让我们可以使用更多的内存,它还提供了...

经验教程

273

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部