ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:42.78KB ,
资源ID:7247195      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7247195.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(22齐天宇Linux作业.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

22齐天宇Linux作业.docx

1、22齐天宇Linux作业Linux内核分析大作业Linux内核的发展与结构姓名:齐天宇学号::2009201222摘 要操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集得支撑软件。在Linux的术语中被称为“内核”,也可以称为核心。Linux内核的主要模块主要有存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的引导、系统调用等。Linux内核及代码是高级程序员的必会课程之一,学习Linux内核不仅能帮我们了解Linux是怎么运作的,便于我们编写程序的时候考虑到操作系统的执行情况,还能够开拓我们的编程思路。为了更好的了解Linux的内核,本文从Linux内核的

2、背景概念、内核模块、发展、内核编译方面进行介绍。关键词: Linux内核;操作系统;发展目 录1.绪论 12.Linux内核的发展历史 13.Linux的模块机制 33.1模块的概念 33.2内核的作用 43.2.1进程管理 43.2.2内存管理 43.2.3文件系统 43.2.4设备控制 53.2.5网络 53.3 Linux内核的模块结构 5结 论 8参考文献 91.绪论在IT术语中,内核既是操作系统的心脏,也是它的大脑,因为内核控制着基本的硬件。内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、共享的写时拷贝(copy-on-write)可执行程序和TCP/

3、IP网络功能。2.Linux内核的发展历史Linux内核的起源可追溯到1991年芬兰大学生Linus Torvalds编写和第一次公布Linux的日子。尽管到目前为止Linux生态系统早已远远发展到了Torvalds本人之外的范围,但Torvalds仍保持着对Linux内核的控制权,并且是Linux名称的唯一版权所有人。自发布Linux 0.12版起,Linux就一直依照GPL(通用公共许可协议)自由软件许可协议进行授权。Linux快速从一个个人项目进化成为一个全球数千人参与的开发项目。对于 Linux 来说,最为重要的决策之一是采用GPL(GNU General Public License

4、)。在 GPL 保护之下,Linux内核可以防止商业使用,并且它还从GNU项目(Richard Stallman 开发,其源代码要比 Linux内核大得多)的用户空间开发受益。这允许使用一些非常有用的应用程序,例如GCC(GNU Compiler Collection和各种shell支持。尽管Linux绝对是最流行的开源操作系统,但是相对于其他操作系统的漫长历史来说,Linux的历史非常短暂。在计算机出现早期,程序员是使用硬件语言在裸硬件上进行开发的。缺少操作系统就意味着在某个时间只有一个应用程序(和一个用户)可以使用这些庞大而又昂贵的设备。早期的操作系统是在20世纪50年代开发的,用来提供简

5、单的开发体验。包括为IBM 701开发的General Motors Operating System(GMOS)和 North American Aviation为IBM 709开发的FORTRAN Monitor System(FMS)。在20世纪60年代,MIT(Massachusetts Institute of Technology)和一些公司为 GE-645开发了一个名为Multics(Multiplexed Information and Computing Service)的实验性的操作系统。这个操作系统的开发者之一 AT&T 后来退出了 Multics,并在 1970 年开发

6、了自己的名为Unics的操作系统。与这个操作系统一同诞生的是C语言,C语言就是为此而开发的,然后它们使用C语言对操作系统进行了重写,使操作系统开发具有可移植性。二十年后,Andrew Tanenbaum创建了一个微内核版本的UNIX,名为MINIX(代表 minimal UNIX),它可以在小型的个人计算机上运行。这个开源操作系统在 20 世纪 90 年代激发了Linus Torvalds开发Linux的灵感。主要Linux内核发行版简史如下图所示:Linux内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如read和write。系统调用接口之下是内核代码,可以更

7、精确地定义为独立于体系结构的内核代码。这些代码是Linux所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分。Red Hat、Novell、Debian和Gentoo等Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。3.Linux的模块机制由于内核中的各部件联系紧密,因此这种内核最重要的特点就是运行效率较高。但也就是由于内核中各部件联系

8、紧密,也给它带来了一个致命的缺点:当因某种原因需要增加、扩充时,用户必须对内核全部重新编译一次。所以,为了弥补这个缺点,Linux建立了模块机制。3.1模块的概念什么是模块?从代码的特征上来看,模块就是可完成一项独立功能的一组函数的集合。从使用特征上来看,它在被需要时可以随时被安装,而在不需要时又可以随时被卸载。总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块。从内核的角度来看,模块由在运行时可连接并删除的、包含了至少2个函数的代码段。这个代码段一旦被连接到内核,它就可以是内核的一部分,所以它也被叫做内核模块。在Linux系统中,若干并发进程会参加

9、不同的任务。每个进程都要求获得系统资源,可以是计算、内存、网络连接或别的资源。内核是一整块可执行代码,用它来负责处理所以这样的请求。尽管在不同的内核任务之间的区别不是总能清楚地标识出来,内核的作用还是可以划分的。3.2内核的作用3.2.1进程管理内核负责创建和终止进程,并且处理它们和外部世界的联系(输入和输出)。对整个系统功能来讲,不同进程之间的通信(通过信号、管道、进程间通信原语)是基本的,这也是由内核来处理的。另外,调度器,可能是整个操作系统中最关键的例程,是进程管理中的一部分。更广义的说,内核的进程管理活动实现了在一个CPU上多个进程的抽象概念。3.2.2内存管理计算机内存是主要资源,而

10、使用内存的策略是影响整个系统性能的关键。内核为每个进程在有限可利用的资源上建立了虚拟地址空间。内核不同部分通过一组函数与内存管理子系统交互,这些包括从简单的malloc/free到更稀奇古怪的功能。3.2.3文件系统Unix系统是建立在文件系统这个概念上的。Unix里几乎所有东西都可以看作文件。内核在非结构的硬件上建立了结构化的文件系统,这个抽象的文件被系统广泛应用。另外,Linux支持多文件系统类型,即物理介质上对数据的不同组织方法。3.2.4设备控制几乎每种系统操作最后都要影射到物理设备上。除了处理器、内存和少数其他实体外,几乎所有设备的控制操作都由设备相关的代码来实现。这些代码就是设备驱

11、动程序。内核必须为每个外部设备嵌入设备驱动程序,从硬盘驱动器到键盘和磁带。 3.2.5网络网络必须由操作系统来管理,由于大多数网络操作不是针对于进程的:接收数据包是异步事件。数据包必须在进程处理它们以前就被收集,确认和分发。系统通过程序和网络接口发送数据包,并且应该可以正确地让程序睡眠,并唤醒等待网络数据的进程。另外,所有路由和地址解析问题都是在内核里实现的。3.3 Linux内核的模块结构Linux的一个很好的特性就是,它可以在运行的时候扩展内核代码,也就是说在系统运行的时候你可以增加系统的功能。每个可以增加到内核中的代码称为一个模块。Linux内核支持相当多的模块类型(或“类”),但不仅仅

12、只局限于设备驱动程序。每个模块由目标代码组成(没有连接成完整的可执行文件),通过insmod程序它们可以动态连接到运行着的内核中,而通过rmmod程序就可以去除这些模块。从用户的角度来看,模块是内核的一个外挂的配件:需要时可将其挂接到内核上,以完成用户昕要求的任务:不需要时即可将其删除。它给用户提供了扩充内核功能的手段。那我们下面来看看Linux内核模块结构。1.模块加载函数: module_init(initialization_funciton);2.模块卸载函数: module_exit(cleanup_function);3.模块参数:module_param(参数名,参数类型,参数读

13、/写权限)在模块插入时: insmod 模块名 参数名=参数值eg:static char *book_name = Linux 设备驱动 ;static int num = 4000;module_param(num, int , S_IRUGO);module_param(book_neme ,charp, S_IRUGO);参数类型: byte, short, ushort, int uint, long , ulong, charp(字符指针), bool,4.导出符号 (建议有)EXPORT_SYMBOL( 符号名/函数名)EXPORT_SYMBOL_GPL(符号名 /函数命)5.模

14、块声明MODULE_LICENSE( DualBSD/GPL );MODULE_AUTHOR ( XXXXX);MODULE_DESCRIPTION(XXXXX DRIVER);MODULE_VERSION( XXXX VERSION);MODULE_DEVICE_TABLE(TABLE_INFO);MODULE_ALISA(XXXXXXX);6.驱动模块的编译开发好的模块程序可以和内核一起编译,也就是将模块编译进内核,也可以将模块单独编译成一个独立的模块。为了开发的方便性,我们把驱动程序编译成模块,怎么编译呢?编译成什么格式呢?在Linux中我们都是借助顶级目录的Makefile来编译我们写

15、的驱动程序,我可以自己写一个Makefile来编译我们写的驱动:eg:obj-m := xxx.oxxx.o-objs := xxx1.o xxx2.omake -C Linux 源码顶级Makefiel路径 M = pwd modulesclean:rm -rf *.o在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码。Linux内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务

16、,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。随着时间的流逝,Linux内核在内存和CPU使用方面具有较高的效率,并且非常稳定。但是对于Linux来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是Linux可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供MMU的处理器上运行。Linux内核的uClinux移植提供了对非MMU的支持。结 论学习Linux需要学习一些操作系统的理论知识,比如:进程、线程、内存管理、设备管理等。一定要记住一些常用的命令,这是学习Linux的基础,使用Linux系统命令时非常非常重要的。Linux的内核空间和用户空间是分离开的,它们通过一些函数调用来交换数据,所以命令就显得格外重要了。通过学习Linux,我知道了编写程序的时候需要考虑到操作系统的执行情况,这样开拓我们的编程思路,为以后的工作,学习有很大帮助。参考文献1.陈丽君.Linux操作系统原理与应用.北京:清华大学出版社,2006.12.陈丽君.Linux操作系统内核分析.北京:人民邮电出版社,20003.王小英.Linux系统与应用.中国电力大学出版社,2009.1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1