操作系统课程设计实践报告

上传人:平*** 文档编号:16829292 上传时间:2017-11-09 格式:DOC 页数:51 大小:1.44MB
返回 下载 相关 举报
操作系统课程设计实践报告_第1页
第1页 / 共51页
操作系统课程设计实践报告_第2页
第2页 / 共51页
操作系统课程设计实践报告_第3页
第3页 / 共51页
操作系统课程设计实践报告_第4页
第4页 / 共51页
操作系统课程设计实践报告_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《操作系统课程设计实践报告》由会员分享,可在线阅读,更多相关《操作系统课程设计实践报告(51页珍藏版)》请在金锄头文库上搜索。

1、*软件工程 1221213042037鹿瑶*1某停车场有 50 个停车位,有车子要进来停车,先看看有没有空车位,如果有,就进来停车,车位减一,若没有空车位就在停车场外面的便道上等待,加入等待队列。每当有车子从停车场驶出,看看便道上有没有等待停车的车子,如果有就允许在等待队列最前端的车子进来停车,若便道上没有车子等待的话,停车场空车位增加。*总体设计*程序流程图*软件工程 1221213042037鹿瑶*2*具体设计*定义 car:package com.ly;public class Car 停车场管理系统 OS 的实现:package com.ly.os;import java.util.A

2、rrayList;import java.util.Scanner;public class OS static Boolean mutex;/用来做互斥锁static Boolean full;/判断是否为满static Boolean empty;/判断是否为空static final int NUMBER = 50;/车库的总容量static int nowNumber;/车库当前的汽车数目static int comeNumber = 60;/设定入库的线程数目static int leaveNumber = 45;/设定出库的线程数目static ArrayList comeThre

3、ad;/要入库的线程集合static ArrayList leaveThread;/要出库的线程集合static Scanner sc = new Scanner(System.in);/接受输入字符的类/* 让一辆车进入车库,占一个空车位,是消费者*/static public void come()if(mutex = false & full = false)mutex = true;/重要!在执行时要先上锁,执行完后再解锁nowNumber+;int n = (int)(Math.random()*(comeThread.size();/得到 0size-1 的随机数comeThrea

4、d.remove(n);/随机挑选一个线程来占用资源,进入车库。同时减少了一个入库的线程mutex = false;/解开互斥锁else if(mutex = true)System.out.println(存在互斥锁,无法进行操作);else if(full = true)System.out.println(车库满了,无法入库);if(nowNumber = NUMBER) /入库操作结束后,判断是否已经满了full = true;*软件工程 1221213042037鹿瑶*3/*让一辆车离开车库,释放一个空车位,是生产者 */static public void leave()if(mu

5、tex = false & empty = false)mutex = true;/重要!在执行时要先上锁,执行完后再解锁nowNumber-;int n = (int)(Math.random()*(leaveThread.size();/得到 0size-1 的随机数leaveThread.remove(n);/随机挑选一个线程来释放资源,离开车库mutex = false;/解开互斥锁else if(mutex = true)System.out.println(存在互斥锁,无法进行操作);else if(empty = true)System.out.println(车库空了,无法出库

6、);if(nowNumber = 0) /出库操作结束后,判断是否已经空了empty = true;/*主进程产生的一个操作控制,随机唤醒生产者或是消费者 */static public void start()int control = sc.nextInt();/接收到输入的操作码,根据 1,2 来判断操作。switch (control) case 1:come();/入库操作,看看有没有入库的/还没想好怎么弄break;case 2:leave();/有车离开车库了,通知入库的进程,看看有没有等待的车辆,有则入库come();break;default:break;/* param a

7、rgs*/public static void main(String args) / TODO 自动生成的方法存根comeThread = new ArrayList();leaveThread = new ArrayList();for(int i = 1;i#include#define SizeOfPage 100#define SizeOfBlock 128#define M 4/主存中放 4 个页面struct info/页表信息结构体bool flag;/页标志,1 表示该页已在主存,0 表示该页不在主存long block;/块号long disk;/在磁盘上的位置bool d

8、irty;/更新标志pagelistSizeOfPage;long po;/队列标记long PM;/假设内存中最多允许 M 个页面void init_ex1()memset(pagelist,0,sizeof(pagelist);/内存空间初始化/*分页式虚拟存储系统初始化 */pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;pagelist1.disk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=0

9、13;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex1()/模拟分页式存储管理中硬件的地址转换和产生缺页中断过程bool stop=0;long p,q;/页号,单元号char s128;/初始定义块长doprintf(请输入指令的页号和单元号:n);if(scanf(%ld%ld,&p,&q)!=2)scanf(%s,s);*软件工程 1221213042037鹿瑶*12if(strcmp(s,exit)=0)/如果输入的为“exit” 那么就退出,进入重选页面stop=1;elseif(pagelistp

10、.flag)/如果该页标志 flag 为 1,说明该页已在主存中printf(绝对地址=%ldn,pagelistp.block*SizeOfBlock+q);/计算出绝对地址,绝对地址=块号 x 块长(默认 128)+单元号elseprintf(*%ldn,p);/如果该页标志 flag 为 0,说明该页不在主存,则产生了一次缺页中断while(!stop);void init_ex2()/*以下部分为先进先出(FIFO)页面调度算法处理缺页中断的初始化,其中也包含了对于当前的存储器内容的初始化*/po=0;P0=0;P1=1;P2=2;P3=3;/对内存中的 4 个页面进行初始化,并且使目

11、前排在第一位的为 0memset(pagelist,0,sizeof(pagelist);/内存空间初始化pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;pagelist1.disk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex2()/模拟 FIFO 算法的工作过程

12、long p,q,i;*软件工程 1221213042037鹿瑶*13char s100;bool stop=0;doprintf(请输入指令的页号、单元号,以及是否为内存指令:n);if(scanf(%ld%ld,&p,&q)!=2)scanf(%s,s);if(strcmp(s,exit)=0)/如果输入的为“exit” 就退出,进入重选界面stop=1;elsescanf(%s,s);if(pagelistp.flag)/如果该页标志 flag 为 1,说明该页已在主存中printf(绝对地址=%ldn,pagelistp.block*SizeOfBlock+q);/计算绝对地址if(s

13、0=Y|s0=y)/内存指令pagelistp.dirty=1;/修改标志为 1elseif(pagelistPpo.dirty)/当前的页面被更新过,需把更新后的内容写回外存pagelistPpo.dirty=0;pagelistPpo.flag=0;/将 flag 置 0,表明当前页面已被置换出去printf(out%ldn,Ppo);/显示根据 FIFO 算法被置换出去的页面printf(in%ldn,p);/显示根据 FIFO 算法被调入的页面pagelistp.block=pagelistPpo.block;/块号相同pagelistp.flag=1;/将当前页面 flag 置 1,

14、表明已在主存中Ppo=p;/保存当前页面所在的位置po=(po+1)%M;while(!stop);printf(数组 P 的值为:n);for(i=0;i:iterator iter); /合并块vector unassignedArea; /未分配区map assignedArea; /已分配区;3.2 System 类的定义class Systemenum TaskState /枚举作业状态New, /新建态Ready, /就绪态Waiting, /等待态Exit /终止态;struct PCB /进程控制块int id; /进程idint memory; /主存需求量TaskState state; /任务状态int require3; /资源需求量int occupy3; /已占用资源int apply3; /当前申请量bool isEnd; /是否执行完成*软件工程 1221213042037鹿瑶*19public:PCB & operator=(PCB &pcb) /重载赋值 函数this-id = pcb.id;this-state = pcb.state;for (int i = 0; i requirei = pcb.requirei;this-occupyi = pcb.occupyi;this-a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号