华科操作系统实验报告
课 程 实 验 报 告 课程名称: 操作系统课程设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 课程设计任务书 一.课设目的 1. 掌握Linux操作系统的使用方法; 2. 了解Linux系统内核代码结构; 3. 掌握实例操作系统的实现方法。 二.课设内容 1. 掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。 (1) 编一个C程序,其内容为实现文件拷贝的功能; (2) 编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。要求用到Linux下的图形库。gtk/qt 2. 掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。另编写一个应用程序,调用新增加的系统调用(实现的功能为文件拷贝)。 3. 掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动程序,其功能可以简单(实现字符设备的驱动)。 4. 了解和掌握/proc文件系统的特点和使用方法 (选做) (1) 了解/proc文件的特点和使用方法 (2) 监控系统状态,显示系统中若干部件使用情况 (3) 用图形界面实现系统监控状态。 5. 设计并实现一个模拟的文件系统(选做) 多用户的多级目录的文件系统设计。 多用户、多级目录、login (用户登录)、系统初始化(建文件卷、提供登录模块)、文件的创建、文件的打开、文件的读、文件的写、文件关闭、删除文件、创建目录(建立子目录)、改变当前目录、列出文件目录、退出。 三.课设说明 Linux系统版本:Fedora 5.0 6.0 … ubuntu 10.04 11.10 内核版本: linux-2.6.x 四.考核要求 1. 必须独立完成课程设计内容,不分小组,不能有相同的拷贝。 2. 上机考试:学生根据老师提出的要求,演示所完成的系统;并回答老师的问题。 3. 第三周五下午2:00全体到实验室做中期检查,只检查1、2题;第四周 周五下午2:00:最后检查。按学号次序逐个检查。 4. 评分方法: 完成1、2题,得60-65分; 完成1、2、3题,得65-75分; 完成1、2、3、4(5)题,得80--100分; 报告:10分(倒扣分) 上交:课程设计报告(打印/电子档),内容包括调试记录和程序清单(附注释)。第六周五前以班为单位交指导老师。 五.参考资料 Linux的“man”帮助! 《Linux内核2.4版源代码分析大全》 《Linux内核源代码分析》 《Linux编程白皮书》 课程内容与过程 一.掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。 1) 编一个C程序,其内容为实现文件拷贝的功能。 1 任务分析: 在Linux下,如果要编译一个C语言源程序,要使用到gcc编译器。gcc编译器中, -o选项表示我们要求输出的可执行文件名。-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。 -g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了。 文件拷贝的C程序主要用到如下几个函数: l open:打开文件 open()函数 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 所需头文件:#include ,#include ,#include 函数原型:int open(const char *pathname,int flags,int perms) 参数:pathname:被打开的文件名(可包括路径名如“dev/ttyS0“) flags:文件打开方式, O_RDONLY:以只读方式打开文件 O_WRONLY:以只写方式打开文件 O_RDWR:以读写方式打开文件 O_CREAT:如果改文件不存在,就创建一个新的文件,并用第三个参数为其设置权限 返回值:成功:返回文件描述符 失败:返回-1 l close:关闭文件 close()函数 功能描述:用于关闭一个被打开的的文件 所需头文件: #include 函数原型:int close(int fd) 参数:fd文件描述符 函数返回值:0成功,-1出错 l read:读操作 read()函数 功能描述: 从文件读取数据。 所需头文件: #include 函数原型:ssize_t read(int fd, void *buf, size_t count); 参数:fd: 将要读取数据的文件描述词。 buf:指缓冲区,即读取的数据会被放到这个缓冲区中去。 count: 表示调用一次read操作,应该读多少数量的字符。 返回值:返回所读取的字节数;0(读到EOF);-1(出错)。 l write:写操作 write()函数 功能描述: 向文件写入数据。 所需头文件: #include 函数原型:ssize_t write(int fd, void *buf, size_t count); 返回值:写入文件的字节数(成功);-1(出错) 2 实现文件拷贝的源程序如下所示: #include #include int main(int argc,char *argv[]) { int sfd,tfd,num; char *buf; if(argc!=3) { printf(“ERROR