linux基础实验报告含代码_第1页
linux基础实验报告含代码_第2页
linux基础实验报告含代码_第3页
linux基础实验报告含代码_第4页
linux基础实验报告含代码_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

LinuxLinux基础实验基础实验 目录目录 实验一 3 实验二 4 实验三 6 实验四 9 实验五 11 实验六 14 实验七 16 实验一实验一 螺旋矩阵螺旋矩阵 一 一 实验目的实验目的 1 熟悉linux下c程序编写 2 掌握Makefile编写方法 二 二 实验环境和工具实验环境和工具 Red Hat Linux 三 三 实验流程实验流程 1 编写螺旋矩阵程序 2 编写Makefile文件 四 四 实验结果实验结果 五 五 实验心得实验心得 通过这次实验 我熟悉了linux下c语言程序的编写 掌握了vi的一些常用操作 学会了使用gcc 命令和makefile文件两种方法编译程序 同时也使我熟悉了linux里常用命令的使用 还有 学 会了挂载U盘的方法 可以很方便的往linux里传送文件 六 六 关键代码关键代码 Makefile 文件 CC gcc EXEC juzhen OBJS juzhen o all EXEC EXEC OBJS CC o OBJS clean rm f EXEC OBJS 实验二实验二 添加 删除用户添加 删除用户 一 一 实验目的实验目的 1 设计一个shell程序 分组批量添加用户 2 再设计一个批量删除用户的shell程序 二 二 实验环境和工具实验环境和工具 Red Hat Linux 三 三 实验流程实验流程 1 编写shell程序 2 修改文件权限 chmod x addusers 3 运行脚本 四 四 实验结果实验结果 添加用户 删除用户 五 五 实验心得实验心得 通过本次实验 我了解了shell脚本编程的方法和其语法规则 掌握了使用shell脚本程序添 加 删除用户的方法 需要注意的是 shell脚本直接用vi编写 要特别注意空格 六 六 关键代码关键代码 添加用户 删除用户 实验三实验三 驱动螺旋矩阵驱动螺旋矩阵 一 一 实验目的实验目的 1 掌握驱动模块的建立 插入和删除 2 利用驱动模块实现测试程序输入矩阵的行和列 驱动程序生成相应的字母螺旋矩阵 二 二 实验环境和工具实验环境和工具 Red Hat Linux 三 三 实验流程实验流程 1 编写驱动程序 2 编写测试程序 3 编写Makefile文件 4 编译程序 插入驱动模块 运行驱动程序 观察运行结果 删除驱动模块 再次运行测试程 序 观察运行结果 四 四 实验结果实验结果 1 插入驱动模块后测试程序运行结果 2 删除驱动模块后测试程序运行结果 五 五 实验心得实验心得 通过这次实验 我对linux下驱动程序的工作原理有了一定的了解 认识了内核态和用户态 的区别 Linux以文件的形式定义系统的驱动程序 驱动程序不仅仅是内核的一部分 也是连接 用户态和内核态之间的桥梁 我学会了简单的驱动程序的开发和测试方法 本次实验我遇到的难 点有以下几点 1 实验要求输出一个字母螺旋矩阵 测试程序应当定义一位数组还是二维数组 解决方法 使用一维数组 编程简单 在输出是将一维数组以二维形式输出即可 2 驱动程序中如何实现螺旋矩阵 解决方法 在驱动程序中另写一个螺旋矩阵函数 在ssize t evan write函数里调用 六 六 关键代码关键代码 1 驱动程序 static char drv buf 1024 static ssize t evan write struct file filp char buffer size t count int row int col copy from user drv buf buffer count row int drv buf 0 col int drv buf 1 printk user write data to drivers n solve row col 3 测试程序 int main printf please input two integer n scanf d d buf 0 char row buf 1 char col write fd buf 2 printf Read d bytes data from dev evan n row col read fd buf row col showbuf buf row col ioctl fd 1 NULL close fd return 0 void showbuf char buf int row int col int i for i 0 i row col i if i 0 printf 4c buf i printf n 实验四实验四 哲学家进餐问题哲学家进餐问题 一 一 实验目的实验目的 1 理解linux多线程机制 2 使用多线程机制编程实现哲学家进餐模型 诠释死锁和避免死锁的办法 二 二 实验环境和工具实验环境和工具 Red Hat Linux 三 三 实验流程实验流程 1 明确哲学家进餐问题 2 编程实现 3 编写Makefile文件 4 运行调试 四 四 实验结果实验结果 五 五 实验心得实验心得 通过本次实验 我了解了Linux下多线程机制 线程是系统能够独立调度和分配的最基本单 位 可以理解为是进程基础上的进一步细化 一个程序中同时运行多个线程来完成不同的任务 称之为多线程 哲学家进餐问题是经典的同步问题 我先是去网上查找相关资料 找到了程序源 码 一开始编译不通过 报告 段错误 是因为代码中有些字符不规范 修改后编译通过 经 运行测试 程序中缺少延时机制 无法得出程序运行结果 我在程序里加了sleep语句后程序结 果可读性大大改善 从这个实验我也认识到培养在网上检索资料的能力的重要性 六 六 关键代码关键代码 注 加粗部分为修改部分 sem t chopsticks PEOPLE NUM pthread mutex t mutex void philosopher void arg int state THINKING int right id 1 PEOPLE NUM int left id PEOPLE NUM 1 PEOPLE NUM while 1 switch state case THINKING sleep 1 sleep 1 break case HUNGRY sleep 2 sleep 2 strcpy ptrState Hungry pthread mutex lock pthread mutex lock if sem wait pthread mutex unlock state EATING else state THINKING sem post 释放请求的得到的left筷子 break case EATING sleep 3 sleep 3 sem post sem post break pthread exit void 0 int main pthread t tid PEOPLE NUM pthread mutex init for i 0 i PEOPLE NUM i sem init for i 0 i PEOPLE NUM i pthread create 创建五个哲学家线程 for i 0 i path fgets cmd 1000 stdin 接受用户输入 命令最长1000个字符 cmd strlen cmd 1 0 去掉输入的回车符 b transcmd cmd 分析取得用户命令字 switch b case 9 如果是Bye printf See you later n break case 1 切换工作目录 if chdir cmd 3 0 printf chdir s error s n cmd 3 strerror errno break case 2 ls命令 case 7 cp命令 case 8 pwd命令 system cmd break case 3 pid命令 printf d n getpid break case 4 rm命令 remove cmd 3 break case 5 mkdir命令 mkdir cmd 6 0755 break case 6 mv命令 p strchr cmd 3 p 0 rename cmd 3 p 1 break case 0 不能识别的命令 printf Bad command try again All aviable commands are nlogout cd ls pwd pid rm mkdir mv cp n getpid break char transcmd char s if strncasecmp s cd 2 return 1 else if strncasecmp s ls 2 return 2 else if strncasecmp s pid 3 return 3 else if strncasecmp s rm 2 return 4 else if strncasecmp s mkdir 5 return 5 else if strncasecmp s mv 2 return 6 else if strncasecmp s cp 2 return 7 else if strncasecmp s pwd 3 return 8 else if strncasecmp s bye 3 return 9 else return 0 实验六实验六 系统调用系统调用 一 一 实验目的实验目的 1 理解系统调用过程 2 学会自己添加系统调用 二 二 实验环境和工具实验环境和工具 Red Hat Linux 三 三 实验流程实验流程 1 决定系统调用名字 本实验中叫 NR print info 内核中系统调用实现程序的名字 s ys print info 之后在头文件unistd h添加系统调用号 该文件所在目录是 usr inc lude asm unistd h 如下 2 在系统调用表中添加相应表项 系统调用表所在目录 usr src linux 2 4 arch i386 kernel entry S 3 添加实现程序 目录 usr src linux2 4 kernel sys c 4 修改Makefile文件 将版本号改为 17 用来区别之前的系统 5 编译内核 进入内核所在目录 依次输入如下命令 make mrproper make clean make menuconfig make dep make bzImage make modules make modules install 6 将生成的新内核移动到boot下并改名 操作如下 cp usr src linux 2 4 arch i386 boot bzImage boot vmlinuz 2 4 20 17 cp usr src linux 2 4 System map boot System map 2 4 20 17 cd boot mkinitrd initrd 2 4 20 17 img 2 4 20 17 7 修改grup文件 添加新启动项 8 重启系统 进入新内核 编写测试程序 运行调试 四 四 实验结果实验结果 五 五 实验心得实验心得 系统调用是内核提供的 功能十分强大的一系列函数 是用户程序与内核交 互的一个接口 通过本次实验 我理解了系统调用的实现过程 应用程序执行系 统调用后 从用户态切换到内核态 之后在内核空间调用内核函数 执行完毕后 从内核态切换回用户态 实验中不好理解的一点是如何根据系统调用号259在系 统调用表中找到相应表项 系统调用表中有一句代码 rept NR syscalls sys call table 4 开始的 代表当前地址 sys call table代表数组首地址 所以两个变量相 减 得到差值表示这个系统调用表的大小 字节数 之后再除以4 每个系统 调用占四个字节 得到系统调用个数 一开始我总是做不成功 是因为在添加 系统调用号的时候添错了地方 我加在了 usr src linux 2 4 include asm i386 unistd h 改正后便实现了 六 六 关键代码关键代码 实验七实验七 FloppyLinuxFloppyLinux的实现的实现 一 一 实验目的实验目的 1 了解linux的引导过程 2 实现一款FloppyLinux 二 二 实验环境和工具实验环境和工具 Red Hat Linux 工具 busybox 三 三 实验流程实验流程 1 软盘安装引导器 a 对软盘建立ex2文件系统 mke2fs dev fd0 b 将系统中grub目录下的引导文件stage1 stage2复制到软盘中 c 配置grub信息 2 配置busybox相关选项 Make menuconfig 前三个选项中只选择第一项 其他默认 3 编译并安装busybox 4 建立临时目录 该目录为软盘的文件系统 5 建立设备列表 6 建立启动

温馨提示

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

评论

0/150

提交评论