操作系统课程设计
设计题目
1设计题目:CPU调度(CPU调度算法的模拟实现)
具体内容:编写算法,实现CPU调度算法FCFS、非抢占SJF、可抢占优先权调度、RR
针对模拟进程,利用CPU调度算法进行调度
进行算法评价,计算平均周转时间和平均等待时间
要求:调度所需的进程参数由输入产生
手工输入
随机数产生
输出调度结果
输出鸡掸惯赶甙非轨石憨将算法评价指标
2设计题目:虚拟内存 (页面置换算法的模拟实现)
具体内容:编写算法,实现页面置换算法FIFO、LRU
针对内存地址引用串,运行页面置换算法进行页面置换
要求:算法所需的引用串参数由输入产生:可由手工输入也可基于随机数产生
输出内存驻留的页面集合
1.进程调度算法模块
[问题描述]
1、进程调度算法:采用动态最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。
2、每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:
进程名---进程标示数 ID
优先数 PRIORITY 优先数越大优先权越高
到达时间---进程的到达时间为进程输入的时间。、
进程还需要运行时间ALLTIME,进程运行完毕ALLTIME=0,
已用CPU时间----CPUTIME、
进程的阻塞时间STARTBLOCK-表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态
进程的阻塞时间BLOCKTIME--表示当进程阻塞BLOCKTIME个时间片后,进程将进入就绪状态
进程状态—STATE
队列指针NEXT 用来将PCB排成队列。
3、调度原则:
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
进程在就绪队列中待一个时间片,优先数加1
每个进程的状态可以是就绪 R(READY)、运行R(Run)阻塞B(BLOCK)、或完成F(Finish)四种状态之一。
就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减3,然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
求课程设计报告和用c语言编写的源代码
- 课程设计的计算机操作系统程序
课程概述
计算机操作系统是中央广播电视大学计算机科学与技术专业(本科),系统设置必修课程。教学总时数72.4学分,开设一学期。前课程,计算机组成原理,面向对象编程和数据结构。
计算机操作系统课程是计算机专业的课程,通过学习,使学生掌握电脑作业系统的设计和组成的基本原则之一计算机操作系统的基本概念和新的概念,术语和术语了解计算机的发展,操作系统的功能和设计技巧和方法,基本操作使用最常用的计算机操作系统(DOS,Windows,UNIX或Linux)的。
?课程内容
主要内容包括:概述电脑的操作系统,作业管理,文件管理,存储管理,输入输出设备管理,工艺和管理处理器,操作系统结构和编程。
二,系统的教学内容和教学要求
章概述操作系统的中
教学内容:
操作系统的定义和发展形成的操作系统和五个主要类型,操作系统五大功能特性的操作系统的性能,配置的操作系统,“生成”的概念
教学要求:
主:什么是操作系统知道五类和五功能的操作系统
至少掌握:掌握操作系统的安装,使用和维护的实际怀抱
理解:如何理解一个初步的了解,熟悉和解剖学的人机交互界面的操作系统
任务的作业管理
教学内容如下:
的特点,人机界面的发展操作系统的shell语言的第一,第二和第三代接口的发展特点,基本键盘命令和系统调用任务调度算法教学要求:
主的人机界面设计
大师:掌握基本的作业系统人机界面的设计思路
理解:传统的接口界面
章文件管理的
教学内容:
文件管理任务和功能的操作系统文件的结构和分类的物理结构和逻辑结构的文件,文件目录结构,文件访问控制和安全机制,文件系统模型结构
教学要求:
水平:基本的文件访问控制和系统管理
>掌握的文件系统目录分类管理功能
理解:文件系统的程序设计
的章内部存储管理
教学内容:
内存分区,分页,子段的管理理念物理地址和逻辑地址内存“扩展”技术存储管理,支柱存储管理的内存分配算法的
教学的要求:
掌握基本配置:内存管理和调度方法
主:主不同的分区存储管理,分页和分段方法
有关:有效利用的内存空间
第五章输入和输出设备管理器的教学内容:
的输入和输出设备的功能分类独占的,共享的,虚拟装置的管理功能输入和输出设备的处理程序管理策略的输入和输出设备
教学要求:
法师:法师的输入和输出设备的管理特性
法师:法师分类设计方法的输入和输出设备
明白了:
编程元素的输入和输出设备处理程序第
教学内容的低级别的处理器管理:
操作系统的核心功能,“过程”的概念,过程的并发和并行的基本状态的转换的过程进程调度算法进程同步和互斥过程PV操作,“锁”的概念
教学要求:
大师:在操作系统内核运行的基本概念“过程“
掌握的基本转换过程中的状态和特征
理解:操作系统
教学内容,进程调度算法的编程方案的结构
BR />第七章:
操作分层的模块化的系统结构设计和操作系统的测试的
教学的要求:
本章教学基本要求:了解基本的设计思路和方法现代计算机操作系统
三,教学媒体
本课程使用的教学媒体:文字材料,视频材料,网络教学和辅导。
1。文字材料
计算机操作系统(2)武企业万元清华大学出版社
注:本课程实验的主要教材。
文字教材过程中的主要传播媒介。准备的文字材料,同时保持先进性,科学的学科体系,这两种作业系统的理论,技术,实现了一体化的三个强调的能力。
2。视频教材
该课程16节和视频,每讲50分钟,讲授的课程集中困难,科目汇总。为了帮助学生理解操作系统的整体概念和思想,伍启元教授扬声器。
当然,视频与相应的文字材料,注重艺术表达播放视频教材,教学形象化。
3。
在线教学网上教学和指导,咨询与上述有机介质方面的作用:(1)释放的教学和指导性文件,课程公告,咨询,参考材料(2)根据工程进度教学,心理咨询聊天室发表的一篇文章“自我测试题(3)实时Q&A,一天到一天的课程论坛Q(4)开展网上教师培训与教学研讨会。
文字材料的基础上,对学生的学习,视频教科书的补充文字材料,在线咨询是一个方便的教学和学习方式的互动。总之,分工和各种媒体,让学生有更大的自主学习空间,以方便学生自由选择,自主学习,提高学生的自我学习能力。
教学安排建议
当然主要教科书和课程实验教学安排建议
教学点,请根据中央电大统一安排课程,面对面辅导的要求,如表1所示。
表1的主要教科书和课程实验教学安排建议
每周教学内容小时的实验内容推荐小时
操作系统的教学安排概述
2操作系统定义了五种类型, 5 4
三人人机界面管理Linux的实践准备1
四个工作管理任务调度4
五个文件管理的任务和功能的Linux操作系统命令的逻辑结构和物理结构4
7个存储管理任务和功能2命令解释器4
九编制2
八分分配存储管理段4
分配的存储管理作业调度模拟编程的六个文件10设备管理的任务和职能
11种设备,技术和管理存储分配管理设计4
过程的定义和特征4 13进程调度和通信进程调度模拟编程 p>15操作系统级模块结构僵局的产生和处理14 26 4
(总复习)4
共56条16
课程视频内容,示于表2。
章教学内容表2视频教材课程小时的视频时间分配
操作系统提供了一个概述8小时4
运营管理8小时2
文件管理2
8小时的存储管理8小时
5个设备管理器
6过程管理8小时10小时4
7操作系统的系统程序结构6小时0
56小时16
2在线咨询在线咨询内容
包括教学文件,课程辅导,网络教室。充分利用网络资源,和偶尔的在线课程相关的辅导材料,定期,根据教学在线辅导和考试Q&A活动,适当安排的需要。具体安排如下:
?
包括课程介绍,教师,教学大纲,教学设计,教学档案。
?课程辅导
包括课程学习和答案,专题辅导,习题和答案,自我测试,评估说明,网上还提供了教师讲课教案教学点的教学使用。
?网络课堂
包括直播课堂和IP课件。
基于网络的教学活动:中央广播电视大学一般集中在每学期安排的实时在线辅导学生,教师的教学和研究活动。具体的时间表,每学期上发布的TVU的网上家园。
?论坛:每天的日常应答的过程中。
课程的课堂直播第一学期,通过教育电视台播出,安排四次直播课堂,每次50分钟。的第一堂课3个教学点,难点的教学和演讲后代表咨询审查的辅导和考试说明的过程中反映的共性问题。直播课堂挂在网页上的内容。
工作
课程形成性评估书,当然工作量。工作成绩计入课程成绩。中央电大的工作,不时抽查,检查审查和完成作业。
课程考试,请参阅“中央广播电视大学计算机操作系统课程评估的指示。建议
五,教学方法?教学建议
(1)计算机操作系统是一个实用的课程。其特点是概念多,涉及范围广。要求教学辅导深和混乱的概念来进行详细说明,并详细描述每章的重点,管理和控制的调度算法技能。
(2)注重培养学生熟悉的操作系统,以及在维护操作系统的问题进行分析,并在实验中解决问题的能力。
?建议
(1)从宏观和微观把握学习操作系统。在宏观上,要认识到在计算机系统中的操作系统的地位清除操作系统的整体结构微观方面应把握的操作系统是管理计算机资源(过程中,处理器,内存,文件,设备),了解概念,原理和技术。
(2)操作系统是计算机技术和管理技术相结合的联想日常生活学习重复熟悉的样品管理实现运营系统的管理方法,以加深对问题的理解。
(3)要注意加强自我学习的能力,有能力实现这一目标的“学习”的文化。
一.题目要求:
通过实现页面置换算法的FIFO和LRU两种算法,理解进程运行时系统是怎样选择换出页面的,对于两种不同的算法各自的优缺点是哪些。
要求设计主界面以灵活选择某算法,且以下算法都要实现 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。 4) 最不经常使用算法(LFU) 二.实验目的:
1、用C语言编写OPT、FIFO、LRU,LFU四种置换算法。 2、熟悉内存分页管理策略。 3、了解页面置换的算法。 4、掌握一般常用的调度算法。 5、根据方案使算法得以模拟实现。 6、锻炼知识的运用能力和实践能力。 三、设计要求
1、编写算法,实现页面置换算法FIFO、LRU;
2、针对内存地址引用串,运行页面置换算法进行页面置换; 3、算法所需的各种参数由输入产生(手工输入或者随机数产生); 4、输出内存驻留的页面集合,页错误次数以及页错误率;
四.相关知识:
1.虚拟存储器的引入:
局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:时间局限性和空间局限性。
2.虚拟存储器的定义:
虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
3.虚拟存储器的实现方式:
分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。
请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。
4.页面分配:
平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。 按比例分配算法,根据进程的大小按比例分配物理块。
考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份额后,分配给各进程。
5.页面置换算法:
常用的页面置换算法有OPT、FIFO、LRU、Clock、LFU、PBA等。 五、设计说明
1、采用数组页面的页号
2、FIFO算法,选择在内存中驻留时间最久的页面予以淘汰;
分配n个物理块给进程,运行时先把前n个不同页面一起装入内存,然后再从后面逐一比较,输出页面及页错误数和页错误率。
3、LRU算法,根据页面调入内存后的使用情况进行决策;
同样分配n个物理块给进程,前n个不同页面一起装入内存,后面步骤与前一算法类似。
选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换: 六.设计思想:
OPT基本思想:
是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组next[mSIZE]记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。
FIFO基本思想:
是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。
LRU基本思想:
是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组flag[10]标记页面的访问时间。每当使用页面时,刷新访问时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。 七.流程图:
如下页所示
六.运行结果: 1. 按任意键进行初始化:
2. 载入数据:
3. 进入置换算法选择界面:
4.运算中延迟操作:
5.三种算法演示结果:
#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std
struct File
{
string name
bool isDir
int pos
int len
File* pPre
File* pNxt
File* pChd
File* pPar
File(){name = ""isDir = falsepos = len = 0pChd = pPar = pPre = pNxt = NULL}
}
class DirSystem
{
private:
File* pRoot
public:
DirSystem(){pRoot = new FilepRoot->pChd = new FilepRoot->pPar = pRoot}
File* Append(File*&tail,const File&f)
{
tail->pNxt = new File
tail->pNxt->isDir = f.isDir
tail->pNxt->len = f.len
tail->pNxt->pos = f.pos
tail->pNxt->name = f.name
tail->pNxt->pChd = tail->pNxt->pNxt = tail->pNxt->pPar = NULL
tail->pNxt->pPre = tail
return tail->pNxt
}
void Md(File*&pCur,const File&f)
{
if(pCur->pChd == NULL)
{
pCur->pChd = new File
pCur->pChd->pPar = pCur
Append(pCur->pChd,f)
}
else
{
File* tmp = pCur->pChd
while(tmp->pNxt != NULL)
tmp = tmp->pNxt
Append(tmp,f)
}
}
void Show(File* pF)
{
if(pF == NULL)
return
File* cur = pF->pNxt
while(cur != NULL)
{
cout <<cur->name
if(cur->isDir)
cout <<"(文件夹) " <<endl
else
cout <<"(文件) " <<endl
cur = cur->pNxt
}
}
void Rd(File* pF)
{
if(pF == NULL)
cout <<"文件不存在!" <<endl
else if(pF->pChd != NULL)
cout <<"该文件夹中还有其它文件,拒绝删除!" <<endl
else
{
pF->pPre->pNxt = pF->pNxt
if(pF->pNxt != NULL)
pF->pNxt->pPre = pF->pPre
delete pF
}
}
void Init()
{
int num
cout <<"输入分区数:" <<endl
cin >>num
int i,pos
File f,*t
pos = 0
t = pRoot->pChd
f.isDir = true
f.pChd = f.pNxt = f.pPar = f.pPre = NULL
char ch = 'C'
for(i = 0i <num++i)
{
cout <<"输入分区容量:" <<endl
cin >>f.len
f.pos = pos
pos += f.len
f.name = ch++ + string(":")
t = Append(t,f)
}
}
void Run()
{
File* pCur
pCur = pRoot->pChd->pNxt
string hint,cmd,tmp
hint = pCur->name + "\\>"
while(true)
{
cout <<hint
cin >>cmd
cmd = Uniform(cmd)
if(cmd == "DIR")
{
cout <<pCur->name <<endl
Show(pCur->pChd)
}
else if(cmd == "CD")
{
cin >>cmd
cmd = Uniform(cmd)
File* ftmp = pCur
string htmp = hint
hint = ""
pCur = pRoot
bool find = false
vector<string>nm = Parse(cmd)
for(int i = 0i <nm.size()++i)
{
find = false
pCur = pCur->pChd->pNxt
while(pCur != NULL)
{
if(pCur->name == nm[i])
{
hint += nm[i] + '\\'
find = true
break
}
pCur = pCur->pNxt
}
if(!find)
break
}
if(!find)
{
pCur = ftmp
hint = htmp
cout <<"没有找到要转向的路径!" <<endl
}
else
{
if(nm.size() >1)
hint.erase(hint.end()-1)
hint += ">"
}
}
else if(cmd == "MD")
{
cin >>cmd
File f
f.isDir = true
f.pos = 0
f.len = 100
f.name = cmd
f.pChd = f.pPar = f.pNxt = f.pPre = NULL
Md(pCur,f)
}
else if(cmd == "MF")
{
cin >>cmd
File f
f.isDir = false
f.pos = 0
f.len = 100
f.name = cmd
f.pChd = f.pPar = f.pNxt = f.pPre = NULL
Md(pCur,f)
}
else if(cmd == "RD")
{
cin >>cmd
File* tar = pCur->pChd
while(tar)
{
if(tar->name != cmd)
tar = tar->pNxt
else
break
}
Rd(tar)
}
else
{
cout <<"您输入的命令本系统不识别!" <<endl
}
}
}
private:
vector<string>Parse(string tar)
{
vector<string>res
int beg,end
beg = 0
end = tar.find('\\',beg)
while(true)
{
res.push_back(tar.substr(beg,end - beg))
if(end == -1)
break
beg = end + 1
end = tar.find('\\',beg)
}
return res
}
string Uniform(string cmd)
{
string res = cmd
int offset = 'A' - 'a'
for(int i = 0i <cmd.size()++i)
{
if(cmd[i] >= 'a' &&cmd[i] <= 'z')
res[i] = cmd[i] + offset
}
return res
}
}
int main()
{
DirSystem ds
ds.Init()
ds.Run()
return 0
}