




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选文库Linux基础实验目录实验一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=gccEXEC=juzhenOBJS=juzhen.oall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $ $(OBJS) clean:-rm -f $(EXEC) $(OBJS)实验二 添加、删除用户一、 实验目的1. 设计一个shell程序,分组批量添加用户。2. 再设计一个批量删除用户的shell程序。二、 实验环境和工具Red Hat Linux三、 实验流程1. 编写shell程序2. 修改文件权限chmod +x addusers3. 运行脚本四、 实验结果添加用户:删除用户:五、 实验心得通过本次实验,我了解了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_buf1024;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_buf0);col=(int)(drv_buf1);printk(user write data to drivers!n);solve(row,col);3.测试程序:int main()printf(please input two integer:n);scanf(%d%d,&row,&col);buf0=(char)(row);buf1=(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;irow*col;i+)if(i!=0&i%col=0)printf(n);printf(%4c,bufi);printf(n);实验四 哲学家进餐问题一、 实验目的1. 理解linux多线程机制。2. 使用多线程机制编程实现哲学家进餐模型,诠释死锁和避免死锁的办法。二、 实验环境和工具Red Hat Linux三、 实验流程1. 明确哲学家进餐问题。2. 编程实现。3. 编写Makefile文件。4. 运行调试。四、 实验结果五、 实验心得通过本次实验,我了解了Linux下多线程机制,线程是系统能够独立调度和分配的最基本单位,可以理解为是进程基础上的进一步细化。一个程序中同时运行多个线程来完成不同的任务,称之为多线程。哲学家进餐问题是经典的同步问题,我先是去网上查找相关资料,找到了程序源码,一开始编译不通过,报告“段错误”,是因为代码中有些字符不规范,修改后编译通过。经运行测试,程序中缺少延时机制,无法得出程序运行结果,我在程序里加了sleep语句后程序结果可读性大大改善。从这个实验我也认识到培养在网上检索资料的能力的重要性。六、 关键代码注:加粗部分为修改部分sem_t chopsticksPEOPLE_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); break; case HUNGRY: sleep(2); strcpy(ptrState,Hungry);pthread_mutex_lock(&mutex); if(sem_wait(&chopsticksleft) = 0)/非阻塞状态 if(sem_wait(&chopsticksright) = 0)/非阻塞 pthread_mutex_unlock(&mutex); state = EATING; else state = THINKING; sem_post(&chopsticksleft);/释放请求的得到的left筷子 break; case EATING: sleep(3); sem_post(&chopsticksleft); sem_post(&chopsticksright); break; pthread_exit(void*)0); int main() pthread_t tidPEOPLE_NUM; pthread_mutex_init(&mutex,NULL); for(i = 0 ; i PEOPLE_NUM ; i +) sem_init(&chopsticksi,0,1); for(i = 0 ; i PEOPLE_NUM ; i +) pthread_create(&tidi,NULL,philosopher,(void*)i); ;创建五个哲学家线程 for(i = 0 ; i $ ,path); fgets(cmd, 1000, stdin);/*接受用户输入,命令最长1000个字符*/ cmdstrlen(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!%sn, cmd + 3, strerror(errno); break; case 2:/*ls命令*/ case 7:/*cp命令*/ case 8:/*pwd命令*/ system(cmd); break; case 3:/*pid命令*/ printf(%dn, 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 cpn, 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,内核中系统调用实现程序的名字:sys_print_info。之后在头文件unistd.h添加系统调用号,该文件所在目录是/usr/include/asm/unistd.h,如下:2. 在系统调用表中添加相应表项,系统调用表所在目录:/usr/src/linux-2.4/arch/i386/kernel/entry.S3. 添加实现程序,目录:/usr/src/linux2.4/kernel/sys.c4. 修改Makefile文件,将版本号改为-17(用来区别之前的系统)。5. 编译内核:进入内核所在目录,依次输入如下命令: make mrproper; make clean; make menuconfig; make dep; make bzImage; make modules; make modules_install6. 将生成的新内核移动到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-177. 修改grup文件,添加新启动项8. 重启系统,进入新内核,编写测试程序,运行调试。四、 实验结果五、 实验心得系统调用是内核提供的、功能十分强大的一系列函数,是用户程序与内核交互的一个接口。通过本次实验,我理解了系统调用的实现过程,应用程序执行系统调用后,从用户态切换到内核态,之后在内核空间调用内核函数,执行完毕后从内核态切换回用户态。实验中不好理解的一点是如何根据系统调用号259在系统调用表中找到相应表项。系统调用表中有一句代码:.rept NR_syscalls-(.-sys_call_table)/4. 开始的“.”代表当前地址,sys_call_table代表数组首地址,所以两个变量相减,得到差值表示这个系统调用表的大小(字节数),之后再除以4(每个系统调用占四个字节),得到系统调用个数。一开始我总是做不成功,是因为在添加系统调用号的时候添错了地方,我加在了/usr/src/linux-2.4/include/asm-i386/unistd.h,改正后便实现了。六、 关键代码实验七 FloppyLinux的实现一、 实验目的1. 了解linux的引导过程。2. 实现一款FloppyLinux。二、 实验环境和工具Red Hat Linux工具:busybox三、 实验流程1. 软盘安装引导器a. 对软盘建立ex2文件系统#mke2fs /dev/fd0b. 将系统中grub目录下的引导文件stage1,stage2复制到软盘中c. 配置grub信息2. 配置busybox相关选项 Make menuconfig前三个选项中只选择第一项,其他默认。3. 编译并安装busybo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业废水处理与环保技术创新
- 工业旅游的兴起与发展机遇
- 工业安全管理与职业病防治
- 工业建筑改造与再生策略
- 工业自动化中实时机器视觉系统的研究
- 工业设备中的热传导与热设计
- 工业生产中的火灾风险评估
- 工业自动化与智能制造的结合点
- 工业设计中的材料与工艺选择研究
- 工业自动化与生产监控系统
- 2025年河南郑州中原绿色产业生态发展公司招聘笔试参考题库含答案解析
- 2025年中国融通农业发展有限集团有限公司招聘笔试冲刺题(带答案解析)
- 法律文化-形考作业4-国开(ZJ)-参考资料
- 2025年中考物理押题猜想卷(山西卷)(全解全析)
- 英语专业四级写作评分标准
- 链板回转式格栅除污机出厂检验报告(LF型)
- 陕西省中小学学生休学复学申请表
- 模具外发加工与验收标准及流程
- 空调水管、流量、流速、管径自动计算以及推荐表和水管各种参数对照表47729
- 《架空输电线路防鸟挡板技术规范》征求
- 浙江省高速公路服务区建设指南
评论
0/150
提交评论