欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实际操作系统实验题目及其实验报告要求.doc

    • 资源ID:2768753       资源大小:1.51MB        全文页数:48页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实际操作系统实验题目及其实验报告要求.doc

    -/实 验 报 告实验课程: 操作系统实验 学生姓名: 王桥 学 号: 6100412024 专业班级: 计科123班 2014年 6月3 日目 录一、 实验一 1二、 实验二 7三、 实验三 21四、 实验四 28五、 实验五 33南昌大学实验报告 -(1)操作系统安装及其接口环境学生姓名: 王桥 学 号: 6100412024 专业班级: 计科123班 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 一、实验目的熟悉Windows/Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,并为后续实验做好编程环境准备。二、实验内容1、熟悉Windows/Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,通过系统提供的用户管理程序、查看系统中的用户情况、进程、线程、内存使用情况等,学会使用它进行监视进程的状况、系统资源的使用情况及用户情况。并为后续实验做好编程环境准备。2、用C语言编写一小段程序,使其可以通过某个系统调用来获得OS提供的某种服务。三、实验要求1 了解所安装的操作系统对软硬件资源的具体要求;2 机器最低硬件配置要求;3 操作系统所提供的用户接口环境的熟悉;4 了解主要BIOS CMOS参数的含义及其设置方法;5 掌握程序编写中系统调用的方法。四、主要实验步骤1、选择语言为中文:2)选择第一项“试用 Ubuntu 而不改变计算机中的任何内容”,进入 live 桌面后点击“安装”图标。1)选择语言,可以根据你自己的喜好选择,当然是选择中文(简体)了2)选择时区,默认上海就可以3)选择键盘布局,一般默认U.S.A 就可以4)准备分区,这是安装过程中最重要的一步。选择手动。5)准备分区,这是安装过程中最重要的一步。6)填写用户信息。7)文件迁移向导,点击下一页。8)准备安装。 9)安装完成,重新启动。10)界面如下南昌大学实验报告 -(2)编程模拟进程间的同步和互斥学生姓名: 王桥 学 号: 6100412024 专业班级: 计科123 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 一、实验目的通过实验加强对进程同步和互斥的理解,并掌握进程(线程)的创建和调用方法。学会使用信号量解决资源共享问题。学生可以自己选择在Windows或Linux系统下编写。二、实验内容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); /*操作一组信号sem_set_id是进程的标识符,sem_op是结构指针。sem_op:如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0。*/写文件,写入的数值是当前进程的进程号file=fopen(file_path,"w");if(file)/临界区fprintf(file,"%dn",number);printf("%dn",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:were donen");fflush(stdout);return 0;gcco1 1.c(编译、链接程序)./1(执行程序)2模拟PV操作同步机构,且用PV操作解决生产者消费者问题。模拟PV操作同步机构,且用PV操作解决生产者消费者问题。提示:(1) PV操作同步机构,由P操作原语和V操作原语组成,它们的定义如下:P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信号量s的状态。V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。这两条原语是如下的两个过程:procedure p (var s: semaphore);begin s:=s-1;if s<0 then W(s)end pprocedure v (var s: semaphore);begin s: =s+1;if s<=0 then R(s)end V其中W(s)表示将调用过程的进程置为等待信号量s的状态;R(s)表示释放一个等待信号量s的进程。在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可把上述的semaphore直接改成integer。(2)生产者消费者问题。假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放10件产品。那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序如下:B:array 0.9 of products;s1,s2: semaphore;IN, out; integer;IN:=0;out:=0;cobeginprocedure producer;c: products;beginL1:produce (c);p (s1);BIN:=C;IN:=(IN+1)mod 10;v(s2);goto L1end;procedure consumer;x: products;beginL2:P(s2);x:=Bout;out:=(out+1) mod 10;v(s1);consume(x);goto L2end;coend其中的semaphore和products是预先定义的两个类型,在模拟实现中semaphore用integer或char等代替。(3)进程控制块PCB。为了纪录进程执行时的情况,以及进程让出处理器后的状态,断点等信息,每个进程都有一个进程控制块PCB。在模拟实验中,假设进程控制块的结构如图4-1。其中进程的状态有:运行态、就绪态、等待态和完成态。当进程处于等待态时,在进程控制块PCB中要说明进程等待原因(在模拟实验中进程等待原因为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行结束。进程名状态等待原因断点 图4-1 进程控制块结构(4)处理器的模拟。计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。为了模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能。模拟的一组指令见图4-2,其中每条指令的功能由一个过程来实现。用变量PC来模拟“指令计数器”,假设模拟的指令长度为1,每执行一条模拟指令后,PC加1,指出下一条指令地址。使用模拟的指令,可把生产者和消费者进程的程序表示为图4-3的形式。定义两个一维数组PA0.4和SA0.4,每一个PAi存放生产者程序中的一条模拟指令执行的入口地址;每个SAi存放消费者程序中的一条模拟指令执行的入口地址。于是模拟处理器执行一条指令的过程为:取出PC之值,按PAPC 或SAPC得模拟指令执行的入口地址,将PC之值加1,转向由入口地址确定的相应的过程执行。(5)程序设计本实验中的程序由三部分组成:初始化程序、处理器调度程序、模拟处理器指令执行程序。各部分程序的功能及相互间的关系由图4-4至图4-7指出。模拟的指令功能P(s)执行P操作原语V(s)执行v操作原语putBIN:=product;IN:=(IN+1) mod 10GETX:=Bout;out:=(out+1) mod 10produce输入一个字符放入C中consume打印或显示x中的字符GOTO LPC: LNOP空操作图4-2 模拟的处理器指令序号生产者程序消费者程序0produceP(s2)1P(s1)GET2PUTV(s1)3V(s2)consume4goto 0goto 0图4-3 生产者和消费者程序初始化程序:模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量S1、S2赋初值,对生产者、消费者进程的PCB初始化。初始化后转向处理器调度程序,其流程如图4-4处理器调度程序:在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条指令后就有可能被打断而让出处理器由其他进程运行。故在模拟系统中也类似处理,每当执行一条模拟的指令后,保护当前进程的现场,让它成为非运行状态,由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。处理器调度程序流程见图4-5。开始初始化信号量S1,S2S1:=10,S2:=0处理器调度程序生产者和消费者进程的PCB中状态为就绪,断点为0将现行进程置为生产者进程,PC:=0结束图 4-4 初始化流程模拟处理器指令执行程序:按“指令计数器”PC之值执行指定的质量,且PC加1指向下一条指令。模拟处理器指令执行的程序流程见图4-6和4-7。另外,为了使得模拟程序有一个结束条件,在图4-6中附加了“生产者运行结束”的条件判断,模拟时可以采取人工选择的方法实现。图4-7给出了P(S)和V(S)模拟指令执行过程的流程。其他模拟指令的执行过程已在图4-2中指出。四、实验报告(1) 实验题目。(2) 打印源程序并附上注释。(3) 从键盘上输入一组字符,由生产者每次读入一个字符供消费者输出。运行模拟程序,打印依次读入的字符和消费者输出的字符。(4) 把生产者和消费者进程中的P操作、V操作都改成空操作指令,观察在两者不同步的情况下可能出现的与时间有关的错误。打印依次读入的字符和消费者输出的字符。开始随即选择就绪进程作为现行进程模拟处理器指令执行程序将现行进程状态改为运行态现行进程PCB的断点值=>PC结束保护现场,PC=>当前进程PCB的断点有就绪进程?否是图4-5处理器调度程序流程P(s)GOTO空操作PutGETproduceconsumeV(s)开始j:=PC按j转向各模拟指令对应的过程现行进程为生产者?否是j:=SAij:=PAiPC:=i+1置现行进程为就绪态返回生产者运行结束?置生产者进程为完成态是否图 4-6 模拟处理器指令执行开始SS+1将调用V(s)过程的进程置为就绪找一个等待s信号量的进程置为就绪态S<0返回否是开始SS-1将调用P(s)过程的进程置为就绪将调用P(s)过程的进程置为等待信号量s的状态S<0返回否是(1)模拟P(S) (2)模拟V(S)图 4-7 模拟PV操作的执行三、实验要求1、 linux操作系统2、 Windows操作系统四、主要实验步骤linux操作系统下的操作步骤: gedit semaphore.c (编辑程序)gcc o semaphore semaphore.c (编译、链接程序)./semaphore(执行程序)生产者和消费者的代码:#include <iostream>const unsigned short SIZE_OF_BUFFER = 5; /缓冲区长度unsigned short ProductID = 0; /产品号unsigned short ConsumeID = 0; /将被消耗的产品号unsigned short in = 0; /产品进缓冲区时的缓冲区下标unsigned short out = 0; /产品出缓冲区时的缓冲区下标int g_bufferSIZE_OF_BUFFER; /缓冲区是个循环队列bool g_continue = true; /控制程序结束HANDLE g_hMutex; /用于线程间的互斥HANDLE g_hFullSemaphore; /当缓冲区满时迫使生产者等待HANDLE g_hEmptySemaphore; /当缓冲区空时迫使消费者等待DWORD WINAPI Producer(LPVOID); /生产者线程DWORD WINAPI Consumer(LPVOID); /消费者线程int main() /创建各个互斥信号 g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); /调整下面的数值,可以发现,当生产者个数多于消费者个数时, /生产速度快,生产者经常等待消费者;反之,消费者经常等待 const unsigned short PRODUCERS_COUNT = 3; /生产者的个数 const unsigned short CONSUMERS_COUNT = 1; /消费者的个数 /总的线程数 const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; HANDLE hThreadsPRODUCERS_COUNT; /各线程的handle DWORD producerIDCONSUMERS_COUNT; /生产者线程的标识符 DWORD consumerIDTHREADS_COUNT; /消费者线程的标识符 /创建生产者线程 for (int i=0;i<PRODUCERS_COUNT;+i) hThreadsi=CreateThread(NULL,0,Producer,NULL,0,&producerIDi); if (hThreadsi=NULL) return -1; /创建消费者线程int i; for ( i=0;i<CONSUMERS_COUNT;+i) hThreadsPRODUCERS_COUNT+i=CreateThread(NULL,0,Consumer,NULL,0,&consumerIDi); if (hThreadsi=NULL) return -1; while(g_continue) if(getchar() /按回车后终止程序运行 g_continue = false; return 0;/生产一个产品。简单模拟了一下,仅输出新产品的ID号void Produce() std:cerr << "Producing " << +ProductID << " . " std:cerr << "Succeed" << std:endl;/把新生产的产品放入缓冲区void Append() std:cerr << "Appending a product . " g_bufferin = ProductID; in = (in+1)%SIZE_OF_BUFFER; std:cerr << "Succeed" << std:endl; /输出缓冲区当前的状态 for (int i=0;i<SIZE_OF_BUFFER;+i) std:cout << i <<": " << g_bufferi; if (i=in) std:cout << " <- 生产" if (i=out) std:cout << " <- 消费" std:cout << std:endl; /从缓冲区中取出一个产品void Take() std:cerr << "Taking a product . " ConsumeID = g_bufferout; out = (out+1)%SIZE_OF_BUFFER; std:cerr << "Succeed" << std:endl; /输出缓冲区当前的状态 for (int i=0;i<SIZE_OF_BUFFER;+i) std:cout << i <<": " << g_bufferi; if (i=in) std:cout << " <- 生产" if (i=out) std:cout << " <- 消费" std:cout << std:endl; /消耗一个产品void Consume() std:cerr << "Consuming " << ConsumeID << " . " std:cerr << "Succeed" << std:endl;/生产者DWORD WINAPI Producer(LPVOID lpPara) while(g_continue) WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Produce(); Append(); Sleep(1500); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hEmptySemaphore,1,NULL); return 0;/消费者DWORD WINAPI Consumer(LPVOID lpPara) while(g_continue) WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Take(); Consume(); Sleep(1500); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hFullSemaphore,1,NULL); return 0;六、 实验数据及处理结果七、 实验体会或对改进实验的建议实验还是挺难的,而且是第一个实验,所以参考了百度的代码。南昌大学实验报告 -(3)编程实现银行家安全算法学生姓名: 王桥 学 号: 6100412024 专业班级: 计科123 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤#include <stdio.h>#include <stdlib.h>#include <string.h>int max53; /最大需求矩阵开始定义银行家算法中需要用到的数据,定义了5个进程,3类资源int allocation53;/已分配矩阵int need53;/需求矩阵,int available3;/系统可利用资源int request53;/请求矩阵char *finish5;/表示系统是否有足够的资源分配给进程,开始先令finish【i】=false,当有足够资源给进程i,再令它等于trueint safe5;/存储安全序列int n,i,m;int k=0;int j=0;int work3;/表示系统可供给进程继续运行所需的各类资源数目int works53;void start();/表示程序开始void end();/表示程序结束void input();/输入数据void output();/输出数据void change();/系统分配资源,原有资源情况改变void outputsafe();/输出安全序列的资源分配情况int check();/安全性算法void main()/主程序开始start();for (;j=0;)/确认输入数据的正确性,若输入错误,重新输入input();printf("以下为进程资源情况,请确认其是否正确:n");output();printf("数据是否无误:n正确:输入1n错误:输入0n请输入:");scanf("%d",&j);printf("数据确认无误,算法继续。n"); if (check()=0)/若check函数返回值为,表示输入的初始数据找不到安全序列,无法进行下一步,程序结束end();exit(0);for(;j=1;)/当有多个进程请求资源时,循环开始printf("请输入请求资源的进程i(下标):");/输入发出请求向量的进程及请求向量scanf("%d",&i);printf("请输入进程P%d的请求向量Request%d:",i,i);for(n=0;n<3;n+)scanf("%d",&requestin);for(;requesti0>needi0|requesti1>needi1|requesti2>needi2;) /若请求向量大于需求资源,则认为是输入错误,要求重新输入printf("数据输入有误,请重试!n请输入进程P%d的请求向量Request%d:",i,i);for(n=0;n<3;n+)scanf("%d",&requestin);if(requesti0<=available0&&requesti1<=available1&& requesti2<=available2) /判断系统是否有足够资源提供分配printf("系统正在为进程P%d分配资源n",i);change();/分配资源j=0;elseprintf("系统没有足够的资源,进程P%d需要等待。n",i);if (j=0)/j=0表示系统有足够资源分配的情况printf("当前系统资源情况如下:n");/输出分配资源后的系统资源分配情况output();if(check()=0)/若找不到安全系列,则之前的资源分配无效printf("本次资源分配作废,恢复原来的资源分配状态。n");for (m=0;m<3;m+)/恢复分配资源前的系统资源状态availablem+=requestim;allocationim-=requestim;needim+=requestim;output();/输出系统资源状态printf("是否还有进程请求资源?n是:输入1n否:输入0n请输入:");scanf("%d",&j);/若还有进程请求资源,j=1,之前的for循环条件满足end();void line()/美化程序,使程序运行时更加明朗美观printf("-n");void start()/表示银行家算法开始line();printf(" 银行家算法开始n");line();void end()/表示银行家算法结束line();printf(" 银行家算法结束,谢谢使用n");line();void input()/输入银行家算法起始各项数据for (n=0;n<5;n+)printf("请输入进程P%d的相关信息:n",n);printf("Max:");for (m=0;m<3;m+)scanf("%d",&maxnm);printf("Allocation:");for (m=0;m<3;m+)scanf("%d",&allocationnm);for (m=0;m<3;m+)neednm=maxnm-allocationnm;printf("请输入系统可利用资源数Available:");for (m=0;m<3;m+)scanf("%d",&availablem);void output() /输出系统现有资源情况line();printf("资源情况 Max Allocation Need Availablen");printf("进程 A B C A B C A B C A B Cn");line();for(n=0;n<5;n+)printf("P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d",n,maxn0,maxn1,maxn2,allocationn0,allocationn1,allocationn2,needn0,needn1,needn2);if (n=0)printf("%6d%3d%3dn",available0,available1,available2);elseprintf("n");line();void change()/当Requesti,j<=Availablej时,系统把资源分配给进程Pi,Availablej和Needi,j发生改变for (m=0;m<3;m+)availablem-=requestim;allocationim+=requestim;needim-=requestim;void outputsafe()/输出安全序列的资源分配表printf("该安全序列的资源分配图如下:n");line();printf("资源情况 Work

    注意事项

    本文(实际操作系统实验题目及其实验报告要求.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开