操作系统课程设.计报告.doc

上传人:叶*** 文档编号:35106873 上传时间:2022-08-20 格式:DOC 页数:27 大小:92.50KB
返回 下载 相关 举报
操作系统课程设.计报告.doc_第1页
第1页 / 共27页
操作系统课程设.计报告.doc_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《操作系统课程设.计报告.doc》由会员分享,可在线阅读,更多相关《操作系统课程设.计报告.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 中国石油大学(华东)操作系统课程设计报告姓名: 学号: 成绩: 螺旋矩阵Makefile批量用户管理驱动程序线程实现进程实现NCURSE程序框架附加题评语:目录实验一、螺旋矩阵3实验二、用Shell程序实现文件的批量管理4实验三、驱动下的螺旋矩阵程序7实验四、哲学家进餐问题.10实验五、程序框架14实验一、螺旋矩阵一、 实验任务用C语言编写一个螺旋矩阵程序,实现输入行数和列数即可形成AZ的螺旋矩阵,并用Makefile完成编译。二、实验环境和工具VMware Workstatio红帽子 Linux-2.4.20-8三、关键代码1、 螺旋矩阵实现代码(SpiralMatrix.c)#inclu

2、de #define N 10int main()int row,col,i,j,x,y,startNum;int dx4=0,1,0,-1;/方向int dy4=1,0,-1,0;int MatrixNN;printf(请输入行数和列数:);scanf(%d %d,&row,&col);for (i=0;irow;i+)/初始化矩阵for(j=0;jcol;j+)Matrixij=-1;startNum=0;x=0;y=0;j=0;for (i=0;startNum=0&x=0&ycol&Matrixxy=-1)Matrixxy=startNum+;elsex-=dxj;y-=dyj;j=(

3、j+1)%4;x+=dxj;y+=dyj;printf(螺旋矩阵为:n);for (i=0;irow;i+)for(j=0;jcol;j+)printf(%4c,Matrixij%26+A);printf(n);return 0;2、 MakefileCC=gccEXEC=SpiralMatrixOBJS=SpiralMatrix.oall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $ $(OBJS)clean:rm -rf $(EXEC) $(OBJS)四、实验结果实验二、用Shell程序实现文件的批量管理一、实验任务设计两个Shell程序,一个Shell程序实现给系统添

4、加四个新组,每个组代表一个班级,每一个班级中添加30个用户,每个用户代表一个学生。另一个Shell程序实现删除上一个Shell程序添加的用户和组。二、 实验环境和工具Linux-2.4.20-8VMware Workstation三、关键代码1、创建用户addUsers#!/bin/shi=1while $i -le 4 doGROUPNAME=class$igroupadd $GROUPNAMEi=$($i+1)donei=0k=0while $i -lt 120 doif $($i%30) -eq 0 thenk=$($k+1)fij=$($i)%30)j=$($j+1)if $j -le

5、 9 thenUSERNAME=class$kstu0$jelseUSERNAME=class$kstu$j#fiGROUPNAME=class$kuseradd $USERNAMEchown -R $USERNAME /home/$USERNAMEchgrp -R $GROUPNAME /home/$USERNAMEi=$($i+1)Done2、 删除用户delUsers#!/bin/shi=0k=0while $i -lt 120 doif $($i)%30) -eq 0 thenk=$($k+1)fij=$($i%30)j=$($j+1)if $j -le 9 thenUSERNAME=

6、class$kstu0$jelseUSERNAME=class$kstu$jfiuserdel $USERNAMErm -rf /home/$USERNAMEi=$($i+1)donei=1while $i -le 4 doGROUPNAME=class$igroupdel $GROUPNAMEi=$($i+1)done四、 实验结果1、 编辑addUsers和delUsers2、 添加用户3、 删除用户实验三、驱动下的螺旋矩阵程序一、 实验任务要求实现一个驱动程序的执行过程,设定驱动程序实现的字符设备,设备为,此设备为,实现功能:测试程序输入两个数字(行与列),在驱动程序下即可形成相应的字母

7、螺旋矩阵,最后驱动程序会将举证返回给测试程序,之后循环至二、 实验环境软件环境:RedHat Linux2.4.20-8,VMware WorkStation三、 关键代码接口函数定义在evan_fops结构体中:static struct file_operations evan_fops=owner:THIS_MODULE,/拥有者write:evan_write,/写操作read:evan_read,/读操作ioctl:evan_ioctl,/控制操作open:evan_open,/打开操作release:evan_release,/释放操作测试程序中实现螺旋矩阵的代码:showbuf(

8、char *buf) int H,L; char a100100; int count=65 ; int x,y,round,min; scanf(%d %d,&H,&L); if(H = 1&L=1) a00 = count;else if(H!=1&L=1)for(x=0;xL) min=L; else min=H; for(round=0; roundmin/2; round+) x = round; for(y=round;y97)count=count-33; y = L - round - 1; for(x=round+1;x=round;y-) axy=count; count+

9、; if(count=91) count=count-26; y = round; for(x=H-round-1-1;xround;x-) axy=count; count+;if(count=91) count=count-26; if(min%2=1)if(H=L)aH/2H/2=count;else if(H=L)for(x=min/2,y=round;y=L-1-round;y+)axy=count;count+;if(count=91) count=count-26;elsefor(y=min/2,x=round;x=H-1-round;x+) axy=count; count+;

10、if(count=91) count=count-26;/打印矩阵 for(x=0;xH;x+) for(y=0;yL;y+) printf(%c ,axy); printf(n);四 实验结果实验四、哲学家进餐问题一、 实验任务编程实现哲学家进餐模型,所谓的哲学家进餐模型,即有五个哲学家围坐在一圆桌旁,桌中央有一盘面条,每两人之间放一只筷子,即总共有五根筷子。每个哲学家的行为是思考或者吃面条。为了吃面条,每个哲学家必须只能直接从自己的左边或者右边取筷子,两根筷子都取到了才能吃面条。而吃完一根面条之前,哲学家不会放掉手里的筷子。设定盆中一共有68根面条,一次哲学家只能吃一根。二、 实验环境和工

11、具VMware Workstation 10.0.2 build-1744117和Linux-2.4.20-8三、关键代码#include #include #include #include #define PHILO_NUM 5#define THINK_TIME 3#define EATING_TIME 2enum THINKING, HUNGRY, EATING statePHILO_NUM;pthread_cond_t selfPHILO_NUM;int noodles_num = 68;pthread_mutex_t lock;void test(int i);void picku

12、p(int i)if(noodles_num!=0)pthread_mutex_lock(&lock);statei=HUNGRY;test(i);if(statei!=EATING)pthread_cond_wait(&selfi,&lock);pthread_mutex_unlock(&lock);elseprintf(The noodles is empty!n);exit(0);void putdown(int i)pthread_mutex_lock(&lock);statei=THINKING;test(i+PHILO_NUM-1)%PHILO_NUM);test(i+1)%PHI

13、LO_NUM);pthread_mutex_unlock(&lock);void test(int i)if(state(i+PHILO_NUM-1)%PHILO_NUM!=EATING&state(i+1)%PHILO_NUM!=EATING&statei=HUNGRY)statei=EATING;pthread_cond_signal(&selfi);void init()int i=0;for(;iPHILO_NUM;i+)statei=THINKING;void think(int i) printf(philosopher %d :I am thinking!n, i); sleep

14、(THINK_TIME);void eat(int i) printf(philosopher %d :I am eating!n, i);noodles_num-; sleep(EATING_TIME);void* philosopher(void* vargs) int i =*(int*)vargs; while (1) think(i); pickup(i); eat(i); putdown(i); return NULL;int main(void)pthread_t tid5;int i=0;init();for(i=0;iPHILO_NUM;i+)pthread_create(&

15、tidi,NULL,philosopher,(void*)&i);for(i=0;iPHILO_NUM;i+)pthread_join(tidi,NULL);return 0;2、MakefileCC=gccEXEC=philosopherOBJS=philosopher.oall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $ $(OBJS) -lpthreadclean:rm -f $(EXEC) $(OBJS)四、实验结果实验五、程序框架一、任务要求将以上的五个实验任务以ncurse汇总,以menu的方式实现界面显示。二、实验环境软件环境:RedHat Linux2.4

16、.20-8,VMware WorkStation三、关键代码1.Menu界面的代码:#include #include #define StartX 20#define StartY 6void initial();main() int x=StartX,y=StartY,ch; initial(); box(stdscr,0,0); attron(A_REVERSE); mvaddstr(2,20,Ncurse Test); attroff(A_REVERSE); mvaddstr(6,19,* jingcha); mvaddstr(8,19,* addusers); mvaddstr(10

17、,19,* del); mvaddstr(12,19,* driversnake); mvaddstr(14,19,* Exit); move(y,x); do ch=getch(); switch(ch) case KEY_UP : if(y=7) y=y-2; else y=y; break; case KEY_DOWN : if(y=6 & y=33 & y9) x=x-1; else x=x; break; case KEY_RIGHT : if(x=46 & y=33) mvaddch(y,-x, ); break; default : if(y=6) if(x=32 & x=32

18、&x=32 &x=70) wordsm=addch(ch); x+;m+; else y=12;x=32; break; move(y,x); while(1);void initial() initscr(); cbreak(); nonl(); noecho(); intrflush(stdscr,FALSE); keypad(stdscr,TRUE); refresh();2.ncurse代码:#include #include #define StartX 20#define StartY 6void initial();main() int x=StartX,y=StartY,ch;

19、 initial(); box(stdscr,0,0); attron(A_REVERSE); mvaddstr(0,20,TCS NAS Server v1.13 by CyberAct); attroff(A_REVERSE); mvaddstr(6,19,* Config IP address and netmask); mvaddstr(8,19,* Change Administrators Password); mvaddstr(10,19,* Config users -); mvaddstr(12,19,* Publish users in network); mvaddstr

20、(14,19,* Restart the Server); mvaddstr(16,19,* Shutdown the Server); mvaddstr(18,19,* Exit); move(y,x); do ch=getch(); switch(ch) case KEY_UP : if(y=7) y=y-2; else y=y; break; case KEY_DOWN : if(y=6 & y=33 & y9) x=x-1; else x=x; break; case KEY_RIGHT : if(x=46 & y=33) mvaddch(y,-x, ); break; case 27

21、 : endwin(); clear(); main(); break; default : if(x=32 & x=48 & ch=57) addch(ch); x+; break; move(y,x); while(1);ConfigUser() int x=StartX,y=StartY,ch; initial(); box(stdscr,0,0); attron(A_REVERSE); mvaddstr(0,20,Add/Remove User(s); attroff(A_REVERSE); mvaddstr(6,19,* User List); mvaddstr(8,19,-); m

22、vaddstr(10,19,* Add a Unix User); mvaddstr(12,19,* Remove a Unix User); mvaddstr(14,19,-); mvaddstr(16,19,* Add a Windows User); mvaddstr(18,19, Remove a Windows User); mvaddstr(20,19,-); mvaddstr(22,19,* Exit); move(y,x); do ch=getch(); switch(ch) case KEY_UP : if(y=22) y=18; else if(y=18) y=16; el

23、se if(y=16) y=12; else if(y=12) y=10; else if(y=10) y=6; else y=y; break; case KEY_DOWN : if(y=6) y=10; else if(y=10) y=12; else if(y=12) y=16; else if(y=16) y=18; else if(y=18) y=22; else y=y; break; case r : if(y=22) endwin();clear();main(); if(y=6) endwin();clear();UserList(); if(y=10) endwin();clear();AddUnixUser(); if(y=12) endwin();clear();RemoveUnixUser(); if(y=16) endwin();clear();AddWindowsUser(); break; case t : if(y=6) y=10; else if(y=10) y=12; else if(y=12) y=16; else if(y=16) y=18; else if(y=18) y=22; else if(y=22) y=6; break; case 27 : endwin();clear(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁