操作系统课程设计报告

南通大学操作系统课程设计实验报告

一、      设计内容

利用C++语言,实现操作系统模拟算法和windows的系统调用编程。分别设计进程调度的时间片轮转算法、银行家算法、信号量模拟超市购物算法、信号量模拟停车场算法,调试运行成功后,将它们整合起来,通过一个接口实现对它们的调用,运行时,选择不同的选项,调用执行各个功能算法。

二、      实现接口

通过一个c++命令行的主菜单显示5项功能操作:

进程调度-时间片轮转算法银行家算法信号量模拟超市购物算法信号量模拟停车场算法,选择不同的选项对应不同的操作,如下图所示:

三、      具体的算法和程序代码

本次课程设计共有4类模拟算法,分别是进程调度的时间片轮转算法、银行家算法、信号量模拟超市购物算法、信号量模拟停车场算法,设计的具体内容如下。

1.进程调度的时间片轮转算法

调度程序每次把cpu分配给就绪队列首进程、线程使用规定的时间间隔,称为时间片,这里是2个单位的时间,就绪队列中的每个进程、线程轮流的运行一个时间片,当时间片耗尽时,就强迫当前运行进程让出处理器,转而排列到就绪队列尾部,等候下一轮调度。此算法不是书上的,具体运行结果及代码如下:

}

void sjp()

{  struct pro *head=creatList();

printf("当前时间片大小为:%d\n",RR);

run(head);   }

2.银行家算法

这个代码不是书上的,具体代码如下:

#include<iostream.h>//银行家算法

#include<string.h>

#include<stdio.h>

#define False 0

#define True 1

int Max[100][100]={0};//各进程所需各类资源的最大需求

int Avaliable[100]={0};//系统可用资源

char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源

int Need[100][100]={0};//还需要资源

int Request[100]={0};//请求资源向量

int temp[100]={0};//存放安全序列

int Work[100]={0};//存放系统可提供资源

int M=100;//作业的最大数为100

int N=100;//资源的最大数为100

void showdata()//显示资源矩阵

{

   int i,j;

   cout<<"系统目前可用的资源[Avaliable]:"<<endl;

   for(i=0;i<N;i++)

    cout<<name[i]<<" ";

   cout<<endl;

   for (j=0;j<N;j++)

      cout<<Avaliable[j]<<" ";//输出分配资源

   cout<<endl;

   cout<<"             Max      Allocation     Need"<<endl;

   cout<<"进程名      ";

   for(j=0;j<3;j++){

      for(i=0;i<N;i++)

     cout<<name[i]<<" ";

   cout<<"      ";

   }

   cout<<endl;

   for(i=0;i<M;i++){

    cout<<" "<<i<<"         ";

    for(j=0;j<N;j++)

  

     

case 1: addresources();break;

       case 2: delresources();break;

       case 3: changeresources();break;

       case 4: share();break;

       case 5: addprocess();break;

       case 0: choice=0;break;

       default: cout<<"请正确选择功能号(0-5)!"<<endl;break;

    }

}

   

}

运行结果如下图所示

3.信号量模拟超市购物算法

这是书上17P273-P283的程序。

各个段和函数的解释如下:

⑴        vsm.h是基本的变量和函数的定义

创建线程类class MyThread{……..}

由父类MyThread 派生的子类超市线程主体class SuperMarket:public MyThread和顾客线程主体class Customer:public MyThread

⑵        vsm.cpp

MyThread构造函数

MyThread::MyThread(string name):myname(name),myhandle(INVALID_HANDLE_VALUE){…}

开始创建线程函数void MyThread::start() {}

线程申请的P操作void MyThread::WaitForCompletion(){ }

析构函数MyThread::~MyThread(){}

调用windows提供的函数创建参数:DWORD WINAPI MyThread::ThreadProc(LPVOID lpParam)

得到随机数种子int MyThread::get_random()

SuperMarket构造函数SuperMarket::SuperMarket():MyThread()

输出函数void SuperMarket::output(string os)

超市运作启动函数void SuperMarket::run()

类的析构函数SuperMarket::~SuperMarket()

设置信号量、互斥体的值为无效的句柄值

HANDLE Customer::ThreadNumMutex=INVALID_HANDLE_VALUE;

HANDLE Customer::AccessCounter=INVALID_HANDLE_VALUE;

HANDLE Customer::CounterMutex[MAXCOUNTER]={INVALID_HANDLE_VALUE,INVALID_HANDLE_VALUE

,INVALID_HANDLE_VALUE};

HANDLE Customer::CookMutex=INVALID_HANDLE_VALUE;

HANDLE Customer::AccessCookCounter=INVALID_HANDLE_VALUE;

设置顾客人数void Customer::setCustomerNumber()

创建各个柜台结账的线程void Customer::setCounter()

创建买熟食的互斥体void Customer::setCookMutex()

处理顾客结账的函数void Customer::handlecounter()

顾客类的构造函数Customer::Customer(int ID)

顾客的初始化,创建各个线程void Customer::initialize()

顾客到来随机购物的函数void Customer::run()

关闭顾客线程句柄void Customer::closehandle()

产生顾客具体购物行为的函数,随机产生顾客买东西,买熟食,如何排队结账,消费钱数void Customer::shopping()

main.cpp

这个只有主函数main(),调用主要的执行vsm.cpp中的操作,进行超市的创建,运行。

运行的结果如下图所示:

                   

信号量模拟停车场算法

停车场的停车位有50个,有一个入口和一个出口,分别对应一个线程,具体代码如下:

#include <IOSTREAM.h>

#include <STDIO.H>

#include <windows.h>

HANDLE Empty,full,mutex;//声明3个信号量,互斥信号量mutex,计数信号量fullEmpty

int x=0;

int y=0;

char *buffer;//缓冲区buffer

//输出buffer

void output()

{

for (int i=0;i<50;i++)

{

           cout<<buffer[i]<<" ";

}

cout<<"\n";

}

DWORD WINAPI import(LPVOID param)

{

int j=1;     

do

{

           WaitForSingleObject(Empty,INFINITE);//buffer空余量减一

           WaitForSingleObject(mutex,INFINITE);//形成互斥,只能一个线程去生产

           cout<<"入口号为"<<GetCurrentThreadId()<<"   &&&&&"<<j<<"辆车进入停车场&&&&&&  ";

//输出当前线程的id号,和执行的次数

           buffer[(y++%10)]='A';//停车赋值为A

           output();//输出buffer

           cout<<endl;

           j++;

           ReleaseSemaphore(mutex,1, NULL);//取消互斥,允许其他线程生产

           ReleaseSemaphore(full,1, NULL);//可以占用车位加1

} while (j!=11);//一个入口进入车辆10 

return 0;

}

DWORD WINAPI export(LPVOID param)

{        

int j=1;     

do

{

           WaitForSingleObject(full,INFINITE);//将占用车位减1

           WaitForSingleObject(mutex,INFINITE);//形成互斥访问,只能一个线程可以访问。

                    cout<<"出口号为"<<GetCurrentThreadId()<<"   ***"<<j<<"辆车离开停车场*****  ";

           buffer[x++%10]='B';//车辆离开时赋值为B

           output();//输出buffer

           cout<<endl;

           j++;

           ReleaseSemaphore(mutex,1, NULL);//取消互斥,允许其他线程消费

           ReleaseSemaphore(Empty,1, NULL);//buffer空余量加1             

} while (j!=11);//一个出口可以通过车辆10

return 0;

}

int che()

{

int i;

Empty=CreateSemaphore(NULL,10,10,NULL);//声明计数信号量,Empty初值为10

full=CreateSemaphore(NULL,0,10,NULL);//声明技术信号量,full初值为0

mutex=CreateSemaphore(NULL,1,1,NULL);//申明互斥信号量,初值为1

//初始化buffer数组,大小为0

buffer=new char[50];

for (i=0;i<50;i++)

{

           buffer[i]='N';

}       

//HANDLE thread;

DWORD *ThreadId=(DWORD *)malloc(2*sizeof(DWORD*));

HANDLE *ThreadHandle=(HANDLE *)malloc(2*sizeof(HANDLE*));//创建线程句柄,分配空间

//创建1个入口线程和1个出口线程

for (i=0;i<1;i++)

{                 ThreadHandle[i+1]=CreateThread(NULL,0,import,NULL,0,&ThreadId[i+1]);                       

        ThreadHandle[i]=CreateThread(NULL,0,export,NULL,0,&ThreadId[i]);                          

}       

//让所有线程在主线程main()执行完钱全部执行完毕。

WaitForMultipleObjects(2,ThreadHandle,TRUE,INFINITE);      

return 0;

}

运行的结果如下:

    

四、调试心得与体会

这次的课程设计是实现操作系统的模拟算法与系统调用,并且设计一个接口对它们进行调用,这是对书上理论和c++语言的综合。虽然实验指导书有很多源代码,但是对我来说还有很多不懂的地方。在进程调度算法使用时间片轮转法,这时需要创建一个链表用以记录运行的作业,便于时间片耗尽时的下一次循环运行;银行家算法的主要思想是用来避免死锁,当某个进程提出资源请求时,假定先分配给它,之后调用系统安全性检查算法,进行系统安全性检查。若系统安全,假分配变为真分配,否则假分配作废。经过调试运行,银行家确实是一种行之有效的死锁避免算法,也让我对于理论的知识理解的更加透彻。比较困难的就是信号量模拟超市购物算法,虽然书上有源代码,但是理解起来还有一定的难度。程序里有很多关于创建线程,互斥体,主线程的函数,通过在网上搜索资料,我才明白它们具体的参数和使用方法最后的信号量解决停车场问题则是自己收集资料设计的,虽然设计的程序能够执行车辆的出入,但是还有很大的缺点,那就是车辆只能顺序的进入和依次的出去,而不能达到随机的进出车辆的目的。

调试运行成功各个算法后,然后在设计接口的时候,在整合它们的时候,一个文件里面只能有一个main()函数,否则就会出错,这就需要c++语言坚实的编程基础,尤其在编程调试有错误的时候,更是对c++程序设计能力的考验。编程调试时会出现各种各样的错误,那就不仅要求个人的编程能力,还有对操作系统知识的活学活用。

虽然只有一周的时间,查找资料,设计程序,调试运行的过程有时候比较辛苦,但我觉得自己也有了很多收获,这证明了一学期的操作系统并没有白学,自己的编程能力也得到了锻炼。

 

第二篇:操作系统课程设计报告模板

操作系统课程设计

中文题目

英文题目

作 者:学生1 学生2 学生3 学生4 学生5

指导教师:李新荣

操作系统课程设计

团队照片

口号:

操作系统课程设计

《操作系统课程设计》任务书

设计目的:

本课程设计是学生学习完《操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

设计时间:

两周。

设计要求:

1.每5人组成一个团队,每个团队开发一个操作系统内核,内核具有传统操作系统的基本功能,包括:处理机管理、内存管理、设备管理、作业管理、用户接口等。每部分的算法可根据需要简单或复杂。

2.课程设计做完后,按组进行验收和答辩,验收和答辩合格后,给出相应的成绩。

3.每个团队写一份课程设计报告,要在报告中写明分工情况。

4.课程报告要按照模版撰写,报告中要写明:

(1)软件功能描述

(2)界面说明

(3)程序处理流程

(4)任务的定义及实现

(5)调试过程中遇到的问题和解决的方法

(6)进一步改进方案和应用建议

(7)使用说明书

设计步骤:

1.选定题目,每组提交设计方案(初期检查);

2.项目中期检查,每个团队提交中期检查报告,写出目前开发状况;

3.项目验收和答辩。

成绩评定:

课程设计成绩按100分制计算,评定的依据有考勤、设计文档资料、项目验收和答辩四个成绩组成。总成绩=考勤*10%+设计文档*30%+项目验收*40%+答辩*20%。

提交的资料:

课设完成后要提交项目的设计方案、用户手册、源程序等内容,课设提交具体内容见下面的清单:

课设提交内容清单

操作系统课程设计

操作系统课程设计报告模板

注:

(1)开发文档交打印版,提交完整的设计报告。

(2)刻光盘:以上所有内容均放到光盘中,每组一分

提交时间:12月18号

操作系统课程设计

摘要

在计算机网络高速发展的今天,计算机技术不断地更新与完善,无论是硬件还是软件的变更都会在计算机操作系统的设计技术与使用风格上得到体现。

操作系统是计算机系统配置的所有软件中使用最广泛的基础软件,它在整个计算机系统软件中处于中心地位,也是计算机专业课教学中做重要的环节之一。从操作系统自身角度讲,它不仅很好地体现了计算机日益发展中的软件研究成果,而且也较好地体现了计算机的硬件技术发展及计算机系统结构的用户界面环境。

我们团队共同开发一个简单的操作系统内核,内核具有传统操作系统的基本功能,包括:内存管理、处理机管理、设备管理、作业管理、用户接口五方面,每部分的算法都由小组成员独立完成。

关键词: 首次适应算法、最佳适应算法、引导扇区、调度

操作系统课程设计

目 录

摘要 ............................................................................................................................................................................. 5

第1章 绪 论 ......................................................................................................................................................... 7

1.1课题研究现状分析 ....................................................................................................................................... 7

1.11理论研究基础 ..................................................................................................................................... 7

1.12技术层面的支持 ................................................................................................................................. 7

第2章 系统方案 ..................................................................................................................................................... 8

2.1 ........................................................................................................................................................................ 8

2.2 ........................................................................................................................................................................ 8

第3章 功能与指标 ............................................................................................................................................... 15

3.1 通过引导扇区进入系统 ....................................................................................................................... 15

3.2 成功进入系统后显示成功提示字符....................................................................................................... 15

3.3 进入系统后所支持的操作 ...................................................................................................................... 15

第4章 实现原理 ................................................................................................................................................... 15

4.1 操作系统实现基本原理 .......................................................................................................................... 15

第5章 系统实现 ................................................................................................................... 错误!未定义书签。

操作系统课程设计

第1章 绪 论

课程设计是《现代操作系统》课程教学必不可缺的一个重要环节,可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视.此次课程设计让大家更加体会到团队的可贵性,让大家挑战一个极限,努力去完成的自己的那部分任务,从中又让大家更好的去学习自己不会的东西。

1.1课题研究现状分析

1.11理论研究基础

(1)对于内存管理的各种算法的学习,例如:(本次设计用到的)首次适应算法、最优适应算法

(2)对处理机的管理涉及到作业与作业调度、进程调度、实时调度、死锁发现与解决等问题的研究

(3)对设备管理,我们主要研究的是存储器、内存与硬件之间的和谐使用

(4)对作业管理主要研究作业的后备、运行和完成三种状态,期间涉及到先来先服务和短作业优先

调度算法、优先级调度算法和高响应比优先调度算法

(5)对于接口方面涉及到以上五个研究,它将每个研究模块紧密联系起来,最终形成一个统一的完

整的操作系统

1.12技术层面的支持

(1)通过参考资料对算法的进一步学习和实现。

(2)主要技术是通过研究《一个操作系统的实现》和汇编语言的学习

(3)通过C语言和汇编语言,完整最终代码

(4)

(5)

操作系统课程设计

第2章 系统方案设计

2.1 内存管理设计

此次内存管理的设计采用离散式的分配方式,使用其中分页存储管理方式。

分页式存储管理方式:

分式存储管理方式将进程的地址空间,分成若干页,并为各页加以编号,从0开始。相应的

也把内存空间分成若干个块,同样为他们编号,如0#块。再为进程分配内存时,以块为单位,将进程中的若干页,分别装入到多个可以不相邻接的物理块中。

页表的实现机制:

2.2 处理器设计

处理器管理或称处理器调度,是操作系统资源管理功能的另一个重要内容。在一个允许多道程序同时执行的系统里,操作系统会根据一定的策略将处理器交替地分配给系统内等待运行的程序。一道等待运行的程序只有在获得了处理器后才能运行。一道程序在运行中若遇到某个事件,例如启动外部设备而暂时不能继续运行下去,或一个外部事件的发生等等,操作系统就要来处理相应的事件,然后将处理器重新分配。

首先,CPU的内部结构可以分为控制单元,逻辑运算单元和存储单元(包括内部总线及缓冲器)

三大部分。CPU的工作原理就像一个工厂对产品的加工过程:进入工厂的原料(程序指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再存储在仓库(存储单元)中,最后等着拿到市场上去卖(交由应用程序使用)。在这个过程中,我们注意到从控制单元开始,CPU就开始了正式的工作,中间的过程是通过逻辑运算单元来进行运算处理,交到存储单元代表工作的结束。

CPU工作时会有数据和指令不断与处理机进行交换,如:数据与指令在CPU中的运行 。 数据

从输入设备流经内存,等待CPU的处理,这些将要处理的信息是按字节存储的,也就是以8位二进制数或8比特为1个单元存储,这些信息可以是数据或指令。数据可以是二进制表示的字符、数字或颜色等等。而指令告诉CPU对数据执行哪些操作,比如完成加法、减法或移位运算。

另外,CPU每执行完一条指令就去扫描中断寄存器,检查是否有中断发生,若没有中断就继续

执行下条指令;若有中断发生就转去执行相应中断处理程序。中断处理过程可粗略的分为以下四个过程:

1. 保护当前正在运行程序的现场;

2.分析是如何中断,以便去执行相应的中断处理程序;

3.执行相应的中断处理程序

4.恢复被中断程序现场

操作系统课程设计

所为硬件的核心处理器承担的工作无疑是繁重的,能否更好地处理好处理机的调度关系到整个系统的效率问题。

用处理机调度应避免死等、死锁等问题,对于此类问题应加以重视。

2.3 设备管理设计

(一)缓冲管理:

1.缓冲管理的基本思想

? 缓冲管理的基本思想是在CPU和外围设备之间建立缓冲区,用于暂存CPU和外围设备之间交换的数

据,从而缓和CPU和外围设备速度不匹配所产生的矛盾。同时,缓冲区的使用使得一次输入的信息能够多次使用。

2.缓冲池中缓冲区的结构

? 为了能够深入讨论缓冲池的管理,先来了解缓冲池的结构。通常缓冲池包含多个缓冲区,而每一个

缓冲区又由两部分组成,一部分是缓冲首部,它用来标识该缓冲器和用于管理,而另一部分是缓冲体,它用于存放数据,且这两部分存在一一对应的映射关系。对缓冲池的管理是通过对每一个缓冲器的缓冲首部进行操作来实现的。

? 缓冲池中缓冲区的结构如图5-7所示,其中缓冲首部包括设备号、设备上的数据块号(对于块设备

而言)、互斥标识位以及缓冲队列连接指针和缓冲器号等。

? 图--缓冲池中缓冲区的结构

设备号数据块号缓冲体互斥标识位

连接指针 缓冲器号

3.缓冲池的缓冲区队列

? 缓冲池中有3种类型的缓冲区,即空白缓冲区(empty)、装满输人数据的缓冲区(in)、装

满输出数据的缓冲区(out)。根据这3种类型缓冲区被分别建立在3种不同的缓冲区队列:

? ①空白缓冲队列em,其队首指针为F(em),队尾指针为T(em);

? ②装满输入数据的输入缓冲队列in,其队首指针为F(in),队尾指针为T(in);

? ③装满输出数据的输出缓冲队列out,其队首指针为F(out),队尾指针为T(out)。

操作系统课程设计

如下图--缓冲区队列

操作系统课程设计报告模板

操作系统课程设计报告模板

操作系统课程设计报告模板

操作系统课程设计报告模板

4.缓

冲池的工作缓冲区

? 除了三种缓冲队列之外,系统(或用户进程)从这三种队列中申请和取出缓冲区,并用得到的缓冲区

进行存数、取数操作,在存数、取数操作结束后,再将缓冲区放入相应的队列。通常,这些缓冲区被称为工作缓冲区。因此,在缓冲池中,有4种类型的工作缓冲区,即:

? ①用于收容设备输入数据的收容输入缓冲区(hin)。输入进程要想输人数据时,从空缓冲队列中摘

取一个空的缓冲区,作为收容输入工作缓冲区,提供给输入进程往里装入输入的数据,装满后插入到装满输人数据的缓冲区队供计算进程消耗。

? ②用于提取设备输入数据的提取输入缓冲区(sin)。计算进程需要数据时,从装满输入数据的缓冲

队列中摘取一个缓冲区,作为提取输入工作缓冲区,将此缓冲区的数据提取完后,它变成了空缓冲区,然后将其插入到空缓冲队中。

? ③用于收容CPU输出数据的收容输出缓冲区(hout)。当计算进程需要将计算结果输出时,从空缓冲

队列中摘取一个空缓冲区,作为收容输出缓冲区,计算进程将计算结果放入其中,装满后将其插入装满输出数据的缓冲队中。

? ④用于提取CPU输出数据的提取输出缓冲区(sout)。当输出进程要想输出数据时,从装满输出数据

的缓冲区队列中摘取一个装满输出数据的缓冲区,输出进程从中输出数据,输出结束后,将其插入到空缓冲队列中。缓冲池缓冲区(hin)缓冲区(sout)缓冲区(sin)缓冲区(hout)收容输入提取输入收容输出提取输出外围设备CPU

? 缓冲池的工作缓冲区如图所示

2.4 用户接口设计

为了使用户能方便的使用计算机,操作系统提供了相应的用户接口,帮助用户快速、有效、安全可靠地操纵计算机中的各类资源,完成相应处理。

为了方便与用户交互,通常把命令解释程序放在用户层,以用户态方式运行。

操作系统课程设计

在练级操作方式下,中断处理程序把用户键入的信息送键盘缓冲区缓存。一旦用户键入回车符,便立即把控制权交给命令解释程序。显然,对不同的命令,应有完成特定功能的处理程序与之对应。可见,命令解释程序的主要作用是,在屏幕上给出提示符,请用户键入命令,然后读入该命令,识别命令,再转到相应的处理程序的入口地址,把控制权交给该处理程序去执行,并将处理结果送屏幕显示。若用户键入的命令有错,而命令解释程序未能予以识别,或在执行中间出现问题时,则应显示出某一出错信息。

命令解释程序的工作流程如下图所示:

操作系统课程设计报告模板

Shell解释程序工作流程:

① 读入用户键盘输入的命令,户键入的信息送键盘缓冲区缓存。一旦用户键入回车符,表示本

命令已结束,于是系统立即把控制权交给命令解释程序。

② 命令解释程序从缓冲区中读取用户输入的命令,对命令进行分析。

③ 重点进程调用fork,为二叉树命令行树中的每一条命令,建立相应子进程。

④ 等待子进程完成。对于“;”型节点,须在其左子树完成后,故终端进程本省需要调用系统wait4(),

来等待子进程完成,档子进程调用execve(),子进程根据文件名(即命令名),到目录中查找文件,将他调入内存,执行这个程序;档子进程完成处理后终止,向父进程报告,此时终端进程醒来,在做必要的判别后,继续处理下一条命令,重复上述过程。

⑤ 对于“&”型节点,在启动左子节点执行后,因它是台命令,不需要等待,因此终端进程不用系统

调用wait4(),而是再执行其右子树。

Shell基本执行过程及父子进程之间的关系如下图所示:

操作系统课程设计

操作系统课程设计报告模板

2.5 作业管理设计

1.算法思想

调度是操作系统的根本功能,不同的系统采用的调度算法不尽相同。各个调度算法的设计思想如下: 先来先服务算法:从文件中将作业的JCB各项数据读入到相应数组中,然后利用作业的到达时间arrivetime[10]进行升序排序,并相应调整各个数组的数据,然后输出各项信息。

短作业优先算法:从文件中将作业的JCB各项信息读入到相应数组中,然后利用作业的作业的所需运行时间resquesttime[10]进行升序排序,调整相应数据信息。然后计算作业的其他信息,输出到屏幕上。 高响应比算法:从文件中将作业的JCB各项信息输入到相应数组中,然后对作业的到达时间arrivetime[10]进行遍历,取得最小值,即最先到达的作业,首先被执行。将最先到达的作业移到数组的第一项,然后执行高响应比算法,高响应比算法是首先求出为执行作业的等待时间,存数数组waittime中,然后按根据为执行文件的响应比,取得响应比最大的未执行作业,将该作业的JCB信息,存到数组中, 接着循环以上步骤,直至执行完所有的作业。

2.选择调度算法的原则

(1)选择的调度算法应与系统的整个设计目标一致

(2)注意系统资源的均衡使用

(3)平衡系统和用户的要求。

操作系统课程设计

3.程序具体实现方案

(1)在数据结构上选择单向链队,即后备作业队列的每个结点表示一个作业块,每个作业块即JCB包含如

下信息:作业名,到达时间,所需时间,已运行时间,作业状态,所需主存大小,所需磁带机数目。

(2)提交新作业时,调用函数EnQueue(m_JobName,m_NeedTime)即将作业插入到后备作业队列的末尾。接

着判断内存作业队列是否为空,若为空则将后备作业调入内存运行并启动计时器SetTimer(1,1000,NULL),更新列表框控件的信息的显示。

(3)由于计时器的时间间隔设置为1000毫秒,故每秒钟将调用一次OnTimer(UINT nIDEvent)函数,检查

作业的运行状态,若作业的已运行时间大于等于所需时间,则将该作业从内存作业队列中撤销,并处理机依照某一个作业调度算法(FCFS先来先服务,SJF短作业优先,HRN高响应比优先调度算法)进行下一个作业的调度,更新列表框控件的信息显示。

(4)当所有作业都调度完成时,撤销计时器即调用函数KillTimer(1).

4.程序流程图

操作系统课程设计

4

操作系统课程设计报告模板

操作系统课程设计

第3章 功能与指标

3.1 通过引导扇区进入系统

3.2 成功进入系统后显示成功提示字符

3.3 进入系统后所支持的操作

第4章 实现原理

4.1 操作系统实现基本原理

当计算机电源被打开时,它会先加电自检,然后寻找启动盘,一旦BIOS发现了引导扇区,就会将内核加载到预设的内存地址处,然后跳转到预设的地址处将控制权彻底交给我们所写的引导代码,最终实现操作系统的引导。

参考文献

1.自己动手写操作系统 于渊 编著/20xx年08月/电子工业出版社

2.Orange S:一个操作系统的实现 于渊 著电子工业出版社 2009-6-1

相关推荐