计算机操作系统-课设 (2)

上传人:壹****1 文档编号:512187155 上传时间:2022-10-20 格式:DOC 页数:62 大小:1.18MB
返回 下载 相关 举报
计算机操作系统-课设 (2)_第1页
第1页 / 共62页
计算机操作系统-课设 (2)_第2页
第2页 / 共62页
计算机操作系统-课设 (2)_第3页
第3页 / 共62页
计算机操作系统-课设 (2)_第4页
第4页 / 共62页
计算机操作系统-课设 (2)_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《计算机操作系统-课设 (2)》由会员分享,可在线阅读,更多相关《计算机操作系统-课设 (2)(62页珍藏版)》请在金锄头文库上搜索。

1、华中科技大学嵌入式操作系统课程设计实验报告 院 系: 计算机科学与技术学院专 业: 信息平安班 级: 姓 名: 指导老师: 报告时间: 2021年3月16日计算机科学与技术学院目录1程序设计目的12课程设计内容13内容一:掌握在Linux下编程环境13.1内容要求13.2实验环境13.3方案设计23.3.1 文件拷贝23.3.2 三个窗口显示进程结果23.4 调试与结果33.4.1 文件拷贝33.4.2 三个窗口显示进程结果53.5实验源代码53.5.1 文件拷贝53.4.2 三个窗口显示进程64内容二:添加系统调用104.1 内容要求104.2 实验环境104.3 方案设计104.4 调试与

2、结果114.5 测试源代码155 内容三:添加设备驱动165.1 内容要求165.2 实验环境165.3 方案设计165.3.1知识概述165.3.2具体设计176 内容四:系统监视器246.1 内容要求246.2 实验环境246.3 方案设计246.3.1 知识概述246.3.2具体设计256.4 实验截图337 课程设计心得体会601程序设计目的1) 掌握Linux操作系统的使用方法;2) 了解Linux系统内核代码结构;3) 掌握实例操作系统的实现方法。2课程设计内容1) 掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。掌握系统调用的实现过程,通过

3、编译内核方法,增加一个新的系统调用。另编写一个应用程序,使用新增加的系统调用。2) 掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动程序,其功能可以简单。3) 使用GTK/QT实现系统监控器。3内容一:掌握在Linux下编程环境3.1内容要求1) 编一个C程序,其内容为实现文件拷贝的功能(使用系统调用open/read/write.;2) 编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。要求用到Linux下的图形库。 (gtk/Qt)3.2实验环境编译器:GCC3.3方案设计3.3.1 文件拷贝 Linux 文件操作系统调用的常用函数有 open、read、write

4、,通过这三个系统调用函数就可以实现文件的拷贝。函数原型如下: int open(const char *pathname, int flag); ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void* buf, size_t count); 首先用只读模式翻开源文件,即 flag=O_RDONLY,然后用 open 函数创立目标文件,flag=O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR。用 read 函数每次从源文件读取 1024 字节的数据,然后用 write 函数

5、每次写入 1024 字节到目标文件,直到读取完毕。3.3.2 三个窗口显示进程结果 本次实验使用的图形库是跨平台的开发工具Qt。首先下载Qt的安装包并安装。 Qt安装完之后,先新建一个Qt控制台应用MAIN作为主进程,用于调用三个并发的子进程。在主进程的main函数中,使用fork创立三个子进程,假设进程创立成功即fork函数返回值等于0,那么使用execv函数进入对应的子进程get、copy、put。 主进程程序编写完成后,再新建三个Qt Widgets Application,分别作为三个子进程get、copy、put所实现的功能并不是拷贝。由于三个子进程窗口显示的内容形式一模一样,所以以

6、子进程get为例。get进程的窗口显示了一下四个内容:当前时间、子进程名称、子进程的pid和父进程MAIN的pid。用Qt的对象QDateTime获取系统当前时间,然后将时间转换成一个字符串写在一个QLabel类的实例中,然后将该实例添加至窗口;直接把当前进程名称写在一个标签上然后添加至窗口;使用getpid和getppid函数分别获取当前进程号和父进程号,然后调用sprintf把进程号转换成字符串类型之后写在标签上并添加至窗口即可。3.4 调试与结果3.4.1 文件拷贝将1.txt中的内容拷贝给2.txt,拷贝前如下:编译好测试程序之后,输入如下列图所示命令行:翻开文件1.txt以及2.tx

7、t查看实验结果,如下列图所示:3.4.2 三个窗口显示进程结果 主进程和三个子进程的程序全部编写完后,直接在Qt上编译运行。程序运行结果如下所示:3.5实验源代码3.5.1 文件拷贝#include #include #include #include #include #define SIZE 1024 int main(int argc,char *argv) int file1_fd,file2_fd; /文件描述符 int num_read,num_write; char bufferSIZE; if(argc!=3) fprintf(stderr,The format of comm

8、and must be %s filename1 filename2n,argv0); exit(1); /*翻开源文件*/ if(file1_fd=open(argv1,O_RDONLY)=-1) fprintf(stderr,%s open error:%sn,argv1,strerror(errno); exit(1); /*创立目标文件*/ if(file2_fd=open(argv2,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR)=-1) fprintf(stderr,%s open error:%sn,argv2,strerror(errno); exit(1)

9、; /*实现文件拷贝*/ while(num_read=read(file1_fd,buffer,sizeof(buffer)0) num_write=write(file2_fd,buffer,num_read); close(file1_fd); close(file2_fd); exit(0); 3.4.2 三个窗口显示进程主进程#include mainwindow.h#include #include #include #include #include #include int main(int argc, char *argv) QApplication a(argc, argv

10、); pid_t p1,p2,p3; if(p1 = fork() = 0) execv(/home/liuxvzhe/Documents/Untitled Folder/Process_A,NULL); else if(p2 = fork() = 0) execv(/home/liuxvzhe/Documents/Untitled Folder/Process_B,NULL); else if(p3 = fork() = 0) execv(/home/liuxvzhe/Documents/Untitled Folder/Process_C,NULL); waitpid(p1,NULL,0);

11、 waitpid(p2,NULL,0); waitpid(p3,NULL,0); MainWindow w; w.show(); return a.exec();子进程1#include mainwindow.h#include ui_mainwindow.h#include #include #include #include MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow),sharememory1(share1) ui-setupUi(this); setWindowTi

12、tle(get); setWindowFlags(Qt:Dialog); move(0,0); resize(500,500); char str128,f_id128; sprintf(str,%d,getpid(); sprintf(f_id,%d,getppid(); ui-textBrowser-setText(get); ui-textBrowser_2-setText(str); ui-textBrowser_3-setText(f_id); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout(), this, SLOT(timerUpDate(); timer-start(1);MainWindow:MainWindow() delete ui;void MainWindow:timerUpDate() QDateTime time = QDateTime:currentDateTime(); QString str = time.toString(yyyy-MM-dd hh:mm:ss dddd); ui-labelCurDate-setText(str);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号