我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特码 > 多处理机系统 >

急求一篇与处理机管理有关的论文

归档日期:08-10       文本归类:多处理机系统      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  2014-01-22展开全部【摘 要】文章从Unix、Minix系统的产生引出了Linux操作系统,详细介绍了Linux操作系统的产生过程,分析了Linux的网络集市式开发模式,并通过研究Linux的发展过程,分析并介绍了Linux的主要特点及功能。

  一、Linux的产生Linux是一种计算机操作系统,通常被称为类Unix系统,这是因为Linux和Unix有着很深的渊源。

  在计算机非常昂贵的年代,只有在大学或大型企业中才能够接触到计算机,人们非常希望多个用户能同时连接到一台计算机并同时使用它。于是,计算机科学家开始研究分时系统。分时系统是将CPU的运行时间分为很小的时间片,多个用户任务可以通过交替占有时间片的方式实现快速交互使用CPU。由于时间片是很短的一段时间,以至于每个用户任务、每个用户好像在独占CPU,独占整个计算机系统。在研究人员的不懈努力下,1969年,AT&T公司贝尔实验室开发出了Unix系统。

  1986年,芬兰赫尔辛基大学的Andrew Tanenbaum教授为了给学生讲授《计算机操作系统》课程,开发出了Minix系统,这是Unix的一个变体。1991年,Andrew Tanenbaum教授的学生Linus Torvalds,由于对课堂上使用的Minix系统不太满意,于是开始在386 PC机上试着改进Minix系统。

  1991年8月,Linus Torvalds在comp.os.minix新闻组贴上了以下这段话:“你好,所有使用minix的人,我正在为386(486)AT做一个免费的操作系统,只是为了爱好,……”

  Linus最初为自己的这套系统取名为freax,他将源代码放在了芬兰的一个FTP站点上供大家下载。该站点的管理员认为这个系统是Linus的Minix系统,因此建立了一个名为Linux的文件夹来存放它。于是,Linus的“爱好”就成了今天微软的头号对手,功能强大且价格低廉的Linux操作系统。

  Linux1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好,至今人们还在津津乐道于此。

  Linux的 和 是一只名字叫做 的 ,Linux的是Linus Torvalds所有的。这是由于在 ,一个名字叫做William R. Della Croce的律师开始向各个Linux发布商发信,声明他拥有Linux 的所有权,并且要求各个发布商支付版税,这些发行商集体进行上诉,要求将该注册商标重新分配给Linus Torvalds。

  二、Linux的开发模式Linus于1991年10月5日发布了Linux的第一个版本Linux 0.0.2,并在网络上公布了Linux核心程序的源代码,同时决定以GPL(大众所有版权,又称GUN通用公共许可证)的方式来发行传播,也就是说这个软件允许任何人以任何形式进行修改和传播。

  随着网络的日益盛行,越来越多的技术高超的程序员加入到Linux的开发与完善中来。在这个过程中,无数的富有个性和开创性的程序员在没有计较任何酬劳的前提下,完全自发的加入到开发行列中来。一旦一个程序员完成了其中的部分程序,他便会立即将这个程序发表,并免费将它发给任何一个需要的人,而其他的一些程序员研究它后将会对它修正和改良,然后将它发表。这个过程周而复始,因此Linux的改进速度是最快的,同时它的稳定性也是非常高的。

  所以,Linux并非仅由Linus一人开发,而是由全世界几百个程序员共同开发的,当然Linus为内核定了调子。这种集市型的开发模式促成了Linux系统的繁荣。可以说,Linux完全是一个热情、自由、开放的网络产物。

  三、Linux的发展Linux具有良好的兼容性和可移植性。大约在1.3版本之后,Linux开始向其他硬件平台上移植,包括号称最快的CPU——Digital Alpha。所以不要总把Linux与低档硬件平台联系到一块,Linux只是将硬件的性能充分发挥出来而已。Linux必将从低端应用横扫到高端应用!

  为了使Linux变的容易使用,Linux也有了许多发布版本,发布版实际上就是一整套完整的程序组合。现在已经有许多不同的Linux发行版和各自的版本号,为了不产生混淆,我们先解释一些常提到的术语。当我们提到的Linux时,一般是指“Real Linux”,即内核,是所有UNIX操作系统的“心脏”。但光有linux并不能成为一个可用的操作系统,还需要许多软件包,编译器、程序库文件、Xwindow系统等等。因为组合方式不同,面向用户对象不同,所以就有了许多不同的Linux发行版。

  越来越多的公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来。如今很多IT业界的大腕IBM、Intel、Oracle、Infomix、Sysbase、Corel、Netscape、CA、Novell等都宣布支持 Linux。商家的加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计算机爱好者,并且进入商业应用,成为打破某些公司垄断文化圈的希望所在。

  Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十分强大。比如你可以通过ftp、nfs等来安装Linux,用它来做网关等等。随着Linux的发展,衍生出来的应用恐怕出乎Linus本人最初的预料。如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统……常有新手问Linux能做什么?其实它不象那些中看不中用的操作系统,不在于你用它能干什么,而在于你想干什么。

  Linux系统是从UNIX发展来的。UNIX是世界上最流行的操作系统之一,它是一种实时操作系统,可以运行于大型和小型计算机上的多任务系统。但由于它比较庞大,而且价格昂贵,所以不适合PC机用户使用。而Linux正好弥补了这些缺点,同时还继承了UNIX大多数优点。由于它基于PC机上运行的操作系统,并且内核源代码是公开的,使得Linux成为时下最浒的操作系统。Linux是一种适用于PC机的计算机操作系统,它适合于多种平台,是目前唯一免费的非商品化操作系统。由于有结构清晰、功能强大等特点,它很快成为许多院校学生和科研机构的研究人员学习和研究的对象。在他们的热心努力下,Linux渐渐成为一个稳定可靠、功能完善的操作系统。Linux是由UNIX发展来的,它不仅继承了UNIX操作系统的特征,而且许多方面还超过了UNIX系统。另外它还有许多UNIX所不具有的优点和特征。它的源代码是开放的,可运行于许多硬件平台 ,支持多达32种文件,支持大量的外部设备等。 Linux有广泛的用处,它可用于:

  ?? Linux系统提供提供具有内置安全措施的分层的文件系统,支持多达32种文件系统。

  ?? Linux系统许多组成部分的源代码是开放的,任何人都能修改和重新发布它。

  ?? Linux系统不公可以运行许多自由发布的应用软件,还可以运行许多商业化的应用软件。

  在Linux中,每一个进程都有一个比实际物理空间大得多的进程虚拟空间,每个进程还保留一张页表,用于将本进程空间中的虚地址变换成物理地址,页表还对物理页的访问权限作了规定,从而达到存储保护的目的。

  在Linux中,进程是资源分配的基本单位,所有资源都是以进程为对象进行分配的,在一个进程的生命周期中,会用到许多系统资源,Linux的设计可以准确描述进程的状态和资源的使用情况,以确保不出现某些进程过度占用系统资源而导致另一些进程无休止地等待的情况。

  Linux最重要的特征之一就是支持多种不同的文件系统。在Linux中,一个分离的文件系统不是通过设备标志来访问,而是把它合到一个单一的目录树结构中去,通过目录访问。Linux把一个新的文件系统安装到系统单一目录树的某一目录下,则该目录下的所有内容被新安装的文件系统所覆盖,当文件系统被卸下后,安装目录下的文件将会被重新恢复。

  Linux提供多种进程间的通信机制,管道和信号是其中最基本两种,其他还有消息队列、信号灯及共享内存。为支持不同机器之间的进程通信,Linux还引入了机制。

  在Linux开发环境下,gcc是进行程序开发不可或缺的编译工具,是GUN C Compile的缩写,它是在GUN系统下的标准C编译器。gcc作为Linux平台下的标准C编译器,功能强大。人们可以使用gcc编译器编译单一文件的最基本的命令,正是有了gcc编译器人们才能使用它编译C源程序。

  gcc的完整格式是gcc [options] [filenames] ,编译选项指定的操作对给定的文件进行编译处理。在后面可以有多个编译选项,同时进行多个编译操作。

  下面介绍Linux系统中的文件以及与文件有关的操作。在C编程环境中,与文件有关的操作主要是I/O操作,即基于文件描述符的操作。此外,还将介绍其他一些与文件有关的操作。

  在Linux系统中,有关的I/O操作可以分为两类。它们是基于文件描述符的I/O操作和基于流I/O的操作。它们有各自不同的特点和优势。基于文件描述符的I/O操作是通过文件描述符对一个文件执行I/O操作的。文件是一个十分重要的概念。通常保存在外存中的数据都是以文件的形式保存的。文件描述符则是用于描述被打开文件的索引值。通常情况下,都是通过文件描述符打开一个文件执行I/O操作。

  文件和文件系统是重要而复杂的概念。文件是有名字的一组相关信息的集合。在Linux系统中,文件的准确定义是不包含有任何其他结构的字符流。通俗的说,就是文件中的字符与字符之间除了同属于一个文件之外,不存在任何其他的关系。文件中字符的关系,是由使用文件的应用程序来建立各解释的。每一个文件都具有特定的属性。Linux系统的文件属性比较复杂,主要包括文件类型和文件权限两个方面。

  Linux下的文件可以分为5种不同的类型 。它们是普通文件、目录文件、链接文件、设备文件和管道文件。

  普通文件也称正规文件,是最常见的一类文件,也是最常使用到的一类文件。其特点是不包含有文件系统的结构信息。通常所接触到的文件,包括图形文件、数据文件、文档文件、等等都属于普通文件。这种类型的文件按其内部结构又可细分为两个文件类型:文本文件和二进制文件。

  目录文件是用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通文件。

  链接文件是一种特殊的文件。它实际上是指向一个真实存在的文件的链接。根据链接对象的不同,链接文件又可以细分为硬链接文件和符号链接文件。

  设备文件是Linux中最特殊的文件。正是由于它的存在,使得Linux系统可以十分方便地访问外部设备。Linux系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备。这就使Linux系统可以很方便的适应不断发展的外部设备。

  管道文件也是一种很特殊的文件。主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。

  在Linux环境下,进程是一个十分重要的概念。按现在通行的认识,进程是具有一定功能的程序关于一个数据集合的一次执行过程。对一个特定程序来说,它的每一个正在运行中的副本都有自己的进程。就是说,如果用户在一个进程的一次运行尚未结束时再次启动该程序,则将有两个进程在运行这一程序。多个进程可以同时运行,各个进程之间相互隔开,除非不同进程之间需要进行数据交换,否则互不影响。

  一个进程的存在过程,可以分为进程的产生、进程的执行和进程的结束3个步骤。当一个程序被启动时,就产生一个新的进程。进程在系统内核的管理下得到执行。当某个进程执行完毕后,该进程就消亡了。

  Linux系统支持多个进程同时进行。所谓同时,其实是Linux系统在各个进程之间调度,轮流是每个进程占用CPU 的一个时间片。由于每个时间片和宏观的时间相比很小,而每个进程可以频繁的得到时间片,于是就使用户看到了多个进程“同时”运行的情况。在每个进程属性的安全信息里都设有一个优先级,系统根据它来决定各个进程从CPU获得的时间片的大小。

  用户在执行一个程序以完成一定的功能时,为了提高程序执行的效率,可以把一个程序设计成由若干个部分组成,由若干个部分组成,由若干个进程同时执行。这就是所谓并发程序的概念。此外,不同进程之间可能会需要相互合作,即进程通信和进程同步。

  当然,多个进程并不需要同上时间产生并都维持到整个程序运行结束。用户可以根据需要动态地产生结束进程。也就是说,一个进程可以派生另一个进程,这就是所谓父进程和了进程的关系。

  代码的重用性是当代计算机编程语言中一个重要的概念,可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码。

  整个文件的内容都会被装入可执行文件中;如果链接的是库,则只是从库存中找到程序中用到的变量和数,将它们装入可执行文件中,那些放在库中但是没有被程序所引用的变量和数则不会被链接到最终的可执行文件。

  对于任何典型的操作系统命令都由简单命令、参数、输入文件名、输出文件名、IO重定向文件名等组成。(关于以上术语的数据字典见下表)

  简单命令 一个Linux长命令可以有多个像gcc,more等这样的纯命令组成。其中每个纯命令如gcc,more就是这里说的简单命令

  参数 范例命令中的-g,-o就是参数,它们是命令的扩展,可以根据用户的不用需要提供相应的不同服务

  输入文件名 范例命令中的sun.c就是输入文件名,它相当于一个源文件,在文件的连接和复制的命令中也常常用到这样的文件

  输出文件名 范例命令中的moon就是输出文件名,它相当与一个目标文件,在文件的连接和复制的命令中也常常用到这样的文件

  IO重定向文件名 在Linux系统中所有的设备都被看作文件进行管理,IO文件(设备)作为输出的目标时是可以根据用户的需要进行调整的,IO重定向文件名就是用来指定IO文件(设备)名的

  main() 该模块调用其他模块实现命令解释功能,保证无论命令执行成功与否都在命令执行后返回命令提示符

  init_command() 使用singnal函数对进程进行处理,达到初始化命令的效果

  get_comln() 该模块接受用户键盘输入的所有字符并存入相应的字符数组,供其他模块使用

  get_simcom() 该模块对用户键盘输入的长命令进行分析并最终将长命令分割成数据字典一中的元素,存入相应的结构数组,供执行模块执行

  execute() 对各种的数据字典一中的元素进行最后的处理,完成区分前后台程序,封锁、开启键盘等功能

  get_simarg() 对简单命令进行分割,为执行模块提供最直接的信息

  get_word() 该过程用来记录输入文件名、输出文件名、IO重定向并存入相应的结构数组

  check() 用来区分长命令中各个数据字典一中的元素的标准,为分割长命令提供参考信息

  run_com() 该模块与操作系统底层联系,使用系统调用完成各个简单命令的最终执行

  /*要创建一个进程最基本的系统调用是fork,系统调用fork用于派生一个进程,此进程与*/

  /* O_RDONLY 在设备文件中有一个极其特殊的文件/dev/null 所有放入这一设备*

  /*dup是复制文件描述符,也就是说新得到的文件描述符和原来的文件描述符将*/

  /*关闭其他文件描述符,使得除了标准输入标准输出和错误输出两处设置的管道和I/O重定向*/

  /*进程控制execvp函数可装入并运行称为子进程的其他的可执行文件称为父进程的*/

  即使是最优秀的程序员也不可避免在编程时出现一些这样那样的错误。所有的程序在写好以后,都要经过测试,在调试过程中发现并改正程序中的错误。

  Gdb就是Linux下的一个功能强大的C程序的调试器,它能在程序运行时观察程序的内部结构和内存的使用情况。我们的测试就是通过gdb进行的。

  通过本次课程设计,我更加深刻的理解了大型软件(比如操作系统)结构的复杂和精巧。以及自己在软件编程中的巨大差距。在本次课程实践中我的收获有三点:

  第二, 第二明确了多个模块在互相调用中程序的复杂程度以及算法设计的失误在实际编码中带来的巨烦。

  第三, 在本次编写程序的过程中深切的感受到了“团队精神”在软件开发中的重要作用,以及协调工作的重要性和高效性。

  总之, 在这次课程设计中,我觉得自己得到了很大的进步,非常感谢老师为我们提供的这次机会。

本文链接:http://ticketsareus.net/duochulijixitong/1036.html