操作系统课设.docx

上传人:b****4 文档编号:828845 上传时间:2022-10-13 格式:DOCX 页数:56 大小:526.97KB
下载 相关 举报
操作系统课设.docx_第1页
第1页 / 共56页
操作系统课设.docx_第2页
第2页 / 共56页
操作系统课设.docx_第3页
第3页 / 共56页
操作系统课设.docx_第4页
第4页 / 共56页
操作系统课设.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

操作系统课设.docx

《操作系统课设.docx》由会员分享,可在线阅读,更多相关《操作系统课设.docx(56页珍藏版)》请在冰豆网上搜索。

操作系统课设.docx

操作系统课设

操作系统课设

1

2

3实验目的

·掌握Linux操作系统的使用方法;

·了解Linux系统内核代码结构;

·掌握实例操作系统的实现方法;

4实验环境

本次课程设计采用的操作系统环境是windows8、Ubuntu双系统,Ubuntu系统版本号为14.04,内核版本号为linux3.13.0;采用的编程环境为CodeBlocksIDE和QtCreator。

5实验内容

5.1实验一

掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。

(1)编写一个C程序,其内容为实现文件拷贝的功能。

(2)编写一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。

要求用到Linux下的图形库(GTK/Qt)。

5.2实验二

掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用,另编写一个应用程序,调用新增加的系统调用。

实现的功能是:

文件拷贝。

5.3实验三

掌握增加设备驱动程序的方法。

通过模块方法,增加一个新的设备驱动程序,其功能可以简单。

(实现字符设备的驱动)

5.4实验四(选做)

了解和掌握/proc文件系统的特点和使用方法

(1)了解/proc文件的特点和使用方法;

(2)监控系统状态,显示系统中若干部件使用状态;

(3)用图形界面实现系统监控状态;

5.5实验五(选做)

设计并实现一个模拟的文件系统。

多用户的多级目录的文件系统设计。

多用户、多级目录、login(用户登录)、系统初始化(建文件卷,提供登录模块)、文件的创建、文件的打开、文件的读写、文件关闭、删除文件、创建目录(建立子目录)、改变当前目录、列出文件目录、退出。

6设计与实现

6.1实验一

6.1.1实验要求

掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。

6.1.2具体实现

本实验内容是用CodeBlocksIDE实现的,该软件整合了函数库和编译器,因此使用起来非常方便。

(1)编写一个C程序,其内容为实现文件拷贝的功能。

在windows操作系统上实现的文件拷贝功能一般使用fopen、fread、fwrite三个来自标准C函数库的函数执行对文件的打开、读、写操作,而本次实验要求使用Linux系统的系统调用open、read、write实现上述三个操作。

用到的主要头文件如下:

stdio.h——标准输入输出头文件

string.h——字符串处理相关头文件

unistd.h——Linux系统调用头文件,比如read、write

fcntl.h——包含open系统调用

errno.h——包含一些调试错误时用到的变量

具体实现思路:

打开两个文件(分别是源文件和目标文件,可以是任意字符流形式存储的文件,包括文本文件、照片等),调用read函数读取源文件的内容,将read的返回值作为while循环的判断条件,当返回值大于0(即还未读取完毕源文件中的内容)时,调用write执行向目标文件写的操作,否则跳出循环,表示源文件已经被拷贝到目标文件,然后调用close关闭源文件和目标文件。

代码编写完成后,在CodeBlocks上编译运行即可。

程序运行之前,桌面上只有“教程.docx”,运行之后,桌面上新建了“教程副本.docx”,并且“教程.docx”中的内容被复制到了“教程副本.docx”,程序运行结果如下所示:

详细代码见4.1.3。

(2)编写一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。

要求用到Linux下的图形库(GTK/Qt)。

本次实验使用的图形库是跨平台的开发工具Qt。

首先下载Qt的安装包并安装。

Qt安装完之后,先新建一个Qt控制台应用MAIN作为主进程,用于调用三个并发的子进程。

在主进程的main函数中,使用fork创建三个子进程,若进程创建成功(即fork函数返回值等于0),则使用execv函数进入对应的子进程(get、copy、put)。

主进程程序编写完成后,再新建三个QtWidgetsApplication,分别作为三个子进程get、copy、put(所实现的功能并不是拷贝)。

由于三个子进程窗口显示的内容形式一模一样,所以以子进程get为例。

get进程的窗口显示了一下四个内容:

当前时间、子进程名称、子进程的pid和父进程MAIN的pid。

用Qt的对象QDateTime获取系统当前时间,然后将时间转换成一个字符串写在一个QLabel类的实例中,然后将该实例添加至窗口;直接把当前进程名称写在一个标签上然后添加至窗口;使用getpid和getppid函数分别获取当前进程号和父进程号,然后调用sprintf把进程号转换成字符串类型之后写在标签上并添加至窗口即可。

主进程和三个子进程的程序全部编写完后,直接在Qt上编译运行。

程序运行结果如下所示:

详细代码见4.1.3。

6.1.3源代码

(1)文件拷贝源代码

#include

#include

#include

#include

#include

#include

#include

#defineSIZE10///每次读取的字符数目

char*srcFile="/home/ilbear/桌面/教程.docx";

char*goalFile="/home/ilbear/桌面/教程副本.docx";

intmain(intargc,constchar*argv[])

{

intsrc,goal;

intread_len;

charbuff[SIZE];

src=open(srcFile,O_RDONLY);

if(src<0)

{

printf("Failtoopen%s\n.",srcFile);

exit

(1);

}

goal=open(goalFile,O_WRONLY|O_CREAT,0666);

if(goal<0)

{

printf("Failtoopen%s\n.",goalFile);

exit

(1);

}

while((read_len=read(src,buff,SIZE))>0)

{

write(goal,buff,read_len);

}

close(src);

close(goal);

return0;

}

(2)三个并发进程

#主进程MAIN

#include

#include

#include

#include

#include

#include

intmain(intargc,char*argv[])

{

QCoreApplicationa(argc,argv);

pid_tp1,p2,p3;

if((p1=fork())==0)

{

execv("/home/ilbear/桌面/build-get-Desktop_Qt_5_4_1_GCC_64bit-Debug/get",NULL);

}

else

{

if((p2=fork())==0)

{

execv("/home/ilbear/桌面/build-copy-Desktop_Qt_5_4_1_GCC_64bit-Debug/copy",NULL);

}

else

{

if((p3=fork())==0)

{

execv("/home/ilbear/桌面/build-put-Desktop_Qt_5_4_1_GCC_64bit-Debug/put",NULL);

}

}

}

waitpid(p1,NULL,0);

waitpid(p2,NULL,0);

waitpid(p3,NULL,0);

returna.exec();

}

#子进程get

mainwindow.cpp

#include"mainwindow.h"

#include"ui_mainwindow.h"

#include

#include

#include

#include

MainWindow:

:

MainWindow(QWidget*parent):

QMainWindow(parent),

ui(newUi:

:

MainWindow),sharememory1("share1")

{

ui->setupUi(this);

setWindowTitle("get");

setWindowFlags(Qt:

:

Dialog);

move(0,0);

resize(500,500);

charstr[128],f_id[128];

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=newQTimer(this);

connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));

timer->start

(1);

}

MainWindow:

:

~MainWindow()

{

deleteui;

}

voidMainWindow:

:

timerUpDate()

{

QDateTimetime=QDateTime:

:

currentDateTime();

QStringstr=time.toString("yyyy-MM-ddhh:

mm:

ssdddd");

ui->labelCurDate->setText(str);

}

#子进程copy

mainwindow.cpp

#include"mainwindow.h"

#include"ui_mainwindow.h"

#include

#include

#include

#include

MainWindow:

:

MainWindow(QWidget*parent):

QMainWindow(parent),

ui(newUi:

:

MainWindow),sharememory1("share1"),sharememory2("share2")

{

charstr[128],f_id[128];

ui->setupUi(this);

setWindowTitle("copy");

setWindowFlags(Qt:

:

Dialog);

move(500,500);

resize(500,500);

sprintf(str,"%d",getpid());

sprintf(f_id,"%d",getppid());

ui->textBrowser->setText("copy");

ui->textBrowser_2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1