华中科技大学计算机操作系统实验报告

时间:2024.3.31

实验目的

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

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

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

一、 实验要求

1、 掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux

下的编程环境。

? 编一个C程序,其内容为实现文件拷贝的功能;

? 编一个C程序,其内容为分窗口同时显示三个并发进程的运行结

果。要求用到Linux下的图形库。

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

另编写一个应用程序,调用新增加的系统调用。

实现的功能是:文件拷贝;

3、 掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动

程序,其功能可以简单。

实现字符设备的驱动;

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

? 了解/proc文件的特点和使用方法

? 监控系统状态,显示系统中若干部件使用情况

? 用图形界面实现系统监控状态。

5、 设计并实现一个模拟的文件系统(选作)

二、 实验一

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

要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。

主要用到的头文件:

#include <stdio.h>

#include <stdlib.h>

设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目的文件,直到源文件指针到文件尾,最后关闭2个文件。

在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。

理清楚设计思路后,首先搭建linux下编程环境。

安装gcc:                sudo apt-get install build-essential

安装codeblocks:          sudo apt-get install codeblocks

在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c ,将程序编译并生成exe可执行文件。

然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入


第二篇:华中科技大学计算机网络实验报告


计算机网络实验报告

班级:电信0904

姓名:XX

学号:U200913693

实验四:网络协议与Web通信

一、       实验目的

1.       了解网络协议数据单元的格式

2.       分析网络协议工作基本流程

3.       深入理解Web应用的通信过程

二、       实验内容

1.       网络协议数据单元分析

通过wireshark抓取局域网数据包并分析各个层次的协议数据单元内容

(1)       以太网帧头

(2)       IP分组首部

(3)       ARP包

(4)       ICMP包(ping)

2.       Web原理实验

(1)       HTTP协议分析

(2)       通过socket编程模拟HTTP协议通信过程

三、       实验原理

1.       Web通信经过四个步骤:

(1)       建立连接

(2)       客户端发送HTTP REQUEST请求

(3)       服务器端接收请求,生成RESPONSE响应

(4)       关闭连接

2.       HTTP协议

客户端浏览器或其他程序与Web服务器之间的应用层通信协议。一般在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。

四、       实验内容及分析

1.       编译、执行参考程序

本次实验提供了两个原始程序(NetServer.java和NetClient.java),它们可以实现一个服务器/客户端请求响应的完整过程。Dos环境下先后编译执行NetServer.java与NetClient.java,即可得到一次完整的客户端向服务器请求并得到响应的完整过程,结果如下:

2.       修改、编写实验程序

参考程序模拟了客户端与服务器之间的对话,但由于其之间交互的数据都是我们设定的而不含有http报头信息,因此不能和真正的web服务器与浏览器对话,以下即为实现自制web服务器的方法

(1)       利用自制的服务器获取真正浏览器的 HTTP Request 报头信息:

运行自制的服务器,默认监听端口8080,在浏览器中输入以下网址http://127.0.0.1:8080/new/main/UserLoad.jsp,其中127.0.0.1为本机localhost地址,这样浏览器就会向自制服务器发出请求,服务器即可获取http request报头信息。如图所示:

(2)       利用自制的客户端获取 HTTP Response 报头信息:

在真实的浏览器中访问一网址,利用wireshark软件获取对该网站服务器发送的http request报头,将这些内容加入NetClient.java中out.println()方法中的字符串内,如下所示:

out.println("GET / HTTP/1.1\r\n");

out.println("Host: cn.bing.com\r\n");

     out.println("Connection: keep-alive\r\n");

out.println("Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n");

     out.println("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.8 (KHTML, like Gecko) Chrome/7.0.524.0 Safari/534.8\r\n");

      out.println("Accept-Encoding: gzip,deflate,sdch\r\n");

      out.println("Accept-Language: zh-CN,zh;q=0.8\r\n");

      out.println("Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3\r\n");

                       

并且将NetClient.java文件中的端口号PORT改为80,InetAddress.getByName("localhost");中的localhost改为实际访问的网址。即可得到服务器的http response,如图所示:

(3)       在自制的服务器中构造一个 HTTP Response 报头信息:

为将(2)中得到的http response报头信息加入自制服务器中,需在NetServer.java中加入out.println()语句,位置在String str = in.readLine();之前,http response报头信息放入out.println()方法中的字符串内即可:

out.println("HTTP/1.1 200 OK\r\n");

out.println("Cache-Control: private, max-age=0\r\n");

out.println("Content-Length: 30104\r\n");

out.println("Content-Type: text/html; charset=utf-8\r\n");

out.println("Set-Cookie: _SS=SID=73C301846E8148399EFF0E23B86DD939; domain=.bing.com; path=/\r\n");

out.println("P3P: CP=\"NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND\"\r\n");

out.println("Date: Mon, 02 Jan 20## 16:48:11 GMT\r\n");

此外,http response报头还可利用wireshark获取。

(4)       通过真正的浏览器来显示自制服务器提供的 Web 服务:

    编译运行经过(3)修改的NetSerer.java程序,在真正的浏览器中输入http://127.0.0.1:8080/new/main/UserLoad.jsp网址,则会出现来自自制服务器的http response报头信息,如图所示:

服务器的响应如下:

五、       实验小结

在本次实验中,由于web服务器存储的是超文本信息,因而通信需基于http协议,因此实验中实现了利用自制的服务器、客户端获取http request与response信息,乃至自己为自制服务器构造http response报头并与浏览器对话。

在java环境中,通过提供的两个原始程序NetServer.java和NetClient.java,熟悉了Web通信中,客户端发出请求、服务器响应的完整流程。

在这一过程中,更深入认识了Web通信中客户端、服务器经http协议传输请求与相应的机制。

 另外,Wireshark的数据包捕获与解析功能也为实验中需要的特定http报头信息提供了很大方便。

六、       附录

1.       修改后的客户端程序代码NetClient.java

import java.io.*;

import java.net.*;

public class NetClient

{       

       public static final int PORT =80;

       public static void main(String[] args) throws IOException

       {

                InetAddress addr = InetAddress.getByName("cn.bing.com");

                Socket socket =new Socket(addr,PORT);

                try{

                         System.out.println("客户端请求: "+socket);

                        

BufferedReader in = new BufferedReader(newInputStreamReader(socket.getInputStream())) ;

PrintWriter out = new PrintWriter(new BufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);

                        

out.println("GET / HTTP/1.1\r\n");

                         out.println("Host: cn.bing.com\r\n");

           out.println("Connection: keep-alive\r\n");           out.println("Accept:application/xml,application/xhtml+xml,text/html;q=0.9,t  

ext/plain;q=0.8,image/png,*/*;q=0.5\r\n");

           out.println("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.8 (KHTML, like Gecko) Chrome/7.0.524.0 Safari/534.8\r\n");

           out.println("Accept-Encoding: gzip,deflate,sdch\r\n");

           out.println("Accept-Language: zh-CN,zh;q=0.8\r\n");

           out.println("Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3\r\n");

                      

System.out.println("客户端请求发送完毕...");

                         String str = in.readLine();

                         System.out.println("接收: "+str);                     

                                   while(str!=null)

{

                                            str = in.readLine();

                                            System.out.println("接收: "+str);

                                   }

                  }

finally

{

                                   System.out.println("客户端关闭...");

                                   socket.close();

                  }

       }

}    

2.       修改后的服务器NetServer.java程序代码

import java.io.*;

import java.net.*;

public class NetServer

{

public static final int PORT =8080;

public static void main(String[] args) throws IOException

{

         InetAddress addr = InetAddress.getByName("localhost");

                  

         ServerSocket s =new ServerSocket(PORT,10,addr);

         System.out.println("虚拟Web服务器启动: "+s);

         try{

                   Socket socket =s.accept();

                   try{

                            System.out.println("接受客户端连接请求: "+socket);

                            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;

                                    

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

out.println("HTTP/1.1 200 OK\r\n");

out.println("Cache-Control: private, max-age=0\r\n");

out.println("Content-Length: 30104\r\n");

out.println("Content-Type: text/html; charset=utf-8\r\n");

out.println("Set-Cookie: _SS=SID=73C301846E8148399EFF0E23B86DD939; domain=.bing.com; path=/\r\n");

out.println("P3P: CP=\"NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND\"\r\n");

out.println("Date: Mon, 02 Jan 20## 16:48:11 GMT\r\n");

                            String str = in.readLine();

                            System.out.println("收到: "+str);

                            while(!str.equals(" ")){

                                     str = in.readLine();

                                     System.out.println("收到: "+str);

                     }

                            out.println("客户端传送信息服务器已经接收完毕");

                                    

                            System.out.println("服务器响应完毕,正在退出...");

                   }

finally

{

                            System.out.println("服务器关闭...");

                                     socket.close();

                             }

                   }

Finally

{

                            s.close();

             }

}

}       

                                                                                   

更多相关推荐:
计算机操作系统课程设计报告

《操作系统原理》实验报告院(部):管理工程学院专业:信息管理与信息系统实验项目:实验一二三五班级:信管102姓名:**学号:**引言操作系统是信息管理与信息系统专业一门重要的专业理论课程,了解和掌握操作系统的基…

计算机操作系统进程调度实验报告

操作系统实验题设计一若干并发进程的进程调度程序一实验目的无论是批处理系统分时系统还是实时系统用户进程数一般都大于处理机数这将导致用户进程互相争夺处理机这就要求进程调度程序按一定的策略动态地把处理及分配给处于就绪...

操作系统课程设计(完整报告,已给老师验收成功)

计算机科学技术学院操作系统原理课程设计报告题目进程管理系统专业班级姓名学号指导老师年月日117操作系统原理课程设计任务书一课程设计题目任选一个题目1模拟进程管理2模拟处理机调度3模拟存储器管理4模拟文件系统5模...

计算机操作系统课程设计报告

《操作系统原理》实验报告院(部):管理工程学院专业:信息管理与信息系统实验项目:实验一二三五班级:信管102姓名:学号:目录引言.........................................…

计算机操作系统实验报告

河北传媒学院学生实践报告书学院河北传媒学院专业班级计算机科学与技术学生学号130809010129学生姓名张众谦实践课程计算机操作系统实践报告生实验步骤完成情况以作为教师评定成绩的依据

计算机操作系统实验报告

重庆交通大学计算机操作系统实验报告班级信息与计算科学二班姓名凯学号6311220xx203实验室逸夫楼指导老师杨际祥实验完成时间20xx年5月日实验一处理机调度算法实验内容选择一个调度算法实现处理机调度实验...

计算机操作系统实验报告

一实验目的1通过模拟实现几种基本页面置换的算法了解虚拟存储技术的特点2掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想并至少用三种算法来模拟实现3通过对几种置换算法页面的比较来对比他们的优缺点并通过...

计算机操作系统实验报告

实验报告实验课程计算机操作系统学生姓名学号6100511015专业班级管理科学与工程类111班20xx年6月7日128目录实验一Linux的文件系统和基本操作命令3实验二熟悉Linux开发环境5实验三Linux...

计算机操作系统实验报告(文件基本操作)

数学与计算机科学系实验报告课程计算机操作系统地点软件实验室二时间20xx年月日

计算机操作系统实验报告1实例

河南城建学院计算机操作系统实验报告实验名称实验1系统的开启与关闭用户的登录与退出及编程入门成绩专业班级0814121学号081412119姓名高胜超实验日期20xx年09月25日实验器材一台装有Windows操...

计算机操作系统银行家算法实验报告

计算机操作系统实验报告一实验名称银行家算法二实验目的银行家算法是避免死锁的一种重要方法通过编写一个简单的银行家算法程序加深了解有关资源申请避免死锁等概念并体会和了解死锁和避免死锁的具体实施方法三问题分析与设计1...

北方工业大学《计算机操作系统》实验报告——进程管理

北方工业大学实验报告书学生姓名学号班级20xx20xx学年第一学期北方工业大学20xx128第2页共9页北方工业大学20xx128第3页共9页北方工业大学20xx128第4页共9页北方工业大学20xx128第5...

计算机操作系统实验报告(30篇)