操作系统课程设计+linux操作+进程调度

合集下载

操作系统课程设计:进程调度

操作系统课程设计:进程调度

操作系统原理课程设计进程调度院系:计算机科学技术学院班级:计07-2班姓名:潘亮(30号)指导教师:鲁静轩2009年7 月10 日操作系统原理课程设计任务书一、题目:进程调度二、设计要求(1)阚翀(组长),潘亮组成课程设计小组。

(2)查阅相关资料,自学具体课题中涉及到的新知识。

(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。

(4)所设计的程序应有输入、输出。

(5)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考文献。

报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

总体设计应配合软件总体模块结构图来说明软件应具有的功能。

详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。

四、课程设计工作计划2009年6月18日,指导教师讲课,学生根据题目准备资料;2009年6月19日,进行总体方案设计;2009年6月20日~2009年6月25日,完成程序模块并通过独立编译;2009年6月26日~2009年6月27日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2009年6月27日~2009年6月29日,验收、撰写报告;2009年6月29日下午,验收或总结。

指导教师签章:教研室主任签章操作系统原理课程设计指导教师评语与成绩目录一概述 (1)二总体方案设计 (2)三详细设计 (4)四程序的调试与运行结果说明 (7)五课程设计总结 (10)六后记 (11)七附录 (12)八参考文献 (26)一概述一、课程设计的目的。

操作系统课程设计报告-进程调度的模拟实现

操作系统课程设计报告-进程调度的模拟实现

操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期博雅学院ﻬ题目:进程调度的模拟实现的模拟实现一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念.二、设计内容1)概述选择一个调度算法,实现处理机调度。

设计要求:1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。

2)可选择进程数量3)本程序包括三种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。

调度时总是选取优先数最大的进程优先运行2.每个进程的优先数,运行时间,由程序任意指定.3.为了调度方便,把进程按给定优先级(动态优先级算法中)从小到大排成一个队列。

按给定运行时间(短作业优先)从小到大排成一个队列用一个变量作为队首指针,指向队列的第一个进程。

4.处理机调度总是选队首进程运行。

由于本实验是模拟处理机调度,所以被选中的进程并不实际的启动运行,而是执行:优先数-1(动态优先级算法中)要求运行时间-1来模拟进程的一次运行。

5.进程运行一次后,若要求运行时间不等于0,则再将它加入队列(动态优先级算法中:按优先数大小插入.),且改变队首指针:若要求运行时间=0,则把它的状态改为完成(C)状态,且退出队列。

(5)对于遇到优先数一致的情况,采用FIFO策略解决.3。

概要设计(1)本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。

操作系统学习课程设计方案之进程调度

操作系统学习课程设计方案之进程调度

目录一.成绩评定表二.任务书三.计目的意义、设计内容四.计方案(软硬件环境,开发工具或语言选择及思路)五.程序功能模块设计(程序功能模块划分及层次等)六.程序总控流程图七.数据结构设计八.程序代码结构(函数调用关系或类层次关系)九.程序主要代码解读十.测试数据及测试结果十一.设计过程中遇到的问题及解决方法十二.结论(系统实现情况、系统特点、设计体会及收获等)十三.目前资料收集情况(含指定参考资料)二.任务书:三.设计目的意义、设计内容1.编程实现模拟操作系统进程调度子系统的基本功能;理解进程调度的概念,通过课程设计深入了解进程控制块的功能、进程的创建、删除以及进程各个状态间的转换过程;实现先来先服务、时间片轮转、多级反馈轮转法对进程进行的调度过程;通过观察有关的队列结构的内容的动态变化过程深入体会各个调度算法的特点;从而能够更好的巩固从书本上学到的知识。

2.编程过程中需要建立队列等结构进行各种操作,通过该次实验,可以督促学生从实用的角度对《数据结构》课程内容进行更深入理解和更熟练的应用。

3.实验编程语言要求使用java语言或C++语言。

通过对调度功能的编程实现,不但能有效训练学生对编程语言的熟练使用,还能促进学生独立思考解决问题、以及独立查新获取知识的能力。

四.设计方案(软硬件环境,开发工具或语言选择及思路等)<1>设计环境平台:该软件在Windows XP,JDK1.6<2>开发工具:eclipse+designer<3>设计思路:1、进程概念:进程是被独立分配资源的最小单位。

进程是动态概念,必须程序运行才有进程的产生。

2、进程的状态模型:(1)运行:进程已获得处理机,当前处于运行状态。

(2)就绪:进程已经准备好,一旦有处理器就可运行。

(3)阻塞:进程因为发生某事件而暂停执行,亦即进程的执行受到阻塞。

3、处理机调度:在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机这一重要的资源。

操作系统实验报告进程调度

操作系统实验报告进程调度

操作系统实验报告进程调度操作系统实验报告:进程调度引言在计算机科学领域中,操作系统是一个重要的概念,它负责管理和协调计算机系统中的各种资源,包括处理器、内存、输入/输出设备等。

其中,进程调度是操作系统中一个非常重要的组成部分,它负责决定哪个进程在何时获得处理器的使用权,以及如何有效地利用处理器资源。

实验目的本次实验的目的是通过对进程调度算法的实验,深入理解不同的进程调度算法对系统性能的影响,并掌握进程调度算法的实现方法。

实验环境本次实验使用了一台配备了Linux操作系统的计算机作为实验平台。

在该计算机上,我们使用了C语言编写了一些简单的进程调度算法,并通过模拟不同的进程调度场景进行了实验。

实验内容1. 先来先服务调度算法(FCFS)先来先服务调度算法是一种简单的进程调度算法,它按照进程到达的顺序进行调度。

在本次实验中,我们编写了一个简单的FCFS调度算法,并通过模拟多个进程同时到达的情况,观察其对系统性能的影响。

2. 短作业优先调度算法(SJF)短作业优先调度算法是一种根据进程执行时间长度进行调度的算法。

在本次实验中,我们编写了一个简单的SJF调度算法,并通过模拟不同长度的进程,观察其对系统性能的影响。

3. 时间片轮转调度算法(RR)时间片轮转调度算法是一种按照时间片大小进行调度的算法。

在本次实验中,我们编写了一个简单的RR调度算法,并通过模拟不同时间片大小的情况,观察其对系统性能的影响。

实验结果通过实验,我们发现不同的进程调度算法对系统性能有着不同的影响。

在FCFS 算法下,长作业会导致短作业等待时间过长;在SJF算法下,长作业会导致短作业饥饿现象;而RR算法则能够较好地平衡不同进程的执行。

因此,在实际应用中,需要根据具体情况选择合适的进程调度算法。

结论本次实验通过对进程调度算法的实验,深入理解了不同的进程调度算法对系统性能的影响,并掌握了进程调度算法的实现方法。

同时,也加深了对操作系统的理解,为今后的学习和研究打下了良好的基础。

进程调度——操作系统课程设计报告

进程调度——操作系统课程设计报告

·结果分析
根据每个算法的运行情况,统计结果,进行比较分析,便于分析调度 算法的效率。
四.程序总控流程图
Y 先来先服务 时间片轮转 多级反馈轮转 优先级(抢占、非抢占) 是否继续模拟 结束 启定时器 执行选中的算法模拟 是否结束 写入信息统计 设置参数 开始 选择算法 Y N N
五.数据结构设计
5.1进程信息的数据结构 class process { protected: int name; // 进程名,标识进程的ID int spendtime; //进程已经执行的时间 int costtime; //进程占用时间片的时间 int needtime; //进程需要的总时间 int starttime; //进程进入的时间 int priority; //进程的优先级 }; 5.2 各个队列的数据结构 class myqueue { protected: queue<process> qp; //放进程的容器
摘要
现代计算机系统中,进程是资源分配和独立运行的基本单位,是操 作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理 的最基本,也是最重要的概念。 进程调度是进程管理过程的主要组成部分,是必然要发生的事件。 在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化 的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终 止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个 进程进占CPU。进程调度的核心是进程调度算法. 在本课程设计中,用良好清晰的界面向用户展示了进程调度中的先 来先服务算法,优先级(抢占式与非抢占式),时间片轮转法和多级反馈 轮转法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时 间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态 的显示进程调度过程及各个队列的变化。同时,为了更加清晰直观的演 示各个算法及各关键变量的变化,我们时时更新时间片,算法名称,当 前进程信息,全局计时器以及进度条等。通过此进程调度模拟系统,用 户可以对上述的四种算法有进一步以及直观的了解。

2011180021-Linux操作系统-课程设计报告-基于Linux的进程调度模拟程序

2011180021-Linux操作系统-课程设计报告-基于Linux的进程调度模拟程序
6、就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。
7、采用最高优先数算法的动态优先数法则控制进程:如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
(4)主函数
利用上述的数据结构和函数实现模拟进程调度。
3.进程产生模拟
通过标准输入模拟产生进程:先要求输入进程数目,再依次输入各个进程的进程名、进程优先数、进程需要运行的时间。
4.1.3参考代码
#include<stdio.h>
#include<string.h>
#include<malloc.h>
设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择某一进程占用处理机。使得系统中的进程能够有条不紊的运行,同时提高处理机的利用率以及系统的性能。所以设计模拟进程调度算法(最高优先数优先的调度算法、先来先服务算法),以巩固和加深处理进程的概念,并且分析这两种算法的优缺点。
6.课题研究结论8
7.总结9
1、课程设计题目概述
随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。本文就是对进程调度进行研究、实验的。

操作系统课程设计报告进程调度

操作系统课程设计报告进程调度

前言操作系统(Operating System, 简称OS)是管理和控制计算机硬件与软件资源旳计算机程序, 是直接运营在“裸机”上旳最基本旳系统软件, 任何其他软件都必须在操作系统旳支持下才干运营。

操作系统是顾客和计算机旳接口, 同步也是计算机硬件和其他软件旳接口。

操作系统旳功能涉及管理计算机系统旳硬件、软件及数据资源, 控制程序运营, 改善人机界面, 为其他应用软件提供支持, 让计算机系统所有资源最大限度地发挥作用, 提供多种形式旳顾客界面, 使顾客有一种好旳工作环境, 为其他软件旳开发提供必要旳服务和相应旳接口等。

事实上, 顾客是不用接触操作系统旳, 操作系统管理着计算机硬件资源, 同步按照应用程序旳资源祈求, 分派资源, 如: 划分CPU时间, 内存空间旳开辟, 调用打印机等。

操作系统旳重要功能是资源管理, 程序控制和人机交互等。

计算机系统旳资源可分为设备资源和信息资源两大类。

设备资源指旳是构成计算机旳硬件设备, 如中央解决器, 主存储器, 磁盘存储器, 打印机, 磁带存储器, 显示屏, 键盘输入设备和鼠标等。

信息资源指旳是寄存于计算机内旳多种数据, 如系统软件和应用软件等。

操作系统位于底层硬件与顾客之间, 是两者沟通旳桥梁。

顾客可以通过操作系统旳顾客界面, 输入命令。

操作系统则对命令进行解释, 驱动硬件设备, 实现顾客规定。

本次课程设计我们将对上学期所学旳知识进行系统旳应用, 而达到巩固知识旳作用目录1问题概述 (2)2需求分析 (2)3 概要设计 (2)3.1重要功能 (2)3.2 模块功能构造 (3)3.3 软硬件环境 (3)3.4数据构造设计 (3)4 具体设计 (4)4.1“先来先服务(FCFS)调度算法” (4)4.2“短进程调度算法(SPF)” (7)4.3“高响应比优先调度算法” (10)4.4“优先级调度(非抢占式)算法” (13)5 系统测试及调试 (15)5.1测试 (15)5.2调试过程中遇到旳问题 (16)6 心得体会 (17)7 参照文献 (18)8 附录 (19)1问题概述编写一种进程调度程序, 容许多种进程并发执行。

Linux操作系统实验2-进程调度的操作

Linux操作系统实验2-进程调度的操作

1.查看并创建用户的计划任务列表crontab文件;
1)查看crontab命令的帮助信息;
在终端下键入info crontab, 进入crontab帮助手册:
2)查看用户的计划任务列表;
查看特定用户的计划任务列表:
在终端下键入crontab -l -u duke 列出duke用户的所有定时任务,如下:
终端提示no crontab for duke,说明用户duke目前没有计划任务。

查看当前用户的计划任务列表:
在终端下键入crontab -l 列出当前用户的所有定时任务,如下:
终端提示no crontab for duke,说明用户duke目前没有计划任务。

2.通过crontab文件对调度进程的计划任务进行编排操作。

1)建立crontab文件;
在终端下键入crontab -e ,提示当前无crontab文件,选择编辑器并新建如下:进入VI编辑器,编辑当前crontab文件,可以看到提供了一些注解作说明。

在crontab中输入0 3 * * 1 ls /etc 并保存,实现在每周一早上三点执行ls /etc 命令。

再次查看crontab文件,可以看到已经保存。

2)使用crontab命令安装crontab文件,安排计划任务;
对于位于/home下的crontab文件,使用crontab <filename>载入crontab计划任务中,如图:
3)查看计划任务表,确认计划任务是否已被安排;
键入crontab -l,查看计划任务安排情况,如图:
4)删除计划任务列表。

在终端下键入crontab -r ,删除当前用户的crontab文件,如下:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学系操作系统课程设计任务书姓名:学号:班级:专业:指导老师:一、引言:Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x8 6系列CPU的计算机上。

这个系统是由全世界各地的成千上万的程序员设计和实现的。

其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

Linux以它的高效性和灵活性著称。

它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。

Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。

Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。

它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。

Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个,一是它属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用,无约束地继续传播。

另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人都可以从Linux中获益。

二、linux常用基本命令介绍1.)Linux目录管理有关命令pwd ---显示当前工作目录的绝对路径格式: pwd2. cd ---改变当前工作目录命令格式:cd [目录名]3.Ls--- 列出文件目录的信息命令格式:ls [可选项] [子目录名] [文件名]4.mkdir --- 建立目录命令格式:mkdir [可选项] [目录名]5.rmdir ---删除目录本命令用于删除指定的一个或多个目录,必须保证要删除的目录中没有任何文件。

命令格式:rmdir [可选项] [目录名]2.)更改目录或文件访问权限的命令Ls---查看访问权限格式: ls –l 文件名2. chmod ---改变文件或目录的访问权限命令格式:chmod [可选项] [权限] [目录或文件名]3.chgrp命令----改变文件或目录所属的组。

命令格式:chgrp [选项] group filename选项:-R:递归式地改变指定目录及其下的所有子目录和文件的属组4. chown ----更改某个文件或目录的属主和属组命令格式:chown [选项] 文件或目录的新属主[.文件或目录所在的新组] [文件名|目录]3.)显示文件内容的命令1. cat ----显示,新建,连接文件4.)文件管理命令2. cp ---功能:文件或目录的拷贝,如同dos的copy命令格式:cp [选项] 源文件或目录目标文件或目录3. mv ---功能:为文件或目录改名或将文件由一个目录移入另一个目录中命令格式:mv [选项] 源文件或目录目标文件或目录4. rm ---功能:删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除命令格式:rm [选项] 文件……5.)vi编辑器vi编辑器是各种UNIX/Linux系统都会支持的全屏幕文字编辑器,与Windows下的文字编辑器相比,vi的使用要麻烦一些,但功能强大,并且是UNIX/Linux缺省编辑器三、进程调度程序的设计进程调度的概念:无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。

另外,系统进程也同样需要使用处理机。

这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

优先数调度算法:优先数法的基本思想是:对就绪队列中的每个进程,首先安某种原则定义一个优先数来表示它,处理机调度时,每次选择就绪队列中优先数最大者(也可规定优先数愈小,其优先权愈高),让它占用处理机运行。

确定优先数一般可以又一下集中考虑:(1)频繁使用外部舒服输出设备的进程优先数大。

这样有利于提高CPU使用效率。

(2)重要程序的进程优先数大,怎样有利于用户灵活操作。

(3)进入计算机系统时间长的进程优先数大,这样有利于缩短作业的完成时间。

(4)交互式用户作业进程优先数大,这样有利于提高中断相应时间。

优先数的设置可以采用静态和动态两种方式。

静态设置方式就是指系统在建立一个进程时,就按照某种原则为进程制定一个优先数,这个优先数在进程存在期间一直保持不便。

而动态设置方式是指系统在进程存在期间经常改变进程的优先数,如何动态的改变进程的优先数,依赖于具体操作系统的设计目标代码如下:#include "stdio.h"#include <stdlib.h>#include <conio.h>#define getpch(type) (type*)malloc(sizeof(type))#define NULL 0struct pcb { /* 定义进程控制块PCB */ char name[10];char state;int super;int ntime;int rtime;struct pcb* link;}*ready=NULL,*p; typedef struct pcb PCB;sort() /* 建立对进程进行优先级排列函数*/ {PCB *first, *second;int insert=0;if((ready==NULL)||((p->super)>(ready->supe r))) /*优先级最大者,插入队首*/{p->link=ready;ready=p;}else /* 进程比较优先级,插入适当的位置中*/{first=ready;second=first->link;while(second!=NULL){if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/{ /*插入到当前进程前面*/p->link=second;first->link=p;second=NULL;insert=1;}else /* 插入进程优先数最低,则插入到队尾*/{first=first->link;second=second->link;}}if(insert==0) first->link=p;}}input() /* 建立进程控制块函数*/{int i,num;clrscr(); /*清屏*/printf("\n 请输入进程号?");scanf("%d",&num);for(i=0;i<num;i++){printf("\n 进程号No.%d:\n",i);p=getpch(PCB);printf("\n 输入进程名:");scanf("%s",p->name);printf("\n 输入进程优先数:");scanf("%d",&p->super);printf("\n 输入进程运行时间:");scanf("%d",&p->ntime);printf("\n");p->rtime=0;p->state='w';p->link=NULL;sort(); /* 调用sort函数*/}} int space(){int l=0; PCB* pr=ready;while(pr!=NULL){l++;pr=pr->link;}return(l);}disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/{printf("\n qname \t state \t super \t ndtime \t runtime \n");printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->super);printf("|%d\t",pr->ntime);printf("|%d\t",pr->rtime);printf("\n");}check() /* 建立进程查看函数*/{PCB* pr;printf("\n **** 当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/ disp(p);pr=ready;printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/while(pr!=NULL){disp(pr);pr=pr->link;}}destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/{printf("\n 进程[%s] 已完成.\n",p->name); free(p);}running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/{(p->rtime)++;if(p->rtime==p->ntime)destroy(); /* 调用destroy函数*/ else{(p->super)--;p->state='w';sort(); /*调用sort函数*/}}main() /*主函数*/{int len,h=0;char ch;input();len=space(); while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf("\n The execute number:%d \n",h); p=ready;ready=p->link;p->link=NULL;p->state='R';check();running();printf("\n 按任一键继续......");ch=getchar();}printf("\n\n 进程已经完成.\n");ch=getchar();}程序运行情况:本程序经过多次修改,并且请教了同学,与同学进行了讨论,最终运行成功。

相关文档
最新文档