操作系统课程设计李胜利PPT课件.ppt_第1页
操作系统课程设计李胜利PPT课件.ppt_第2页
操作系统课程设计李胜利PPT课件.ppt_第3页
操作系统课程设计李胜利PPT课件.ppt_第4页
操作系统课程设计李胜利PPT课件.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 2 集群与网格计算湖北省重点实验室 服务计算技术与系统教育部重点实验室 3 操作系统课程设计2011 4 内容简介 设计目的设计内容实施方法及要求时间安排辅导 5 设计目的 掌握Linux操作系统的使用方法了解Linux系统内核代码结构掌握实例操作系统的实现方法 6 内容简介 设计目的设计内容实施方法及要求时间安排辅导 7 设计内容 1 要求熟悉和理解Linux编程环境内容编写一个C程序 使用Linux下的图形库 分窗口显示三个并发进程的运行 8 设计内容 2 要求掌握添加设备驱动程序的方法内容采用模块方法 添加一个新的设备驱动程序要求添加字符设备的驱动编写一个应用程序 测试添加的驱动程序 9 设计内容 3 要求理解和分析 proc文件内容了解 proc文件的特点和使用方法监控系统状态 显示系统中若干部件的使用情况用图形界面显示系统监控状态 10 设计内容 4 要求理解和掌握文件系统的设计方法 选做 内容设计 实现一个模拟的文件系统例如 最简单的方法 用一个文件实现所有的功能 复杂一点的方法 采用库文件的形式实现 11 内容简介 设计目的设计内容实施方法及要求时间安排辅导 12 实施方法及要求 每位同学都必须独立完成课程设计内容 上机考核演示所完成系统 并回答老师的问题 提交文本的课程设计报告 内容包括调试记录和程序清单 附注释 提交时间 第4周星期五 2010 3 26 以班为单位交东五楼206室 13 实施方法及要求 续 支持借鉴和学习已有的优秀知识 反对全盘拷贝 不求甚解 吸收和消化他人经验 做自己的课程设计 14 内容简介 设计目的设计内容实施方法及要求时间安排辅导 15 课程设计时间 第一周 第二周答疑 lslyx 考核现场考查时间 第二周周四 五全天 南一楼804 时间安排 16 联络方式 办公室电话 8754192487557047 8008 17 内容简介 设计目的设计内容实施方法及要求时间安排辅导 18 课程设计辅导 Linux系统的相关知识以RedhatLinux9 0为例进程并发添加1个系统调用添加设备驱动程序 proc文件分析 19 Linux系统的相关知识 Linux版本Linux通过简单的编号来区别内核的稳定版和开发版 每个版本用三个数字描述 由圆点分隔 前两个数表示版本号 第三个数表示发布号 如2 4 20 如果第二个数为偶数 则表示稳定的内核 否则 表示开发中的内核 稳定版的发布主要用来纠正用户所报告的错误 但实现内核的主要算法和数据结构基本不变 然而 开发版本间可能存在很大的差异 20 Linux系统的常用目录 文件目录结构 树型结构常用目录有 devLinux的所有设备文件 如 dev hda代表第一个物理IDE硬盘 etc系统管理所需要的配置文件和子目录 lib系统最基本的动态链接共享库 几乎所有的应用程序都需要用到这些共享库 21 Linux系统的常用目录 续 usr应用程序和文件几乎都存放在这个目录下 其中包含以下子目录 usr include开发和编译应用程序所需的头文件 usr lib常用的动态链接共享库和静态档案库 usr local一般用户的目录 在这里安装软件最适合 usr man帮助文档的存放目录 usr srcLinux的源代码目录 22 Linux系统的核心源码 Linux核心源代码位于 usr src linux下 archCPU类型相关的核心代码 每一个子目录代表一种CPU类型 例如i386就是关于IntelCPU及与之相兼容的体系结构的子目录 drivers所有的设备驱动程序 每种驱动程序又各占用一个子目录 如 block下为块设备驱动程序include编译核心所需要的大部分头文件 与平台无关的头文件在include linux子目录下 与IntelCPU相关的头文件在include asm i386子目录下 23 Linux系统的核心源码 续 Linux核心源代码还包括 Init包含核心的初始化代码 包含两个文件main c和version c 这是研究核心如何工作的一个非常好的起点 24 Linux系统的核心源码 续 mm 所有独立于CPU体系结构的内存管理代码 如页式存储管理中内存的分配和释放等 与体系结构相关的内存管理代码则位于arch mm 下 kernel 主要的核心代码 此目录下的文件实现了大多数Linux系统的内核函数 其中最重要的文件当属进程调度sched c 同样 和体系结构相关的代码在arch kernel中 25 课程设计辅导 Linux系统的相关知识以RedhatLinux9 0为例进程并发添加系统调用添加设备驱动程序 proc文件分析 26 进程并发 pid fork 创建子进程 返回值 0从子进程返回 0从父进程返回exit进程自我终止 进入僵死状态 仍然保留ask struct结构 wait 等待进程终止 由父进程调用 exec 执行一个可执行程序 文件 27 课程设计辅导 Linux系统的相关知识以RedhatLinux9 0为例进程并发添加系统调用添加设备驱动程序 proc文件分析 28 添加系统调用 Linux系统调用机制Linux内核中设置了一组用于实现各种系统功能的子程序 称为系统调用 用户可以通过系统调用命令在自己的应用程序中调用它们 系统调用与普通函数调用的区别系统调用核心态操作系统核心提供普通的函数调用用户态函数库或用户自己提供 29 添加系统调用 续 Linux系统调用机制int0 x80使用寄存器中适当的值跳转到内核中事先定义好的代码中执行 跳转到系统调用的总入口system call 检查系统调用号 再查找系统调用表sys call table 调用内核函数 最后返回 系统调用是靠一些宏 一张系统调用表 一个系统调用入口来完成的 30 添加系统调用 续 步骤 1添加源代码编写添加到内核中的源程序 函数名以sys 开头 如 mycall intnum 在 usr src linux kernel sys c文件中添加如下代码 asmlinkageintsys mycall intnumber returnnumber 该系统调用仅返回一个整型值 31 添加系统调用 续 步骤 2连接新的系统调用使内核的其余部分知道该系统调用的存在 为此 需编辑两个文件 usr src linux include asm i386 unistd h 系统调用清单 为每个系统调用分配唯一号码 define NR namennn这里 name 系统调用名 nnn 系统调用对应的号码 不能与内核自身的系统调用号相同 usr src linux arch i386 kernel entry S 对sys call table 进行初始化 增加新的内核函数的指针 longSYMBOL NAME sys mycall 32 添加系统调用 续 步骤 3重建Linux内核以root身份进入 usr src linux目录 重建内核 makeconfig 基于文本的传统配置界面 makedep 检验内核源代码文件的依赖性和完整性 makeclean 清除以前编译的目标文件 makebzImage 编译内核 也可采用makezImage编译生成的内核文件为 usr src linux arch i386 boot bzImage 33 添加系统调用 续 步骤 4重启内核将 usr src linux arch i386 boot bzImage拷贝到 boot bzImage配置启动文件若采用lilo 修改 etc lilo conf 添加新的引导内核image boot bzImage 上面编译生成的内核映象label Linuxtest 给该系统取个名字root dev hda5 根目录所在的分区 可用命令df查看read only若采用grub 修改 etc grub conf 添加新的引导内核titleLinuxtestroot hd0 4 kernel boot bzImageroroot dev hda5initrd boot initrd 2 4 18 3 img重启后 出现Linuxtest选项 选择它进入新的内核 34 添加系统调用 续 步骤 5使用新的系统调用应用程序app c中调用新添加的系统调用mycall 宏指令说明 syscalln parameters n表示系统调用所需参数 parameters为参数 如上面的宏中 第一个参数int表示返回值类型 第二个参数mycall为函数名 第三个和第四个分别用来指定参数的类型和名称 编译gcc oappapp c 35 课程设计辅导 Linux系统的相关知识以RedhatLinux9 0为例进程并发添加系统调用添加设备驱动程序 proc文件分析 36 添加设备驱动程序 内核模块LKMLoadableKernelModulesLinux核心是一种monolithic类型的内核 即单一的大核心 linux内核是一个整体结构 因此向内核添加或者删除某些功能 都十分困难 为了解决这个问题 引入了模块机制 从而可以动态的在内核中添加或者删除模块 37 添加设备驱动程序 续 模块的实现机制模块初始化intinit module 模块卸载intcleanup module 操作unsignedlongsys create module char name unsignedlongsize 重新分配内存intsys delete module char name 卸载intsys query module constchar name intwhich void buf size tbufsize size t ret 查询头文件 usr scr linux include linux module h 38 添加设备驱动程序 续 模块的实现机制模块加入 insmodmodulename o完成 加载目标文件调用create module重新分配内存内核符号用get kernel syms解析未解析的引用调用init module初始化LKM 执行init module void 函数 39 添加设备驱动程序 续 查看模块 lsmod结果 ModulePageUsedbymodulename1 内存信息 0 使用次数 删除模块 rmmodmodulename 40 添加设备驱动程序 续 模块编程实例hello c源码编译gcc DMODULE D KERNEL I usr src linux 2 4 20 8 include chello c 41 添加设备驱动程序 续 Linux支持的设备类型字符设备 c存取时没有缓存 对字符设备发出读写请求时 实际的I O就发生了 如 鼠标 键盘等 块设备 b利用一块系统内存区域作缓冲区 当用户进程对设备请求能满足用户要求时 返回请求数据 否则 调用请求函数进行实际的I O操作 如 硬盘 软盘 CD ROM等 网络设备 42 添加设备驱动程序 续 设备驱动程序一组常驻内存的具有特权的共享库 是低级硬件处理例程 每个设备文件有个设备号主设备号从设备号 43 添加设备驱动程序 续 设备驱动程序的功能对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传输给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误 44 添加设备驱动程序 续 Linux系统采用一组固定的入口点来实现驱动设备的功能 open入口点 打开设备 open子程序必须对将要进行的I O操作做好必要的准备工作 如清除缓冲区等 close入口点 关闭一个设备 read入口点 从设备上读数据 write入口点 往设备上写数据 ioctl入口点 执行读 写之外的操作 select入口点 检查设备 看数据是否可读或设备是否可用于写数据 45 添加设备驱动程序 续 入口点采用如下数据结构实现 46 添加设备驱动程序 续 注册设备 向系统登记设备及驱动程序的入口点intregister chrdev unsignedintmajor constchar name structfile operations fops 向系统的字符设备表登记一个字符设备 major 希望获得的设备号 为0时系统选择一个没有被占用的设备号返回 name 设备名 fops 登记驱动程序实际执行操作的函数的指针 登记成功 返回设备的主设备号 否则 返回一个负值intregister blkdev unsignedintmajor constchar name structfile operations fops 向系统的块设备表登记一个块设备 47 添加设备驱动程序 续 设备卸载intunregister chrdev unsignedintmajor constchar name 卸载字符设备 major 要卸载设备的主设备号 name 设备名intunregister blkdev unsignedintmajor constchar name 卸载块设备 48 添加设备驱动程序 续 添加设备驱动程序的方法编写设备驱动程序mydev c在模块的初始化init module 中调用设备注册函数 在模块的卸载cleanup module 中调用设备的卸载函数 设备驱动模块的编译gcc O2 DMODULE D KERNEL I usr src linux 2 4 20 8 include cmydev c 49 添加设备驱动程序 续 加载设备驱动模块 insmod fmydev o若加载成功 在文件 proc devices中能看到新增加的设备 包括设备名mydev和主设备号 生成设备文件mknod dev testc2540 其中 test为设备文件名 254为主设备号 0为从设备号 c表示字符设备 50 编写应用程序 测试驱动程序编译gcchello c ohello 添加设备驱动程序 续 51 课程设计辅导 Linux系统的相关知识以RedhatLinux9 0为例进程并发添加系统调用添加设备驱动程序 proc文件分析 52 proc文件分析 procPROC文件系统是进程文件系统和内核文件系统的组成的复合体 是将内核数据对象化为文件形式进行存取的一种内存文件系统 是监控内核的一种用户接口 它拥有一些特殊的文件 纯文本 从中可以获取系统状态信息 系统信息与进程无关 随系统配置的不同而不同 命令procinfo可以显示这些文件的大量信息 进程信息系统中正在运行的每一个用户级进程的信息 53 proc文件分析 系统信息 proc cmd line 内核启动的命令行 proc cpuinfo CPU信息 proc stat CPU的使用情况 磁盘 页面 交换 所有的中断 最后一次的启动时间等 proc meminfo 内存状态的有关信息 进程信息 proc pid stat proc pid status proc pid statm etc 54 proc文件分析 监控系统功能通过读取proc文件系统 获取系统各种信息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论