操作系统实验全(五个)
- 格式:docx
- 大小:73.79 KB
- 文档页数:24
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。
实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。
三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。
通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。
2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。
通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。
在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。
(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。
通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。
2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。
在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。
(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。
《操作系统原理》实验报告
实验序号:5 实验项目名称:实现一个简单的Shell
一、实验目的及要求
1. 加深对操作系统Shell的理解。
2. 理解进程控制的思想。
3. 深入掌握Linux操作系统下的进程控制编程。
二、实验设备(环境)及要求
1.虚拟机VMware Workstation、Ubuntu操作系统和C语言编程。
2.设计思路:Shell建立一个新的进程,然后在那个进程中运行一个程序(如完成ls操作)然后等待那个进程执行结束。
然后shell便可读取新的一行输入,建立一个新的进程,在这个进程中运行程序并等待这个进程结束。
所以要写一个shell,需要循环以下过程:
a. 获取命令行
b. 解析命令行
c. 建立一个子进程(fork)
d. 替换子进程(execvp)
e. 父进程等待子进程退出(wait)。
三、实验内容与步骤
主要代码
解析并执行指令
输出各进程的信息
四、实验结果与数据处理
五、分析与讨论
六、教师评语
成绩
签名:
日期:。
实验题目:理发师问问题学号:201000130133 班级:2010 级计算机4 班姓名:郑思雨Email :1412561943@实验目的:1、进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法。
2、加深对于非对称性互斥问题有关概念的理解。
观察和体验非对称性互斥问题的并发控制方法。
3、进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。
硬件环境:微机(多核,4GB以上内存,320GB以上硬盘)软件环境:Ubuntu-Linux 操作系统Gnome桌面gcc version 4.1.2gedit 2.18.2OpenOffice 2.3实验步骤:1、了解实验的目的,了解并掌握与进程间通信IPC中的3个对象:共享内存、信号灯数组、消息队列到呢个有关的系统调用,并能熟练的掌握。
2 、阅读实验题目并分析实验的需求。
理发店问题:假设理发店的理发室中有3 个理发椅子和3 个理发师,有一个可容纳4 个顾客坐等理发的沙发。
此外还有一间等候室,可容纳13 位顾客等候进入理发室。
顾客如果发现理发店中顾客已满(超过20 人),就不进入理发店。
在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。
顾客理完发后,可向任何一位理发师付款。
但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。
理发师在没有顾客的时候就坐在理发椅子上睡眠。
理发师的时间就用在理发、收款、睡眠上。
(1)首先创建ipc.h 文件,在里面定义生产者/ 消费者共用的IPC函数的原型和变量。
(2)然后创建ipc.c 文件,在里面定义生产者/ 消费者共用的IPC 的具体的相应函数。
(3)创建sofa_control 文件,在里面声明两个消息队列,当沙发空闲时则会将空闲的消息放入相应的队列中,让顾客可以进入沙发中,当理发师空闲时,也会将相应的消息放入队列中,从而可以让顾客到理发椅上进行理发。
操作系统实验指导书实验1 存储管理1、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。
2、实验内容(1)通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:①50%的指令是顺序执行的;②50%的指令是均匀分布在前地址部分;③50%的指令是均匀分布在后地址部分。
具体的实施方法是:①在 [0,319] 的指令之间随即选取一起点m;②顺序执行一条指令,即执行地址为m+1的指令;③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;④顺序执行一条指令,其地址为 m′+ 1;⑤在后地址[m′+ 2,319]中随机选取一条指令并执行;⑥重复上述步骤①-⑤,直到执行320次指令。
(2)将指令序列变换为页地址流设:①页面大小为1k;②用户内存容量为4页到32页;③用户虚存容量为32k。
在用户虚存中,按每k存放10条指令排在虚存地址,即320条指令在虚存中的存放方式为:第0条-第9条指令为第0页(对应虚存地址为[0,9]);第10条-第19条指令为第一页(对应虚存地址为[10,19]);……第310条~第319条指令为第31页(对应虚地址为[310,319])。
按以上方式,用户指令可组成32页。
(3)计算并输出下述各种算法在不同内存容量下的命中率。
①先进先出的算法(FIFO);②最近最少使用算法(LRR);③最佳淘汰算法(OPT)先淘汰最不常用的页地址;④最少访问页面算法(LFR);⑤最近最不经常使用算法(NUR)。
其中③和④为选择内容。
命中率=1-页面失效次数/页地址流长度在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
3、随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。
《操作系统原理》实验报告班级::学号:指导老师:目录:实验题目:实验一线程创建与撤销 (2)实验题目:实验二线程同步 (6)实验题目:实验三线程互斥 (11)实验题目:实验四进程通信 (17)实验题目:实验五读者-写者问题 (22)实验题目:实验六进程调度 (38)实验题目:实验七存储管理之动态库 (52)实验题目:实验八存储管理之存分配 (57)实验题目:实验九存储管理之页面置换算法 (70)实验题目:实验十设备管理 (85)实验题目:实验十一文件管理之文件读写 (99)实验题目:实验一线程创建与撤销完成人:XXX报告日期:2018年3月31日一、实验容简要描述(1)熟悉VC++、Visual Studio开发环境。
(2)使用相关函数创建和撤销线程。
(3)在一个进程中创建3个线程,名字分别为threada、threadb、threadc。
threada输出“hello world! ”。
threadb输出“My name is …”。
threadc输出“Please wait…”,然后sleep 5秒钟,接着输出“I wake up”。
二、程序设计1、设计思路该函数创建一个在调用进程的地址空间中执行的线程。
2、主要数据结构HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);VOID ExitThread(DWORD dwExitCode);VOID Sleep(DWORD dwMilliseconds);VOID Sleep(DWORD dwMilliseconds);三、实验结果1、基本数据lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。
操作系统试验指导—. 课程的性质、目的和任务操作系统在整个计算机系统软件中占有中心地位。
其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务,为用户创造既灵活又方便的使用环境。
本课程是计算机及应用专业的一门专业主干课和必修课。
通过本课程的学习,使学生掌握操作系统的基本概念、设计原理及实施技术,具有分析操作系统和设计、实现、开发实际操作系统的能力。
二. 实验的意义和目的操作系统是计算机专业学生的一门重要的专业课程。
操作系统质量对整个计算机系统的性能和用户对计算机的使用有重大的影响。
一个优良的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。
培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。
通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
三.实验运行环境及上机前的准备实验运行环境: C语言编程环境上机前的准备工作包括:●按实验指导书要求事先编好程序;●准备好需要输入的中间数据;●估计可能出现的问题;●预计可能得到的运行结果。
四. 实验内容及安排实验内容包括进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法五个实验。
每个实验介绍了实习的目的要求、内容和方法。
实验一、进程调度试验[目的要求]用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.[准备知识]一、基本概念1、进程的概念;2、进程的状态和进程控制块;3、进程调度算法;二、进程调度1、进程的状态2、进程的结构——PCB进程都是由一系列操作(动作)所组成,通过这些操作来完成其任务。
第2章 Windows 操作系统2.1 Windows 的基本操作实验内容与步骤1)添加和删除“开始”菜单中项目实验要求:将文件夹“c:\Program Files ”添加到开始菜单中。
再将其删除。
操作步骤:(1)右键单击任务栏上的空白区域,在快捷菜单中选【属性】,打开如图2-8所示的对话框。
⑵选择“「开始」菜单”选项卡,在其中选定“经典「开始」菜单(M )”选项,单击旁边的“自定义”命令按钮,进入“自定义经典「开始」菜单”对话框,单击“添加(D )…”按钮,打开“创建快捷方式”对话框,如图2-9所示。
图2-8“任务栏和开始菜单属性”对话框图2-9 创建快捷方式对话框(3)在文本框中键入“c:\Program Files ”,再单击【下一步】,打开“选择程序文件夹”对话框,如图2-10所示。
(4)在列表中选中“[开始]菜单”,单击【下一步】,进入“选择程序标题”对话框,如图2-11所示。
(5)单击【完成】命令按钮,并依次按下确定按钮。
(6)再打开开始菜单,看到开始菜单中增加了一个名为“Program Files ”的项目,如图2-12所示。
单击该项目可以打开Program Files 文件夹。
图2-10选择程序文件夹图2-11 选择程序标题图2-12 添加了新项目的开始菜单(7)在开始菜单中,用鼠标右键单击刚添加的项目Program Files ,在弹出快捷菜单中选【删除】命令,并在“确认文件删除”对话框中单击命令按钮【是】,则将该项目删除。
2)任务栏的相关操作实验要求:● 利用任务栏切换窗口、排列窗口;● 将文件夹C:\ WINDOWS 添加到任务栏的快速启动区;再将其删除。
● 隐藏任务栏;隐藏任务栏右侧的时间显示图标。
操作步骤:(1) 利用任务栏切换窗口①依次打开“我的电脑”窗口、“我的文档”窗口和“回收站”窗口。
此时当前活动窗口为“回收站”窗口,如图2-13所示。
②在任务栏上单击“我的电脑”窗口对应的按钮,则当前活动窗口切换为“我的电脑”窗口。
目录实验一 WINDOWS进程初识 (3)1、实验目的 (3)2、实验内容和步骤 (3)3、实验结论 (5)4、程序清单 (5)实验二进程管理 (6)背景知识 (6)1、实验目的 (12)2、实验内容和步骤 (12)3、实验结论 (16)4、程序清单................... 错误!未定义书签。
实验三进程同步的经典算法 .. (17)背景知识 (17)1、实验目的 (19)2、实验内容和步骤 (19)3、实验结论 (22)4、程序清单................... 错误!未定义书签。
实验四存储管理 (23)背景知识 (23)1、实验目的 (31)2、实验内容和步骤 (31)3、实验结论 (48)4、程序清单................... 错误!未定义书签。
实验五文件和设备管理 (49)背景知识 (49)1、实验目的 (53)2、实验内容与步骤............. 错误!未定义书签。
3、实验结论................... 错误!未定义书签。
实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application (控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
《Linux操作系统》实验指导书主编教师:王振目录实验一Linux操作系统的安装 (3)【实验目的】 (3)【实验环境】 (3)【实验重点及难点】 (3)【实验内容】 (3)实验二常用命令的使用(一) (5)【实验目的】 (5)【实验环境】 (5)【实验重点及难点】 (5)【实验内容】 (5)实验三常用命令的使用(二) (9)【实验目的】 (9)【实验环境】 (9)【实验重点及难点】 (9)【实验内容】 (9)实验四VI编辑器的使用 (14)【实验目的】 (14)【实验环境】 (14)【实验重点及难点】 (14)【实验内容】 (14)实验五Linux系统管理与配置 (15)【实验目的】 (15)【实验环境】 (16)【实验重点及难点】 (16)【实验内容】 (16)(一)命令行管理 (16)(二)图形界面管理 (17)实验六shell编程(一) (19)【实验目的】 (19)【实验环境】 (19)【实验重点及难点】 (19)【实验内容】 (19)实验七shell编程(二) (23)【实验目的】 (23)【实验环境】 (23)【实验重点及难点】 (23)【实验内容】 (23)实验八FTP服务器的配置 (25)【实验目的】 (25)【实验环境】 (25)【实验重点及难点】 (25)【实验内容】 (25)实验九NFS服务器 (26)【实验目的】 (26)【实验环境】 (26)【实验重点及难点】 (26)【实验内容】 (26)实验十配置Samba服务器 (28)【实验目的】 (28)【实验环境】 (28)【实验重点及难点】 (28)【实验内容】 (28)实验一Linux操作系统的安装【实验目的】1.掌握Linux操作系统的安装;2.通过安装,学习Linux操作系统与其他操作系统的区别。
【实验环境】1、Linux操作系统安装;2、虚拟机软件;3、计算机内存配置要求512M以上。
【实验重点及难点】Linux操作系统安装过程。
计算机与信息学院 实验课程:操作系统阜阳师范学院 Fuyang Teachers College实验报告 ====================================================================专业:年级班级: ~ 学年 第 学期姓名 学号:实验报告实验报告实验报告}exit(0);}main( ){ client( );}2.server.c#include <sys/types.h>#include <sys/msg.h>#include <sys/ipc.h>#define MSGKEY 75struct msgform{ long mtype;char mtext[1000];}msg;int msgqid;void server( ){msgqid=msgget(MSGKEY,0777|IPC_CREAT); do{msgrcv(msgqid,&msg,1030,0,0);printf(“(server)received\n”);}while(msg.mtype!=1);msgctl(msgqid,IPC_RMID,0);exit(0);}main( ){server( );}实验报告#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 12#define B 3#define P 5int isInBuf(int buf[], int x, int *p){ int i, j = -1;for (i = 0; i < B; i++){ if(buf[i] == x){ j = i;break;}else if (buf[i] == -1){ (*p)++;buf[i] = x;j = i;break;}}if(j==-1) (*p)++;return j;}int oldopt(int i, int buf[ ], int list[ ], int f[ ]) { int k, h, j=0, max=-1;for (k = 0; k < B; k++){ for (h = i; h < N; h++)if (buf[k] == list[h]){ f[k] = h;break;}if(h==N)f[k] = N;}for (k = 0; k < B; k++){ if (max < f[k]){ max = f[k];j = k;}}return j;}int main(){ int list[N]; #include <stdio.h>#include <stdlib.h>#include <time.h>#define N 12#define B 3#define P 5int isInBuf(int buf[], int x, int *p) { int i, j = -1;for (i = 0; i < B; i++){ if(buf[i] == x){ j = i;break;}else if (buf[i] == -1){ (*p)++;buf[i] = x;j = i;break;}}if(j==-1) (*p)++;return j;}int oldlru(int f[ ]){ int i, j = 0, max = -1;for (i = 0; i < B; i++){ if(f[i] > max){ max = f[i];j = i;}f[i]++;}return j;}int main(){ int list[N];int change[N];int buf[B], f[B], i, j,k;int result[B][N];int old;int absent;srand((int)time(NULL));printf("\n The Random List:\n");for (i = 0; i < N; i++)int change[N];int buf[B],f[B],i,j,k;int result[B][N];int old;int absent;srand((int)time(NULL));printf("\n The Random List:\n");for (i = 0; i < N; i++){ list[i] = rand() % P+1;printf("%3d", list[i]);}printf("\n----------------------------------------------\n");printf("\nOPT:\n");absent=0;for(i = 0; i < B; i++)buf[i] = f[i] = -1;for(i = 0; i < N; i++){ j=isInBuf(buf, list[i],&absent);if(j== -1) //需置换页面{ old=oldopt(i, buf, list, f);change[i]=buf[old];buf[old] = list[i];}else change[i]=-1;for(k=0;k<B;k++)result[k][i]=buf[k];}printf("the result is:\n");for(i=0;i<B;i++){ for(j=0;j<N;j++)printf("%3d",result[i][j]);printf("\n");}printf("\nthe page is changed:\n");for(i=0;i<N;i++){ if(change[i]== -1)printf(" ");else printf("%3d",change[i]);}printf("\nabsent:%d\n",absent);printf("the absent vote is:%f\n",(float)absent/N);}{ list[i] = rand() % P+1;printf("%3d", list[i]);}printf("\n-------------------------------------------\n");printf("\nLRU:\n");absent = 0;for(i = 0; i < B; i++)buf[i] = f[i] = -1;for(i = 0; i < N; i++){ j = isInBuf(buf, list[i],&absent);old = oldlru(f);if(j== -1){ change[i]=buf[old];buf[old] = list[i];f[old] = 0;}else{ f[j]=0;change[i]=-1;}for(k=0;k<B; k++)result[k][i]=buf[k];}printf("the result is:\n");for(i=0;i<B;i++){ for(j=0;j<N;j++)printf("%3d",result[i][j]);printf("\n");}printf("\nthe page is changed:\n");for(i=0;i<N;i++){ if(change[i]== -1)printf(" ");elseprintf("%3d",change[i]);}printf("\nabsent:%d\n",absent);printf("the absent vote is:%f\n",(float)absent/N); }实验报告。
实验一Windows 7的基本操作实验二文件和文件夹的概念与操作实验三系统自带的“附件”应用程序实验四Windows 7的搜索功能实验五定制用户的工作环境实验六Windows 7的磁盘管理项目二Windows 7操作系统实验一Windows 7的基本操作【实验目的】通过本次实验,了解Windows 7的启动与退出方法;了解Windows 7桌面的基本构成要素;学会排列桌面图标与调整任务栏;掌握窗口和对话框的组成与基本操作;观察所用计算机主要硬件的基本信息。
项目二Windows 7操作系统【实验内容】Windows 7的启动与关闭;了解Windows 7桌面的基本构成要素;学会排列桌面图标与调整任务栏;掌握窗口和对话框的组成与基本操作;观察所用计算机主要软、硬件的基本信息。
【实验步骤】1.Windows 7的启动与关闭(1)Windows 7的启动按照先外设后主机的顺序,先打开显示器等外设的电源开关,再开主机开关,等待计算机启动到WINDOWS状态。
正常情况下,将出现Windows 7的桌面,如果启动过程中出现“黑屏”、“蓝屏”或有报警声时,Windows 7启动不成功,可能的情况如下,软件故障:Windows 7操作系统被病毒或人为破坏不能正常启动;硬件故障:计算机中某一个硬件出现损坏或接触不良故障,导致系统无法启动。
(2)Windows 7的关闭关闭计算机之前,首先要关闭任务栏中打开的所有任务。
具体操作:可以右击任务栏中的相关软件图标按钮,在打开的快捷菜单中,选择“关闭”菜单项并单击,即可关闭打开的一个任务,同样方法,可以关闭其它所有运行的任务。
关闭Windows 7操作系统也就是关闭计算机,使用鼠标单击【开始】→【关闭计算机】项,在打开的关闭计算机对话框中,选择“关闭”选项,单击【确定】按钮,计算机主机自动关闭。
在关机计算机对话框中,除了“关闭”项外,还会发现“待机”、“重新启动”和“等待”等项目,同学们可以分别操作一下,总结一下选择不同项目的不同功能。
《操作系统》实验教学大纲实验名称:操作系统实验实验课程:计算机科学与技术、软件工程、电子信息工程实验学时:24学时(12次课程实验)实验目的:1.通过操作系统实验,学生将深入了解操作系统的原理和设计。
2.学生将掌握操作系统的基本概念和常用技术。
3.提高学生的实践能力和创新能力,培养学生的团队合作精神。
实验内容:1.实验一:操作系统基本概念-实验介绍:了解操作系统的基本概念和基本功能。
-实验要求:学生通过阅读文献或参考书籍,掌握操作系统的基本概念。
-实验过程:学生通过讨论或小组讨论的方式,给出操作系统的定义和基本功能列表。
2.实验二:进程管理-实验介绍:通过实验来学习进程管理的基本概念和常用算法。
-实验要求:学生通过自己编写程序,实现进程的创建、销毁和调度。
-实验过程:学生根据给定的问题,设计进程模型并实现相应的程序。
3.实验三:内存管理-实验介绍:了解内存管理的基本概念和常用算法,学习虚拟内存技术的原理。
-实验要求:学生通过编写程序,实现内存分配和回收的算法。
-实验过程:学生通过模拟内存分配和回收的过程,理解内存管理的基本原理。
4.实验四:文件系统-实验介绍:了解文件系统的基本概念和常用算法,学习文件管理的基本原理。
-实验要求:学生通过编写程序,实现文件的创建、删除和查找。
-实验过程:学生通过模拟文件的创建、删除和查找的过程,理解文件管理的基本原理。
5.实验五:设备管理-实验介绍:通过实验学习设备管理的基本概念和常用算法,了解设备驱动程序的实现原理。
-实验要求:学生通过编写程序,模拟设备的控制和管理。
-实验过程:学生通过模拟设备的请求、分配和释放的过程,理解设备管理的基本原理。
6.实验六:作业调度-实验介绍:通过实验学习作业调度的基本概念和常用算法。
-实验要求:学生通过编写程序,实现作业的调度。
-实验过程:学生通过输入作业和作业调度算法,模拟作业调度的过程。
实验评定:-实验报告:60%-实验成果:20%-实验操作:20%实验环境:- 操作系统:Linux、Windows实验要求:-学生需认真完成实验任务,编写实验报告。
中山大学南方学院实验报告课目:操作系统姓名:陈瑞全班级:08级电子一班指导老师:梁路哲学家就餐问题一、实验题目:解决五个哲学家就餐问题二、设计内容:三、开发环境:四、分析设计:1.给五个哲学家编号为1,2,3,4,5;产生一个1~5之间的随机数,规定一次产生两个哲学家;2.设置一个全局变量,将上一次产生的信号量纪录在内,并判断此次与上次的编号是否相差2或3;若是,即可同时吃,并释放上一个哲学家的筷子,若不是,只释放上一个哲学家的筷子。
3.作N次循环(N自己输入)五个哲学家围坐在一圆桌旁,桌中央有一盘菜,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃菜.为了吃菜每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子#define N 5void philosopher (int i){while (true){思考;取fork[i]; 取fork[(i+1) % 5];进食;放fork[i]; 放fork[(i+1) % 5];}}为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿.哲学家就餐问题解法(1)#define N 5void philosopher (int i){while (true){思考;取fork[i]; 取fork[(i+1) % 5];进食;放fork[i]; 放fork[(i+1) % 5];}}哲学家就餐问题解法(2)#define N 5#define THINKING 0#define HUNGRY 1#define EATING 2#typedef int semaphore;int state[N];semaphore mutex=1;semaphore s[N];void test(int i){if (state[ i ] == HUNGRY)&& (state [ (i-1) % 5] != EATING)&& (state [ (i+1) % 5] != EATING){state[ i ] = EATING;V(&s[ i ]);}}void philosopher (int i){ while (true){思考;P(&mutex);state[i] = HUNGRY;test(i);V(&mutex);P(&s[i]);拿左筷子;拿右筷子;进食;放左筷子; 放右筷子;P(&mutex)state[ i ] = THINKING;test([i-1] % 5);test([i+1] % 5);V(&mutex);}}state[ i ] = THINKINGs[ i ] = 0为每个哲学家使用POSIX线程(pthread)建立独立的线程(有独立的id),用互斥(叉子其他哲学家使用时,另一个哲学家不能使用)和条件(哲学家饿了才尝试去得到叉子,得到相邻的左右两把叉子才能进餐)来分到叉子。
《操作系统课程》实验(实训)指导大纲课程编号:G611SG0004课程性质:学科基础课适用专业:计算机科学与技术网络工程数字媒体实验学时:16实验教材:自编符合《认证标准》:具有运用工程基础知识和本专业基本理论知识解决问题的能力,具有系统的工程实践学习经历;完成本课程实验(实训)总软件最少行数: 2000实验成绩评价方法:学生每完成一个实验项目,要求独立认真的填写实验报告。
实验指导教师将根据学生完成实验的态度和表现,结合填写的实验报告评定实验成绩,成绩的评定按百分制评分。
老师根据平时实验的分数之和取平均分,得出综合成绩。
实验(实训)内容:实验一操作系统安装及熟练使用(一)实验目的熟悉Windows//Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,并为后续实验做好编程环境准备。
(二)实验项目内容1、熟悉Windows//Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,通过系统提供的用户管理程序、查看系统中的用户情况、进程、线程、内存使用情况等,学会使用它进行监视进程的状况、系统资源的使用情况及用户情况。
并为后续实验做好编程环境准备。
2、用C语言编写一小段程序,使其可以通过某个系统调用来获得OS提供的某种服务。
(三)主要仪器设备一台PC机(四)实验室名称计算机中心实验室(五)实验报告撰写(撰写的格式采用教务处所提供的样本见附件)......实验二编程模拟进程间的同步和互斥(一)实验目的通过实验加强对进程同步和互斥的理解,并掌握进程(线程)的创建和调用方法。
学会使用信号量解决资源共享问题。
学生可以自己选择在Windows或Linux系统下编写。
代码不得少于200行。
(二)实验项目内容1.以下为Linux系统下参考程序,请编译、运行并观察程序的输出,并分析实验结果,写出实验报告。
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/wait.h>#include<linux/sem.h>#define NUM_PROCS 5#define SEM_ID 250#define FILE_NAME "/tmp/sem_aaa"#define DELAY 4000000void update_file(int sem_set_id, char *file_path, int number){struct sembuf sem_op;FILE *file;//等待信号量的数值变为非负数,此处设为负值,相当于对信号量进行P操作sem_op.sem_num=0;sem_op.sem_op=-1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);//写文件,写入的数值是当前进程的进程号file=fopen(file_path,"w");if(file){//临界区fprintf(file,"%d\n",number);printf("%d\n",number);fclose(file);}//发送信号,把信号量的数值加1,此处相当于对信号量进行V操作sem_op.sem_num=0;sem_op.sem_op=1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);}//子进程写文件void do_child_loop(int sem_set_id,char *file_name){ pid_t pid=getpid();int i,j;for(i=0;i<3;i++){update_file(sem_set_id,file_name,pid);for(j=0;j<4000000;j++);}}int main(int argc,char **argv){int sem_set_id; //信号量集的IDunion semun sem_val; //信号量的数值,用于semctl()int child_pid;int i;int rc;// 建立信号量集,ID是250,其中只有一个信号量sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);if(sem_set_id==-1){perror("main: semget");exit(1);}//把第一个信号量的数值设置为1sem_val.val=1;rc=semctl(sem_set_id,0,SETVAL,sem_val);if(rc==-1){perror("main:semctl");exit(1);}//建立一些子进程,使它们可以同时以竞争的方式访问信号量for(i=0;i<NUM_PROCS;i++){child_pid=fork();switch(child_pid){case -1:perror("fork");case 0: //子进程do_child_loop(sem_set_id,FILE_NAME);exit(0);default: //父进程接着运行break;}}//等待子进程结束for(i=0;i<NUM_PROCS;i++){int child_status;wait(&child_status);}printf("main:we're done\n");fflush(stdout);return 0;}2.写一程序模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。