南邮操作系统实验二徐小龙
南邮计算机网络实验报告

192.168.65.254(192.168.65.254)
目标的MAC地址(Target MAC address:):
vmware_c0:00:01(00:50:50:c0:00:01)
目标的IP地址(Target IP address:):
在主机B中增加对A特定网络的路由项:
route add 0.0.0.0 mask 0.0.0.0 192.168.2.1 metric 1
设置好,用ping命令测试主机AB之间连通性,如用特定网络效果是一样的,AB之间可以通信。
9、如果将主机AB的IP设在同一网络中,则不需要设置路由,并可以直接通信,这就是直接交付。本次试验中,我们试着用了一下这种方法。
Micro-St_09:8e:c2
(44:8a:5b:09:8e:c2)
第二行数据链路层:
Destination(目的地址):_Broadcast(ff:ff:ff:ff:ff:ff)_________(这是个MAC地址,这个MAC地址是一个广播地址,就是局域网中的所有计算机都会接收这个数据帧)Source(源地址):Micro-St_09:8e:c2(44:8a:5b:09:8e:c2)帧中封装的协议类型:ARP(0x0806)(这个是ARP协议的类型编号。)Trailer:是协议中填充的数据,为了保证帧最少有64字节。
实验总结
实验成绩
实验名称
实验三使用Wireshark工具抓取数据包并进行分析
实验目的
1、掌握Wireshark工具的安装和使用方法
2、理解TCP/IP协议栈中IP、TCP、UDP等协议的数据结构
3、掌握ICMP协议的类型和代码
南邮操作系统实验报告

操作系统课程实验报告实验题目:Linux进程信号通信、进程消息通信专业软件工程学生姓名班级学号教师陈兴国指导单位计算机学院日期 2016-9-30一、实验目的1.了解Linux的信号,熟悉Linux系统中进程之间软中断通信的基本原理2.学习如何利用消息缓冲队列进行进程间的通信,并加深对消息通信机制的理解。
二、实验指导1.kill(),signal(),lockf()系统调用kill()系统调用系统调用格式:int kill(pid,sig)参数定义: int pid,sid;pid是一个或一组进程的标识符,sig是要发送的软中断信号。
pid>0时,核心将信号发送给进程pid;pid=0时,核心将信号发送给与发送进程同组的所有进程;pid<0时,核心将信号发送给搜有用户标识符真正等于发送进程的有效用户标识号的进程。
signal()系统调用预置对信号的处理方式,允许调用进程控制软中断信号。
系统调用格式:signal (sig,function)参数定义:Signal (sig,function)int sig;void (*func)();sig用于指定信号的类型,sig为0则没有收到任何信号。
function:在该进程中的一个函数地址,在核心态返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGNAL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。
lockf()系统调用用作锁定文件的某些段或者整个文件。
系统调用格式:lockf(files,function,size)参数定义:int lockf(files,function,size)int files,function;long size;2.消息的创建,发送和接收使用系统调用msgget(),msgsnd,msgrec,及msgctl()函数编写消息的发送和接收程序三、实验过程描述与结果分析1.Linux进程信号通信#include <stdio.h>#include <signal.h>#include<unistd.h>#include <stdlib.h>void waiting(),stop();int wait_mark;/*用来避免锁的竞争,保证p1,p2无法在同一时刻获得文件的锁,即lockf(stdout,1,0)*/main(){int p1,p2,stdout;signal(SIGINT,stop);/*if press the ^c or ^break ,jump to stop function*/ while((p1=fork())==-1) ;/* create child process p1*/if(p1>0){while( ( p2=fork() ) ==-1);/* create child process p2*/if(p2>0){wait_mark=1;sleep(5);/* 接收到^c信号,转stop函数*/waiting();kill(p1,16); /*向子进程p1发送软中断信号16*/kill(p2,17);/*向子进程p2发送软中断信号17*/wait(0);/*wait()系统方法,父进程会一直等待,直到子进程因暂停或者终止发来软中断信号为止*/wait(0);printf("Parent process is killed!\n");exit(0);}else{//p2被杀死的逻辑,响应kill(p1,17);wait_mark=1;signal(17,stop);/*接收到父进程发来的软中断信号,然后执行stop函数*、*/waiting();lockf(stdout,1,0);/*锁定输出,使得下面的语句可以正常输出打印*/printf("Child process 2 is killed by parent!\n");lockf(stdout,0,0);/*解锁输出*/exit(0);/*正常终止子进程p2,使得父进程跳出wait(0),得以继续执行*/ }}else{//p1被杀死的逻辑,响应kill(p2,16);wait_mark=1;signal(16,stop);waiting();lockf(stdout,1,0);printf("Child process 1 is killed by parent!\n");lockf(stdout,0,0);exit(0);}}void waiting(){while(wait_mark!=0);}void stop(){wait_mark=0;}按住Ctrl+c,可见执行结果2.Linux进程消息通信1.server.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#define MSGKEY 75struct msgform{long mtype;char mtext[256];};int main(int argc, char const *argv[]) {struct msgform msg;int msgqid;int j,pid,*pint;msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(;;){msgrcv(msgqid,&msg,256,1,0);pint=(int*)msg.mtext;pid=*pint;printf("server:receive from pid %d\n",pid);msg.mtype=pid;*pint=getpid();msgsnd(msgqid,&msg,sizeof(int),0);}return 0;}2.client.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#define MSGKEY 75struct msgform{long mtype;char mtext[256];};int main(int argc, char const *argv[]){struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777);pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;msgsnd(msgqid,&msg,sizeof(int),0);msgrcv(msgqid,&msg,256,pid,0);printf("client:receive from pid%d\n",*pint);return 0;}运行结果:四、自我评析与总结1.你认为你完成的实验那些地方做得比较好或比较出色做的相对比较快,一些命令比较熟悉一点2.差距与局限,什么地方做得不太好,或什么地方可以做得更好程序的编写,C语言遗忘的很严重,还是得常用3.从本实验得到的收获。
操作系统Lab2实验报告

深入学习 操作系统的原理和实 现细节,包括进程通 信、死锁处理、虚拟 化技术等。
实践应用
希望将所学的操作系 统知识应用到实际项 目中,提高自己的实 践能力。
持续学习
随着技术的不断发展 ,操作系统也在不断 更新和进步,需要保 持持续学习的态度。
探索新领域
对于新兴的操作系统 领域,如云操作系统 、物联网操作系统等 ,也希望有所涉猎和 探索。
学生将了解操作系统内核的组成和功能,以及操作系统如何通过内核 实现各种基本功能。
学生将通过实验深入了解操作系统的内部实现细节,提高自己对操作 系统设计和实现的认知水平。
02
实验内容
进程管理实验
总结词
理解进程状态及其转换、进程控制块PCB的组成、进程调度算法。
详细描述
通过实验,我们深入了解了进程的概念、状态及其转换。进程控制块PCB的组成,包括进程标 识符、进程状态、优先级、CPU寄存器内容等信息。此外,我们还学习了进程调度算法,如先 来先服务、最短作业优先、优先级调度等,并进行了模拟实验。
THANKS
感谢观看
操作系统Lab2实验 报告
汇报人:
202X-01-08
目录
• 实验目的 • 实验内容 • 实验结果与分析 • 问题与改进建议 • 总结与展望
01
实验目的
理解操作系统的基本概念
01
掌握核心概念
02
操作系统是计算机系统的核心软件,负责管理计算机硬件和软件资源 ,为用户提供便利的操作界面和高效的服务。
03
操作系统具有并发性、虚拟性、异步性和随机性的特点,这些特点决 定了操作系统在计算机系统中的重要地位和作用。
04
操作系统的基本功能包括进程管理、内存管理、文件管理和设备管理 ,这些功能是操作系统实现其核心目标的基础。
南邮单片机实验报告二

实验二顺序程序设计
一、实验内容
在内部单元存有1字节代码,要求将其拆分成两个4位数,高4位存入原单元的低4位,其低4位存入21H单元的低4位,且要求这两个单元的高4位均存为0。
二、实验要求
掌握MCS-51系统指令;掌握顺序程序设计方法。
三、实验设备和仪器
硬件:微机
软件:Keil C51集成开发软件
四.实验程序清单
ORG 0000H
MOV R0,#20H;
MOVX A,@R0;
MOV B,A;
ANL A,#0F0H;
SWAP A;
MOVX @R0,A;
ANL B,#0FH;
MOV A,B;
MOV R0,#21H;
MOVX @R0,A;
END
五.实验结果
在本试验中,要求将一个8位数进行拆分,然后按照实验要求再进行存储。
首先,8位数字拆成高低4位,我们可以采用屏蔽的方法,也就是逻辑“与”。
然后用SWAP实现高低4位的交换,最后再赋值,就能得到实验要求的结果。
六.问题讨论与实验心得
在本实验中,开始遇到的问题就是不知道如何得到8位数中其中4位,后来想到和“1”进行逻辑“与”可以保留原来的数值,和“0”进行逻辑“与”可以屏蔽数值,所以让这个数分别和#0FH还有#F0H进行了逻辑“与”。
在交换高低4位时,最初采用了左移4位的方法,但是比较繁琐,SWAP直接就可以达到这个效果了。
通过本实验,让我学会了解决问题可以从不同角度获得多种方法,要学会比较选择最简便有效的途径来解决问题。
南邮微机实验报告

南邮微机实验报告《南邮微机实验报告》南京邮电大学微机实验室是学生们进行计算机实验和学习的重要场所。
在这里,我们学习了计算机硬件和软件的基本知识,掌握了计算机系统的组成和工作原理,提高了我们的计算机应用能力。
下面是我们在南邮微机实验室进行的一次实验报告。
实验名称:操作系统安装与配置实验目的:通过实际操作,掌握计算机操作系统的安装和配置方法,提高我们的操作系统安装和配置能力。
实验内容:1. 准备工作:备份重要数据,准备操作系统安装光盘或U盘。
2. 操作系统安装:将安装光盘或U盘插入计算机,按照提示进行操作系统安装。
3. 操作系统配置:完成安装后,进行基本的系统配置,包括网络设置、用户账户设置、软件安装等。
实验步骤:1. 准备工作:备份个人重要数据,准备Windows 10安装U盘。
2. 操作系统安装:将U盘插入计算机,重启计算机,按照提示进行Windows10操作系统安装。
3. 操作系统配置:安装完成后,进行基本的系统配置,包括网络设置、用户账户设置、软件安装等。
实验结果:通过实际操作,我们成功地安装和配置了Windows 10操作系统,完成了基本的系统配置,包括网络设置、用户账户设置和软件安装等。
这次实验让我们对操作系统安装和配置有了更深入的理解,提高了我们的操作系统应用能力。
实验总结:通过这次实验,我们不仅掌握了操作系统安装和配置的基本方法,还提高了我们的实际操作能力。
我们将继续在南邮微机实验室进行更多的实验,不断提升我们的计算机应用能力,为将来的学习和工作做好充分的准备。
南邮微机实验室为我们提供了一个良好的学习环境,让我们能够通过实际操作来深入理解计算机知识。
我们将继续努力,不断提高自己的计算机应用能力,为将来的发展打下坚实的基础。
操作系统实验模板1资料

if(SortOrder[i]<BeginNum)
continue;
else
{
n=i;
breaue)
{
for(int i=n;i<N;i++)
{
MoveDistance[i-n]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
{
int m,n,temp;
temp=BeginNum;
Sort();
cout<<"请选择开始方向:1--向外;0---向里: ";
cin>>m;
if(m==1)
direction=true;
else if(m==0)
direction=false;
elsecout<<"输入错误!";
for(int i=0;i<N;i++)
{
for(int i=n-1;i>=0;i--)
{
MoveDistance[N-i-4]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[N-i-4]=SortOrder[i];
}
for(int j=n;j<N;j++)
{
MoveDistance[j]=abs(SortOrder[j]-temp);
int SortOrder[MaxNumber];//排序后的序列
bool Finished[MaxNumber];
void Inith()
{
cout<<"请输入提出磁盘I/O申请的进程数: ";
南邮数据结构实验报告

南邮数据结构实验报告实验目的,通过本次实验,我们旨在加深对数据结构的理解,掌握数据结构的基本操作和算法设计能力,提高对数据结构的应用能力和实际问题的解决能力。
一、实验内容。
1. 实验一,线性表的基本操作。
本次实验中,我们首先学习了线性表的基本概念和操作,包括插入、删除、查找等操作,并通过实际编程操作来加深对线性表的理解。
2. 实验二,栈和队列的应用。
在实验二中,我们通过实际编程操作来学习栈和队列的应用,包括中缀表达式转换为后缀表达式、栈的应用、队列的应用等内容。
3. 实验三,树和二叉树的基本操作。
实验三中,我们学习了树和二叉树的基本概念和操作,包括树的遍历、二叉树的建立和遍历等内容,并通过实际编程操作来加深对树和二叉树的理解。
4. 实验四,图的基本操作。
最后,我们学习了图的基本概念和操作,包括图的存储结构、图的遍历等内容,并通过实际编程操作来加深对图的理解。
二、实验过程。
在实验过程中,我们首先对实验内容进行了深入的学习和理解,掌握了数据结构的基本概念和操作方法。
然后,我们通过实际编程操作来加深对数据结构的理解,并通过调试和修改程序来提高对数据结构的应用能力和实际问题的解决能力。
在实验过程中,我们遇到了一些问题,但通过不懈的努力和团队合作,最终顺利完成了实验任务。
三、实验结果与分析。
通过本次实验,我们深入理解了数据结构的基本概念和操作方法,掌握了线性表、栈、队列、树、二叉树和图的基本操作,并通过实际编程操作加深了对数据结构的理解。
同时,我们也提高了对数据结构的应用能力和实际问题的解决能力,为今后的学习和工作打下了坚实的基础。
四、实验总结。
通过本次实验,我们不仅加深了对数据结构的理解,还提高了对数据结构的应用能力和实际问题的解决能力。
在今后的学习和工作中,我们将继续努力,不断提升自己的专业能力,为将来的发展打下坚实的基础。
以上就是本次实验的报告内容,谢谢!。
操作系统lab2实验报告

操作系统lab2实验报告操作系统 Lab2 实验报告一、实验目的本次实验着重学习操作系统内存管理的相关概念和技术,包括页表的建立和管理,以及虚拟内存系统的实现和优化。
通过完成本实验,我们能够加深对操作系统内存管理机制的理解,并掌握相关的实现方法。
二、实验环境本次实验使用的实验环境为 Linux 操作系统(具体版本号)、GCC 编译器(具体版本号)以及所提供的模拟器。
三、实验内容本次实验主要包括以下几个任务:1. 理解虚拟内存和物理内存的概念,掌握页表的结构和管理方法。
2. 编写代码实现一个简单的页表建立和管理的模拟器,包括页表的初始化、地址映射和页表的更新。
3. 实现一个简单的虚拟内存系统,包括页的加载、替换等操作。
4. 对实现的虚拟内存系统进行性能优化,包括缓存算法的改进、预加载等策略的应用。
四、实验步骤及结果1. 理解虚拟内存和物理内存的概念在本次实验中,我们将使用虚拟内存系统来管理进程的地址空间。
虚拟内存是操作系统提供给进程的一种抽象概念,它为每个进程提供了一个独立的、连续的地址空间。
物理内存是实际存在的计算机内存,由物理地址组成。
2. 编写页表管理模拟器代码根据实验要求,我们需要编写代码模拟页表的建立和管理过程。
首先,我们需要实现页表的初始化函数,用于初始化页表的数据结构。
接着,我们需要实现地址映射函数,用于将虚拟地址映射到物理地址。
最后,我们需要实现页表的更新函数,用于更新页表中的相关信息。
3. 实现虚拟内存系统在本次实验中,我们需要实现一个简单的虚拟内存系统。
虚拟内存系统可以将虚拟地址映射到物理地址,并且可以实现页的加载和替换操作。
我们需要实现页面加载函数,用于将页面加载到内存中。
同时,我们还需要实现页面替换函数,当内存空间不足时,根据特定的算法选择待替换的页,并将其移出内存。
4. 性能优化为了提高虚拟内存系统的性能,我们可以采用一些优化策略。
例如,我们可以改进缓存算法,通过提前缓存一些可能会被访问的页面,减少缺页次数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 创建失败*/
/* 子进程*/
/* 父进程*/ /* 同步*/
运行结果及其结果分析
5
实 验 报 告
6
7
实 验 报 告
8
四、实验小结 (包括问题和解决方法、心得体会、意见与建议等)
五、指导教师评语
成 绩
批阅人
日
期
9
/* 创建子进程*/
4
switch(pid) { case -1: printf("fork fail!\n"); exit(1); case 0: printf("subprocess!\n"); exit(0); default: wait(0); printf("completed !\n"); exit(0); }
二、实验环境(实验设备)
Windows XP + VMWare + Ubuntu
1
二、 实验原理及内容
1、实验程序一的要求 1)编写一 C 语言程序(以自己的姓名拼音或者学号命名) ,实现在程序运 行时通过系统调用 fork()创建两个子进程,使父、子三进程并发执行,父亲进 程执行时屏幕显示“parent”,儿子进程执行时屏幕显示“son”,女儿进程执行时 屏幕显示“daughter”。在执行进程的同时,打印各个进程的 ID 号(提示:调 用 getpid()) 。 2)多次连续反复运行这个程序(提示:可设置循环,让已被创建的子进 程作为父进程,继续创建子进程) ,观察屏幕显示结果的顺序,直至出现不一 样的情况为止。记下这种情况,试简单分析其原因。 3)能够查看你的程序所创建的进程的详细信息(提示:ps 命令+参数) 。 并能够以树形结构(提示:pstree 命令)显示你所创建的进程的父子关系(提 示:若在实验程序一运行结束后再查看进程,则无法显示程序一中创建的进 程,所以只能在程序一运行期间,查看当前进程) 。 4)经过 GCC 编译的可执行的目标文件要重命名为以自己姓名的拼音为文 件名,不能以 a.out 为文件名
2、实验程序二的要求 1)会使用 wait、exit 等系统调用“实现”其同步推进,多次反复运行改进后 的程序,观察并记录运行结果。修改该参考程序,使得系统创建进程不成功。
2
2)能够查看系统中目前的所有进程,并能够撤销某个进程。请用截图表 明撤销成功。 3)经过 GCC 编译的可执行的目标文件要重命名为以自己姓名的拼音为文 件名,不能以 a.out 为文件名 1.fork()系统调用 创建一个新进程。 系统调用格式: pid=fork() 参数定义: int fork()
ห้องสมุดไป่ตู้
其中,status 是用户空间的地址,为 0 表示子进程正常结束,非 0 则表示 出现了各种各样的问题。 3.Exit()系统调用 终止进程的执行。
3
系统调用格式:void exit(status ) 参数定义: int status ;
其中,status 是返回给父进程的一个整数。 Exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。
实验名称 实验类型 验证 进程的创建 实验学时 2+2 指导教师 实验时间 徐小龙
一、 实验目的和要求 1.了解进程与程序的区别,加深对进程概念的理解。 2.掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行 与串行执行。 3.了解 fork()系统调用的返回值,掌握用 fork()创建进程的方法。 4.熟悉 wait,exit 等系统调用。
fork()返回值意义如下: 0: 在子进程中, pid 变量保存的 fork()返回值为 0, 表示当前进程是子进程。 >0:在父进程中,pid 变量保存的 fork()返回值为子进程的 pid 值(进程唯 一标识符) 。 -1:创建失败。 2.Wait()系统调用 等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait()将调 用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。 系统调用格式:int 参数定义: int wait(status ) *status ;
实 验 报 告
( 2014/ 2015 学年 第 一学期)
课程名称 实验名称 实验时间 指导单位 指导教师 2014 操 作 系 统A
进程的创建
年
10
月
30
日
计算机学院计算机科学与技术系 徐小龙
学生姓名 学院(系)
任晓强 贝尔学院
班级学号 专
Q12010218
业 理工强化班(JK)
实 验 报 告
4.参考程序 #include <stdio.h> main() { int p1,p2,i; while((p1=fork())= = -1); /* 创建子进程 p1*/ if (p1= =0) for(i=0;i<4;i++) printf("daughter %d\n",i); else { while((p2=fork())= = -1); /* 创建子进程 p2*/ if(p2= =0) for(i=0;i<4;i++) printf("son %d\n",i); else for(i=0;i<4;i++) printf("parent %d\n",i); } } #include<stdio.h> main( ) { int pid; pid=fork( );