1、操作系统课程设计1内容简介 设计目的 设计内容 实施方法及要求 时间安排 辅导2设 计 目 的 掌握Linux操作系统的使用方法 了解Linux系统内核代码结构 掌握实例操作系统的实现方法3内容简介设计目的设计内容实施方法及要求时间安排辅导4设 计 内 容 (1)要求: 熟悉和理解Linux编程环境内容1)编写一个C程序,用fread、fwrite等库函数实现文件拷贝功能。2)编写一个C程序,使用基于文本的终端图形编程库(curses)或图形界面(QT/GTK),分窗口显示三个并发进程的运行(一个窗口实时显示当前时间,一个窗口实时监测CPU的利用率,一个窗口做1到100的累加求和,刷新周期分别
2、为1秒,2秒和3秒)。5设 计 内 容 (2) 要求:掌握添加系统调用的方法 内容采用编译内核的方法,添加一个新的系统调用实现文件拷贝功能编写一个应用程序,测试新加的系统调用6设 计 内 容 (3)要求:掌握添加设备驱动程序的方法内容v采用模块方法,添加一个新的字符设备的驱动程序,实现打开/关闭、读/写等基本操作v编写一个应用程序,测试添加的驱动程序7设 计 内 容 (4)要求:理解和分析/proc文件内容v了解/proc文件的特点和使用方法v监控系统状态,显示系统部件的使用情况v用图形界面监控系统状态,包括CPU和内存利用率、所有进程信息等(可自己补充、添加其他功能)8设 计 内 容(5)
3、要求:理解和掌握文件系统的设计方法(选做) 内容v设计、实现一个模拟的文件系统v包含文件/目录创建/删除,目录显示等基本功能(可自行扩充文件读/写、用户登录、权限控制、读写保护等其他功能)910内容简介v设计目的v设计内容v实施方法及要求v时间安排v辅导实施方法及要求l每位同学必须独立完成课程设计内容 支持借鉴和学习已有的优秀知识! 反对全盘拷贝,不求甚解! 吸收和消化他人经验,做自己的课程设计!11实施方法及要求l上机检查:根据要求演示完成的系统,并回答老师的问题或按要求修改程序l报告提交:l纸质课程设计报告(双面打印):内容包括实验目的、实验内容、实验设计、实验环境及步骤、调试记录和课程设
4、计心得等l光盘:课程设计报告电子版和程序清单(附注释),每个班一张光盘12实施方法及要求l 班级安排:ll成绩依据:检查情况+报告撰写情况l完成前两题:60-65l完成前三题:65-75l完成四题或选做题:75-90l完成四题和选做题:90以上1314内容简介v设计目的v设计内容v实施方法及要求v时间安排v辅导15课程设计时间:第一周、第二周课程设计地点:中期检查:最后检查:实验报告提交:时间安排16内容简介v设计目的v设计内容v实施方法及要求v时间安排v辅导17课程设计辅导vLinux系统的相关知识v进程并发 v添加系统调用v添加设备驱动程序v/proc文件分析Linux系统的相关知识内核版
5、本:major.minor.patch-build major:主版本号,有结构性变化时变更 minor:次版本号,新增功能时发生变化 奇数表示开发版,偶数表示稳定版 patch-build:修订版本号18发行版:Linux系统的常用目录19系统管理员和普通用户使用的命令Linux内核和系统启动文件Linux的所有设备文件,如/dev/hda代表第一个物理IDE硬盘系统管理所需的配置文件和子目录用户的主户目录命令、程序库、文档和其他文件Linux系统的核心源码2021课程设计辅导vLinux系统的相关知识v进程并发 v添加系统调用v添加设备驱动程序v/proc文件分析进程并发 pid=fork
6、():创建子进程。 返回值:0 从子进程返回 0 从父进程返回 exit进程自我终止,进入僵死状态 wait( ) 等待进程终止(由父进程调用) exec( ) 执行一个可执行程序(文件)22fork()系统调用23课程设计辅导 Linux系统的相关知识 进程并发 添加系统调用 添加设备驱动程序 /proc文件分析24添加系统调用Linux系统调用机制vLinux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用v用户可以通过系统调用命令在自己的应用程序中调用它们系统调用与普通函数调用的区别v系统调用 核心态 操作系统核心提供v普通的函数调用 用户态 函数库或用户自己提供25添加系统调
7、用(续)Linux系统调用机制 vint 0 x80 使用寄存器中适当的值跳转到内核中事先定义好的代码中执行:跳转到系统调用的总入口system_call,检查系统调用号,再查找系统调用表sys_call_table,调用内核函数,最后返回v系统调用是靠一些宏,一张系统调用表,一个系统调用入口来完成的26添加系统调用(续)与系统调用相关的内核代码文件:v系统调用服务例程 如 arch/x86/kernel/sys.cv系统调用清单(为每个系统调用分配唯一号码) 如 arch/x86/include/asm/unistd.hv系统调用表 如 arch/x86/kernel/syscall_tab
8、le.s不同版本Linux,文件名和存放位置会有所不同!27添加系统调用(续)步骤_1 添加源代码编写添加到内核中的源程序,函数名以sys_开头。如:mycall(int num),在arch/x86/kernel/sys.c文件中添加如下代码: asmlinkage int sys_mysyscall(int number) return number; /该系统调用仅返回一个整型值 28添加系统调用(续) 步骤_2 连接新的系统调用 使内核的其余部分知道该系统调用的存在。为此,需编辑两个文件:varch/x86/include/asm/unistd.h系统调用清单(为每个系统调用分配唯一号
9、码) define _NR_mysyscall nnn 其中,mysyscall:系统调用名nnn:系统调用号,不能与其他系统调用号相同 并修改系统调用总数: #define NR_syscalls XXXvarch/x86/kernel/syscall_table.s增加新的内核函数指针 .long sys_mysyscall29添加系统调用(续) 步骤_3 重建Linux内核以root身份进入/usr/src/linux目录,重建内核 #make mrproper /清除之前编译信息,避免生成的文件不一致 #make oldconfig /配置内核与当前配置相同make config 基于
10、文本的传统配置界面make menuconfig 基于文本的菜单形式,字符终端下使用make xconfig 基于图形窗口模式,Xwindow下使用 #make /编译内核 #make modules_install /生成并安装模块 #make install /安装新的系统30添加系统调用(续)步骤_4 重启选用新内核 步骤_5 使用新的系统调用v 应用程序app.c中调用新添加的系统调用mysyscall: int syscall(int number, );31课程设计辅导 Linux系统的相关知识 进程并发 添加系统调用 添加设备驱动程序 /proc文件分析32添加设备驱动程序 设备
11、驱动程序 一组常驻内存的具有特权的共享库,是低级硬件处理例程 每个设备文件有两个设备号 主设备号标识驱动程序 从设备号表示使用同一个设备驱动程序的不同硬件设备 设备驱动程序的功能 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误 33添加设备驱动程序(续)Linux支持的设备类型v字符设备 c 存取时没有缓存;对字符设备发出读写请求时,实际的I/O就发生了。如:鼠标、键盘等。 v块设备 b 利用一块系统内存区域作缓冲区,当用户进程对设备请求能满足用户要求时,返回请求数据,否则,调用请求函数进行实际的I/
12、O操作。如:硬盘、软盘、CD-ROM等。v网络设备 34添加设备驱动程序(续) 注册设备:向系统登记设备及驱动程序的入口点vint register_chrdev (unsigned int major, const char *name, struct file_operations *fops);/向系统的字符设备表登记一个字符设备/major:希望获得的设备号,为0时系统选择一个没有被占用的设备号返回。/name:设备名/fops:登记驱动程序实际执行操作的函数的指针/登记成功,返回设备的主设备号,否则,返回一个负值vint register_blkdev (unsigned int m
13、ajor, const char *name, struct file_operations *fops); /向系统的块设备表登记一个块设备35添加设备驱动程序(续) 设备卸载vint unregister_chrdev (unsigned int major, const char *name); /卸载字符设备/major:要卸载设备的主设备号/name:设备名 vint unregister_blkdev (unsigned int major, const char *name); /卸载块设备 36添加设备驱动程序(续) Linux系统采用一组固定的入口点来实现驱动设备的功能。vo
14、pen入口点: 打开设备。对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等vclose入口点: 关闭一个设备vread入口点: 从设备上读数据 vwrite入口点: 往设备上写数据 vioctl入口点: 执行读、写之外的操作vselect入口点: 检查设备,看数据是否可读或设备是否可用于写数据37添加设备驱动程序内核模块(LKM, Loadable Kernel Modules)Linux核心是一种monolithic类型的内核,即单一的大核心linux内核是一个整体结构,因此向内核添加或者删除某些功能,都十分困难。为了解决这个问题,引入了模块机制,从而可以动态的在内核中添加或删除模块
15、38添加设备驱动程序(续) 模块的实现机制v模块初始化(注册) int init_module( ) ; v模块卸载(注销) int cleanup_module( ) ; v操作 unsigned long sys_create_module (char *name, unsigned long size); /重新分配内存 int sys_delete_module (char *name); /卸载 int sys_query_module (const char *name, int which, void *buf, size_t bufsize, size_t *ret); /查询
16、39添加设备驱动程序(续) 模块编程实例vhello.c源码 40 printk(hello world !n); printk(I have runing in a kernel mod! n); return 0; void cleanup_module() /* 模块卸载 */ printk( I will shut down myself in kernel mode!n); #include linux/kernerl.h #include linux/module.h /*处理版本问题CONFIG_MODVERSIONS */ #if CONFIG_MODVERSIONS=1 #d
17、efine MODVERSIONS #include linux/version.h #end if int init_module() /* 模块初始化*/ 添加设备驱动程序(续) 模块的实现机制模块加入:insmod modulename.ko查看模块:lsmod删除模块:rmmod modulename41添加设备驱动程序(续)添加设备驱动程序的方法1.编写设备驱动程序mydev.c2.设备驱动模块的编译 Makefile文件的使用3.加载设备驱动模块: insmod mydev.ko 若加载成功,在文件/proc/devices中能看到新增加的设备,包括设备名mydev和主设备号。4.
18、生成设备文件: mknod /dev/test c 254 0 其中,test为设备文件名,254为主设备号,0为从设备号,c表示字符设备42添加设备驱动程序(续) 编写应用程序,测试驱动程序43 if ( testdev = -1 ) printf(Cannt open file n); exit(0); read(testdev,buf,10); for (i = 0; i 10;i+) printf(%dn,bufi); close(testdev); #include #include #include #include int main() int testdev; int i; c
19、har buf10; testdev = open(/dev/test,O_RDWR);课程设计辅导 Linux系统的相关知识 进程并发 添加系统调用 添加设备驱动程序 /proc文件分析44/proc文件分析 proc文件系统 进程文件系统和内核文件系统组成的复合体 将内核数据对象化为文件形式进行存取的一种内存文件系统 监控内核的一种用户接口,拥有一些特殊的纯文本文件,从中可以获取系统状态信息 系统信息:与进程无关,随系统配置的不同而不同 进程信息:系统中正在运行的每一个用户级进程的信息45/proc文件分析系统信息v/proc/cmd/line: 内核启动的命令行v/proc/cpuinf
20、o: CPU信息v/proc/stat: CPU的使用情况、磁盘、页面、交换、所有的中断、最后一次的启动时间等v/proc/meminfo: 内存状态的有关信息进程信息 v/proc/$pid/statv/proc/$pid/statusv/proc/$pid/statm46/proc文件分析 监控系统功能v通过读取proc文件系统,获取系统各种信息,并以比较容易理解的方式显示出来vC语言开发,图形界面直观展示v具体包括: 主机名、系统启动时间、系统运行时间、版本号、所有进程信息、CPU类型、CPU的使用率、内存使用率 -参照WINDOWS的任务管理器,实现其中的部分功能47模拟文件系统设计(
21、选择) 设计和实现一个简单的文件系统。内容包括: 建立文件存储介质的管理机制 建立目录(采用一级目录结构) 文件系统功能(显示目录、创建、删除、打开、关闭、读、写) 文件操作接口(显示目录、创建、删除、打开、关闭、读、写)48模拟文件系统设计(选择) 方法1:申请一个100MB的文件,模拟文件系统的存储空间就是该文件的存储空间,利用该文件的I结点的信息建立模拟文件系统的存储介质管理机制(表、链均可) 方法2:在磁盘上建立一个独立的分区 要求:写清楚设计思路、设计框架、设计方案等49课程设计辅导参考资料计算机操作系统实验指导(Linux版),郑然,庞丽萍编著,人民邮电出版社其他各种网络、书籍资源50
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。