进程控制系统模拟-文档

进程控制系统模拟-文档
进程控制系统模拟-文档

*******************

实践教学

*******************

兰州理工大学

计算机与通信学院

2014年秋季学期

操作系统原理课程设计

题目:进程控制系统模拟

专业班级:计算机2班

姓名:原龙

学号:12240207

指导教师:庞淑侠

成绩:_______________

操作系统原理课程设计是为了让我们能对操作系统原理有更进一步的了解所开设的实践课程。这就要求我们在对课本主要内容熟练掌握的前提下,还能够运用这些内容来解决实际问题。

本次课设题目为进程控制系统模拟。进程的控制过程包括:创建进程、判断进程、换出进程、终止进程、杀死进程等,这些控制和管理功能是由操作系统中的原语来实现的。原语是在管态下执行、完成系统特定功能的程序段,而用于进程控制的原语包括:创建原语、撤销原语、阻塞原语、唤醒原语、挂起原语和激活原语等。系统对进程的控制如不使用原语,就会造成其状态的不确定性,从而实现不了进程控制的功能。本课设将实现用一个fork()函数实现进程的创建,查看运行,再利用一个exec( )函数实现进程之间的替换,用一个wait()函数调整进程的运行顺序,直到杀死进程退出程序。主要算法采用了先来先服务,这样做的优点是进入队列的顺序决定优先级。

课程设计可以提高我们的实践动手能力,能让我们把课本上的知识真正在实际应用中得到实现,进而把它变成自己的东西,达到学以致用的效果。同时,还可以加深对理论知识的印象。这也可以为我们以后的工作奠定良好的基础。

关键字: 进程控制原语进程创建进程撤销

《操作系统原理》是计算机类专业的核心课程,也是其他诸多类专业的重要选修课,开设这门课可以为理解、应用和开发程序提供技术和方法支持,为后续课程的学习提供重要思想和方法基础,同时对于自己逻辑思维培养和程序设计思想体系的建立有着重要的影响。但是对于《操作系统原理》这门课仅仅通过课堂教学或自学获取理论知识是远远不够的,还必须加强实践,亲自上机输入、编辑、检查、修改、调试和运行各种典型算法。在大学学习时,知识是通过一门门独立的课程传授的,而实际问题之能够顺利地得到解决,不但需要多方面的知识,而且还需要善于对这些知识综合地加以运用。这次课设正是给我们了一次自己实践的机会。

每个进程用一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为输入进程的时间。

由于多道程序设计的操作系统都建立在进程的基础上,操作系统中引进进程的概念,理论角度讲是对正在运行的程序活动规律的抽象;从实现角度讲,则是一种数据结构,目的在于清楚地刻画系统的动态规律,有效管理计算机系统中程序的运行。

目录

摘要.......................................................................................................................................... - 2 - 前言.......................................................................................................................................... - 3 -

一、设计思想.............................................................................................................................. - 5 -

1.1基本原理....................................................................................................................... - 5 -

1.2设计目的及要求........................................................................................................... - 5 -

1.3进程状态关系 (6)

1.4进程控制 (6)

1.5总体设计思路 (7)

二、各模块的伪码算法.............................................................................................................. - 8 -

2.1 进程控制块.................................................................................................................. - 8 -

2.2 新建进程...................................................................................................................... - 8 -

2.3 查看运行中的进程...................................................................................................... - 8 -

2.4 撤销进程 (9)

三、测试结果分析.................................................................................................................... - 11 -

3.1开始界面演示............................................................................................................. - 11 -

3.2 新建功能界面............................................................................................................ - 11 -

3.3进程的查看演示 (12)

3.4进程的调度情况......................................................................................................... - 12 -

3.5退出系统..................................................................................................................... - 13 - 设计总结.............................................................................................................................. - 14 - 参考文献.............................................................................................................................. - 15 - 致谢........................................................................................................................................ - 16 - 附录(部分程序源代码)............................................................................................................ - 17 -

一、设计思想

1.1基本原理

进程:进程是具有独立功能的可并发执行的程序在一个数据集合上的运行过程,在系统运行过程中是不断产生和消亡的。

中断:中断是指处理机对系统中或系统外发生的异步事件的响应。

进程管理:主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。

内核在引导并完成了基本的初始化以后,就有了系统的第一个进程,即初始化进程,实际上是内核线程。除此之外所有的其它进程和线程都是由这个原始的进程或其子孙进程所创建。通过用主函数建立一个主菜单,然后再编写各个子函数分别实现主函数的功能,从而达到实现创建进程,查看进程,换出进程,杀死进程,结束进程等功能,在整个过程中主要用到了公共参数和私有参数以及函数调用等技术。

1.2设计目的及要求

通过该题目的设计过程,可以初步掌握进程控制系统的原理、软件开发方法并提高解决实际问题的能力。也能提高同学们的实践动手能力,在实践过程中加深理解和熟练掌握课本中所学的各种操作,学会如何把所学的知识用于解决实际问题,以达到学以致用的效果。了解Windows XP的操作接口及系统调用方式,熟悉Windows XP常用操作的实现过程,练习并掌握Visual C++开发环境。利用Windows SDK(System Development Kit)提供的API(应用程序接口)编程模拟实现进程控制系统,要求用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容,利用wait( )来控制进程执行顺序。

核心要求用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容,利用wait( )来控制进程执行顺序。现设计为以下内容:

1、分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数

据结构)。

2、设计合适的测试用例,对得到的运行结果要有分析。

3、设计中遇到的问题,设计的心得体会。

1.3进程状态之间的关系

进程的三个状态之间的转换如图1-3所示:

图1-3 进程的三种基本状态及其转换

1.4 进程控制

建立四个函数模拟进程创建、撤销、阻塞和唤醒四个原语。

①进程创建fork()

进程创建的主要工作是:

第一步,申请空白进程控制块;

第二步,初始化进程控制块;

第三步,将进程链入就绪队列。

②进程撤销destory()

进程撤销的主要工作是:

第一步,回收进程所占内存资源;

第二步,回收进程控制块;

第三步,在屏幕上显示进程执行结果,进程撤销

③进程阻塞block()

进程阻塞的主要工作是:

第一步,保存运行进程的CPU现场;

第二步,修改进程状态;

第三步,将进程链入对应的阻塞队列,然后转向进程调度。

④进程的唤醒

进程唤醒的主要工作是将进程由阻塞队列中摘下,修改进程状态为就绪,然后链入就绪队列。

1.5 总体设计思路

进程的总体设计主要模块如图1-5所示:

图1-5 总体设计模块

二、各模块的伪码算法

2.1 进程控制块

定义一个ProcessType为进程控制块,内设置进程标示符pid、进程的优先级、进程的大小以及进程的信息。还包括struct ProcessType Ready[20];//就绪数组。

struct ProcessType Hung[20]; //挂起数组;

struct ProcessType Cpu; //运行进程。

int Number1=0,Number2=0,First=0;

//Number1是就绪队列中的进程的个数;

//Number2是挂起队列中的进程个数;

//First是判断是否是第一次输入进程。

2.2新建进程

通过fork()函数新建个进程,并设置就绪队列的最大长度为10;并包括

2.3查看运行中的进程

新建一个RUN函数用于查看正在运行的状态,函数如下:

Run()

输出结果;

将优先级高的进程调入CPU执行

定义数组;

就绪数组第一个数;

for(i=0;i

if(strcmp(p,Ready[i].Priority)<0)

把Ready[i].Priority所指向的由NULL结束的字符串复制到p所指的数组中。for(i=0;i<20;i++)

查看进程;

for(i;i

修改结果;

将结果调入队列;

2.4撤销进程

用一个skill()函数来实现进程的销毁,详细设计如下:

Void();

定义数组;

显示输出结果;

for(i=0;i

将进程挂起;

for(i=0;i

就绪进程;

输入;

for(i;i

将结果递增1;

Number2--;

for(i;i

将结果递增1;

Number1的值-1;

else continue;

if(strcmp(p,Cpu.Pid)==0) 重新赋值;

for(i=0;i

三、测试结果分析

3.1开始界面演示

开始界面如图3-1所示:

图3-1

3.2 新建功能界面

图3-2

3.3进程的查看演示

图3-3 3.4进程的调度情况

图3-4

3.5退出系统

图3-5

设计总结

通过这次课程设计,增强了自己C++的编程能力,也加深了对操作系统原理这门课程中进程控制管理模块的理解。但还是有些不足之处,例如未能很好的实现进程的协调控制,界面不美观,若能通过图形化界面显示则效果会更好。我争取在以后的学习过程中以这次课程设计的不足为经验,进一步强化学习自己的编程能力和对问题的分析和解决能力。两个星期程序设计课程,虽然时间有点短,但我也收获不少,这次试验,加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。也让我认识到自己的不足,操作系统的有些知识,我知道的还不多,没有掌握好,还需要多多学学,不断提升自己的能力。

在设计过程中的思考和讨论,使我对现有知识能够运用计算机来解决现实生活中的实际问题确立了信心,对模块化程序设计思想有了比较清晰的印象,为今后的程序设计奠定了一定的心理和技术上的准备。在这样一次又一次的砺炼中,我得到的不仅仅是知识,更多的是自身能力的提高。

经过这次课设我学到了很多。这次课程设计加强了我对计算机操作系统的认识,对我个人而言是对所学课程内容掌握情况的一次自我验证。通过此次课程设计加深理解了什么是进程控制,熟悉了Windows 7支持的进程的控制方式。练习并掌握了Windows SDK(System Development Kit)提供的API编辑器来编译C 程序,学会了利用API编译、调试C程序。

更重要的是通过此次课程设计使我懂得了三思而后行,学到了严谨的学习态度、永不放弃的精神,也增加了去面对更大挑战的信心和勇气,同时也培养了把学到的知识用于解决实际问题,培养了我的独立动手能力。

参考文献

[1] 汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.

[2] 王清,李光明.《计算机操作系统》.冶金工业出版社.

[3] 孙钟秀等.《操作系统教程》.高等教育出版社

[4] 曾明.《Linux操作系统应用教程》.陕西科学技术出版社.

[5] 张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.

[6] 孟静.《操作系统教程--原理和实例分析》.高等教育出版社

[7] 周长林.《计算机操作系统教程》.高等教育出版社

[8] 张尧学.《计算机操作系统教程》.清华大学出版社

[9] 任满杰.《操作系统原理实用教程》.电子工业出版社

致谢

经过近两周的上机实践,本次操作系统原理的课程设计圆满完成了,这次课程设计培养了我全面思考问题的能力,从而加快了解决问题的速度、提高了的工作效率,以及锻炼了在短时间内解决问题的顽强意志。

在编写程序的过程中,我得到了庞淑侠老师、王旭阳老师、李晓旭老师的的耐心指导,在老师的指导下,我的能力得到了提高,同时养成了科学、严谨的作风和习惯,为此我要诚恳的感谢三位老师。同时还要感谢孙源同学在一些问题上对我的指点以及牛长平同学在一些问题上跟我的共同探讨。,没他们的帮助可能有很多问题我个人不能进行很好的解决。在此我对他们所有人的帮助表示衷心的感谢。

另外通过本次课程设计,我深刻体会到在遇到问题时要沉着冷静,不要盲目去做,须知“磨刀不误砍柴工”。首先对问题进行全面的分析,勾勒出大致思路,然后根据思路决定解决问题的大致方向,制定相应的解决方案,进而逐步解决问题。

附录(部分程序源代码)

#include

#include

#include

#include

struct ProcessType //进程控制块

{

char Pid[10]; //进程标识符

char Priority[10]; //进程优先级

char Size[10]; //进程大小

char Message[10]; //进程的信息

};

struct ProcessType Ready[20];//就绪数组。

struct ProcessType Hung[20]; //挂起数组;

struct ProcessType Cpu; //运行进程。

int Number1=0,Number2=0,First=0; //Number1是就绪队列中的进程的个数;

//Number2是挂起队列中的进程个数;

//First是判断是否是第一次输入进程。

/****************************************************************************** **/

//新建进程的函数;

void fork()

{

if(Number1>20)

{

printf("\n就绪进程已满,请先删除或挂起进程\n");

}

else

{

if(First==0)

{

printf("\n");

printf("\n这是你第一次输入进程信息,它将直接调入CPU运行!\n");

printf("\n请输入新进程的Pid\n");

scanf("%s",&Cpu.Pid);

printf("\n请输入新进程的优先级\n");

scanf("%s",&Cpu.Priority);

printf("请输入新进程的大小\n");

scanf("%s",&Cpu.Size);

First++;

}

else

{

printf("\n请输入新进程的Pid\n");

scanf("%s",&Ready[Number1].Pid);

printf("请输入新进程的优先级\n");

scanf("%s",&Ready[Number1].Priority);

printf("请输入新进程的大小\n");

scanf("%s",&Ready[Number1].Size);

Number1++;

}

}

}

/****************************************************************************** **/

//查看正在运行的进程;

void Run()

{

printf("\n现在正在运行的进程的资料如下:\n");

printf("PID码为:%s\n优先级为:%s\n大小为:%s",Cpu.Pid,Cpu.Priority,Cpu.Size);

}

void ChangeA()//将优先级高的进程调入CPU执行

{

char i,m[10],t[10];char n[10],p[10];

strcpy(p,Ready[0].Priority);//就绪数组第一个数

for(i=0;i

{

if(strcmp(p,Ready[i].Priority)<0)/*strcmp(char *str1, char *str2) : 按照各个字符

(ascii)比较字符串str1和str2,当str1str2时,返回值>0 */

{

strcpy(p,Ready[i].Priority); //把Ready[i].Priority所指向的由NULL结束的字符串复制到p所指的数组中。

}

}

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

{

if(strcmp(p,Ready[i].Priority)==0) //用法同上

{

strcpy(m,Cpu.Size); //用法同上,以下所有关于这两个函数的用法都同上面所解释的

strcpy(Cpu.Size,Ready[i].Size);

strcpy(n,Cpu.Pid);

strcpy(Cpu.Pid,Ready[i].Pid);

strcpy(t,Cpu.Priority);

strcpy(Cpu.Priority,Ready[i].Priority);

break;

}

else continue;

}

for(i;i

{

strcpy(Ready[i].Size,Ready[i+1].Size);

strcpy(Ready[i].Pid,Ready[i+1].Pid);

strcpy(Ready[i].Priority,Ready[i+1].Priority);

}

strcpy(Ready[i].Size,m);

strcpy(Ready[i].Pid,n);

strcpy(Ready[i].Priority,t);

}

/****************************************************************************** **/

//手动将进程挂起

void ChangeB()

{

int i;char p[10];

printf("\n请输入想要挂起的进程的PID码:\n(在以下中选:");

for(i=0;i

{

printf("就绪%s ",Ready[i].Pid);

}

printf(")\n");

scanf("%s",&p);

for(i=0;i

{

if(strcmp(p,Ready[i].Pid)==0)

{

strcpy(Hung[Number2].Size,Ready[i].Size);

strcpy(Hung[Number2].Pid,Ready[i].Pid);

strcpy(Hung[Number2].Priority,Ready[i].Priority);

Number2++;

break;

}

else continue;

}

for(i;i

{

strcpy(Ready[i].Size,Ready[i+1].Size);

strcpy(Ready[i].Pid,Ready[i+1].Pid);

strcpy(Ready[i].Priority,Ready[i+1].Priority);

}

Number1--;

}

/****************************************************************************** **/

//将挂起的进程按先进先出的方式调入就绪队列

void ChangeC()

{

int i;

strcpy(Ready[Number1].Size,Hung[0].Size);

strcpy(Ready[Number1].Pid,Hung[0].Pid);

strcpy(Ready[Number1].Priority,Hung[0].Priority);

Number1++;

for(i=0;i

{

strcpy(Hung[i].Size,Hung[i+1].Size);

strcpy(Hung[i].Pid,Hung[i+1].Pid);

strcpy(Hung[i].Priority,Hung[i+1].Priority);

}

Number2--;

for(i=0;i

{

printf("就绪队列为:\nPID码为:%s;\n优先级为:%s;\n大小为:%s\n",Ready[i].Pid,Ready[i].Priority,Ready[i].Size);

}

}

/****************************************************************************** **/

//手动将就绪进程调入CPU执行

void ChangeD()

{

char i,m[10],t[10];char p[10];char n[10];

printf("\n请输入想要运行的进程的PID码:\n(在以下中选:");

for(i=0;i

{

printf("就绪%s ",Ready[i].Pid);

}

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

河南中医学院 《linux操作系统》课程设计报告 题目:基于Linux的进程调度模拟程序 所在院系:信息技术学院 专业年级:2011级计算机科学与技术完成学生:2011180021 郭姗 指导教师:阮晓龙 完成日期:201X 年06 月22 日 目录 1. 课程设计题目概述3 2. 研究内容与目的4 3. 研究方法5 4. 研究报告6 5. 测试报告/实验报告7 6. 课题研究结论8 7. 总结9

1、课程设计题目概述 随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。本文就是对进程调度进行研究、实验的。 本文首先对Linux系统进行了简要的介绍, 然后介绍了进程管理的相关理论知识。其次,又介绍最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法的相关知识,并对进程调度进行最高优先数优先的调度算法和先来先服务算法模拟实验,并对比分析两种算法的优缺点,从而加深对进程概念和进程调度过程/算法的理解 设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择某一进程占用处理机。使得系统中的进程能够有条不紊的运行,同时提高处理机的利用率以及系统的性能。所以设计模拟进程调度算法(最高优先数优先的调度算法、先来先服务算法),以巩固和加深处理进程的概念,并且分析这两种算法的优缺点。关键词:linux 进程调度调度算法

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

Windows下的进程管理和监控器分解

操作系统安全课程设计报告Windows下的进程管理和监控器

目录 操作系统安全课程设计报告 0 一、概述 (2) 1.设计主要完成的任务 (2) 2.解决的主要问题 (2) 二、设计的基本概念和原理 (2) 1.概念 (2) 2.原理 (2) 三、总体设计 (3) 1.功能模块 (3) 2.流程图 (3) 四、详细设计 (4) 主要功能的代码实现: (4) 五、完成的情况以及使用说明 (22) 六、总结 (33) 七、参考文献 (34)

一、概述 1.设计主要完成的任务 设计一个Windows或Linux下的进程管理与监控程序,要求该程序完成以下功能: (1)可获取当前正在运行的所有进程,包括进程PID、进程名称、CPU使用情况、当前用户名、内存占用量等; (2)能进一步获取各进程的所有线程情况; (3)能通过命令终止某个进程的执行,终止时能将其子孙进程全部终止; (4)要求界面友好。 2.解决的主要问题 我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,任务管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制。本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。 二、设计的基本概念和原理 1.概念 在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。 2.原理

进程调度算法的模拟实现

操作系统课程设计报告题目:进程调度算法的模拟实现_ 专业计算机科学与技术 学生姓名 班级 学号 指导教师 发放日期2015.1.30 信息工程学院

目录 1 概述 (1) 2 设计原理 (1) 2.1先来先服务算法 (1) 3 详细设计与编码 (2) 3.1 模块设计 (2) 3.2 系统流程图 (2) 3.3 系统详细设计 (2) 4 结果与分析 (6) 4.1 测试方案 (6) 4.2 测试结果 (6) 4.3 测试结果分析 (9) 5 设计小结 (10) 6 参考文献 (10) 附录程序代码 (12)

进程调度算法的模拟实现 进程调度算法的模拟实现 1 概述 选择一个调度算法,实现处理机调度,进程调度算法包括:先来先服务算法,短进程优先算法,时间片轮转算法,动态优先级算法。可选择进程数量,本程序包括四种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。 2 设计原理 2.1先来先服务(FCFS)算法 每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列 2.2 时间片轮转法(RR)算法 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。 2.3短作业优先(SJF)算法 短作业优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 2.4最高优先权优先(HRRN)算法 优先权调度算法是为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入最高优先权优先调度算法。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。

《Linux操作系统》实验五-作业任务和进程管理

《Linux操作系统》 实验报告 实验五:作业任务和进程管理

一、实验目的 (1) 掌握UNIX系统作业、任务和进程管理的任务,了解Linux系统进程管理的图形界面; (2) 了解UNIX的系统进程间通信机制,掌握信号操作和终止进程的命令。 (3) 了解任务和作业管理命令at和batch; (4) 掌握UNIX系统的进程定时启动管理命令crontab; (5) 了解进程的挂起,掌握fg,bg等命令。 二、实验环境 一台装有Windows操作系统PC机,上装有虚拟机系统VMWare,实验过程通过VMWare系统启Linux系统工作。 三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果) 1)进程管理与查询 (1)进程状态查询 1.ps –ef | more #显示所有进程及启动参数 2. ps –ajx | more #以作业方式显示进行信息

3. ps –el | more #以长格式显示所有进程信息 4.pstree –p 5.pstree -a

(2)终止进程的执行 1.终止某一已知PID进程:ps –9 PID(1)#PID由用户自己选择 2.在当前终端上执行命令:man ps 3、换一终端在其运行:ps –e | grep man #确定进程PID

4.终止进程执行:kill –9 PID #PID是上命令查询的结果 4.终止所的同名进程 终止上例中的man命令:killall man或 killall –9 man 分别至少在2个不同终端上登录,然后在其中的一个终端上分别执行以下命令,并观察和分析原因。 killall bash killall –9 bash 执行killall -9 bash命令时,终端窗口关闭 (3) 进程的挂起及前后台调度 在一个终端上起动命令man man,在不退出man命令的情况下按下组合键Ctrl+Z,观察反映。 答:先退出当前页面,返回进入终端时的页面 先后执行命令jobs和fg命令,并观察反映。

进程模拟调度算法课程设计

一.课程概述 1.1.设计构想 程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。 1.2.需求分析 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。本次实验在VC++6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。 1.3.理论依据 为了描述和管制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的PCB 而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。 1.4.课程任务 一、用C语言(或C++)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多 种算法实现对进程的模拟调度。 二、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多 级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 三、实现用户界面的开发

操作系统进程管理系统设计实验报告

实验报告说明书设计名称:操作系统课程设计 实验:进程调度设计 学生姓名: 专业:网络工程 班级: 08级一班 学号: 指导教师:雷晓平王东黄营杨跃武 日期: 2011年 6月 19日

课程设计任务书 网络工程专业 08 年级 1 班 一、具体要求 本课程设计共2周,采取集中方式。 ㈠主要设计内容 1、进程调度 2、存储管理 3、文件管理 ㈡操作系统分项设计 1、设计一:进程管理系统设计 目的与要求:本设计的目的是加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。 要求设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系(可选)。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。 具体详见:设计任务书1--进程调度算法.doc 2、设计二:存贮器管理系统设计 目的与要求:本设计的目的是使学生熟悉存贮器管理系统的设计方法;加深对所学各种存贮器管理方案的了解;要求采用一些常用的存贮器分配算法,设计一个存贮器管理模拟系统并调试运行。模拟环境应尽量接近真实。 具体详见:设计任务书2--内存分区管理模拟.doc 3、设计三:虚拟存储器管理系统设计 本设计的目的是通过设计一个简单的虚拟存储器管理系统来模拟实际的页面调度算法与过程,以掌握这种有用的技术。要求将其输入/输出处理程序编成一个独立的进程模块并与其它请求输入/输出的进程并发运行。并要求加入设备管理子模块。 具体分析为:页面调度算法主要有FIFO、最近最少使用调度算法(LRU)、最近最不常用调度算法(LFU)、最佳算法(OPT)等。题目要求: ①实现三种算法:1、先进先出;2、OPT;3、LRU ②页面序列从指定的文本文件(TXT文件)中取出 ③输出:第一行:每次淘汰的页面号,第二行:显示缺页的总次数 4、设计四:文件管理系统设计 目的与要求:本设计的目的是通过设计和调试一个简单的外部文件系统,主要是模拟文件操作,,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。 基本要求如下: 实现三种算法:先来先服务、最短寻道优先、电梯算法 磁道服务顺序从指定的文本文件(TXT文件)中取出 输出:第一行:磁道的服务顺序;第二行:显示移动总道数

Linux操作系统进程管理的分析与应用

Linux操作系统进程管理的分析与应用(1)发布时间:2006.05.19 07:12来源:LinuxSir作者:北南南北目录 1、程序和进程; 1.1 进程分类; 1.2 进程的属性; 1.3 父进程和子进程; 2、进程管理; 2.1 ps 监视进程工具; 2.1.1 ps参数说明; 2.1.2 ps 应用举例; 2.2 pgrep 3、终止进程的工具 kill 、killall、pkill、xkill; 3.1 kill 3.2 killall 3.3 pkill 3.4 xkill 4、top 监视系统任务的工具; 4.1 top 命令用法及参数; 4.2 top 应用举例; 5、进程的优先级: nice和renice; 6、关于本文; 7、后记; 8、参考文档; 9、相关文档; 1、程序和进程; 程序是为了完成某种任务而设计的软件,比如OpenOffice是程序。什么是进程呢?进程就是运行中的程序。 一个运行着的程序,可能有多个进程。比如 https://www.360docs.net/doc/f8166139.html, 所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,

apache服务器将会创建有多个httpd进程来对其进行服务。 1.1 进程分类; 进程一般分为交互进程、批处理进程和守护进程三类。 值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。比如在Fedora或Redhat中,我们可以定义httpd 服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd, /etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。 [root@localhost ~]# chkconfig --level 35 httpd on 由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。比如,我们是不是访问 https://www.360docs.net/doc/f8166139.html, ,https://www.360docs.net/doc/f8166139.html, 的httpd服务器都在运行,等待着用户来访问,也就是等待着任务处理。 Linux操作系统进程管理的分析与应用(2)发布时间:2006.05.19 07:12来源:LinuxSir作者:北南南北 1.2 进程的属性; 进程ID(PID):是唯一的数值,用来区分进程; 父进程和父进程的ID(PPID); 启动进程的用户ID(UID)和所归属的组(GID); 进程状态:状态分为运行R、休眠S、僵尸Z; 进程执行的优先级; 进程所连接的终端名; 进程资源占用:比如占用资源大小(内存、CPU占用量); 1.3 父进程和子进程; 他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止。 在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行;

进程调度算法模拟程序设计C++

(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。 (2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:?进程标识数ID。 ?进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。 ?进程已占用CPU时间CPUTIME。 ?进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 ?进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间 片后,进程将进入阻塞状态。 ?进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME 个时间片后,将转换成就绪状态。 ?进程状态STATE。 ?队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: ?进程在就绪队列中呆一个时间片,优先数增加1。 ?进程每运行一个时间片,优先数减3。 (4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。 (5)分析程序运行的结果,谈一下自己的认识。 实验代码 #include "iostream.h" #include "windows.h" //#define N 3 typedef struct{ int ID; int PRIORITY; int CPUTIME;

int ALLTIME; int STARTBLOCK; int BLOCKTIME; int STATE;//0-运行1-阻塞2-就绪3-结束4-未到达 int REACH; int TIME; }PROCESS; void textcolor (int color) { SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color ); } void main(){ int i,time,max,l,l1,time1,flag=0,total=0,N,server[10],sum=0; PROCESS pro[10]; textcolor(13); cout<<"注意:本程序中状态代表如下"<>N; cout<<"请设置时间片长度:"; cin>>time; cout<<"请输入各进程初始状态:"<>pro[i].ID>>pro[i].PRIORITY>>pro[i].REACH;

Windows XP 系统进程管理机制

Windows XP 系统进程管理机制 进程可利用系统调用功能来创建新的进程,创建者称为父进程,而被创建的新进程称为子进程。子进程从父进程继承一些属性,又与父进程有区别,形成自己独立的属性。按子进程是否覆盖父进程和是否加载新程序,子进程的创建可分为fork,spawn和exec三种类型。 进程的退出是通过相应的系统调用进行的。进程退出过程中,操作系统删除系统维护的相关数据结构并回收进程占用的系统资源。 Windows 2000/XP进程是作为对象来管理的,可通过相应句柄(handle)来引用进程对象,OS提供一组控制进程对象的服务。Win32环境子系统是整个系统的主子系统,放置一些基本的进程管理功能,其他子系统利用Win32子系统的功能来实现自身的功能。 Windows 2000/XP中的每个Win32进程都由一个执行体进程块(EPPROCESS)表示,

执行体进程块描述进程的基本信息,并指向其他与进程控制相关的数据结构。 Win32子系统的进程控制系统调用:——CreatProcess创建新进程及其主进程,并可指定从父进程继承的属性。——ExitProcess和TerminateProcess都可用于进程退出,终止一个进程和它的所有线程,区别在于ExitProcess终止操作完整,TerminateProcess终止操作不完整,通常只用于异常情况下对进程的终止。 2. Windows XP中进程调度机制 2.1 Windows 2000/XP的线程调度特征Windows 2000/XP的处理器调度的调度单位是线程而不是进程。线程调度机制是基于优先级的抢先式多处理器调度,依据优先级和分配时间片来调度。 调度系统总是运行优先级最高的就绪线程。 在同一优先级的各线程按时间片轮转算法进行调度。 如果一个高优先级的线程进入就绪状态,当前运行的线程可能在用完它的时间片之

操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

操作系统习题集------进程管理

习题集 - 2 - 进程管理 1. 在优先级调度中,__________类进程可能被“饿死”,即长时间得不到调度。 A.短进程 B.长进程 C.低优先级进程 D.大内存进程 解: C。优先级调度算法(PRI)的基本思想是:内核为每个进程赋予一个优先级,进程按照优先级的大小顺序在就绪队列中排队,内核将CPU分配给就绪队列头部的第一个进程——优先级最大的进程。因此,进程的优先级越低,在就绪队列中的排队位置就越靠近队列尾,获得运行之前的等待时间就越长。低优先级的进程必须等待所有高优先级进程运行结束后才会被调度运行。如果不断有高优先级的进程加入就绪队列,那么低优先级进程就会一直等待下去。这就是所谓的“饿死”现象。 2. 在下面的系统调用中,__________不会导致进程阻塞。 A.读/写文件 B.获得进程PID C.申请内存 D.发送消息 解: B。当正在执行的进程需要使用某种资源或等待某个事件时,如果资源已被其他进程占用或事件尚未出现,该进程不能获得所需的资源而无法继续运行,于是,进程将被阻塞。进程在阻塞状态中等待资源被释放,或等待事件的发生。所以,进程在执行系统调用时,如果需要使用某种资源,就可能导致进程阻塞。“读/写文件”需要使用设备和文件缓冲区;“申请内存”需要分配内存资源;“发送消息”需要使用消息缓冲区。 3. 下面关于临界区的叙述中,正确的是__________ A.临界区可以允许规定数目的多个进程同时执行 B.临界区只包含一个程序段 C.临界区是必须互斥地执行的程序段 D.临界区的执行不能被中断 解: C。临界段(临界区)的概念包括两个部分:①临界资源:必须互斥访问的资源。例如,需要独占使用的硬件资源,多个进程共享的变量、结构、队列、栈、文件等软件资源。②临界区:访问临界资源的、必须互斥地执行的程序段。即,当一个进程在某个临界段中执行时,其他进程不能进入相同临界资源的任何临界段。

模拟进程调度功能的设计与实现操作系统课程设计(含源文件)

目录 1、设计目的意义 (2) 1.1、目的意义 (2) 1.2、实现目标 (2) 2、设计方案 (3) 2.1、软硬件环境 (3) 2.2、开发工具 (3) 2.3、思路 (3) 3、程序功能模块设计 (4) 3.1、总体模块 (4) 3.2、部分模块 (4) 3.3、详细功能描述 (6) 4、程序总控流程图 (6) 5、数据结构设计 (8) 5.1、PCB结构 (8) 5.2、进程状态结构 (8) 5.3、控件结构 (9) 6、程序代码结构 (9) 7、程序主要代码解析 (10) 8、测试数据及测试结果 (15) 8.1、运行时部分界面 (15) 8.2、数据测试记录 (17) 9、设计过程中遇到的问题及解决方法……………………………………………………………

18 10、结论 (18) 10.1、系统实现情况 (18) 10.2、系统特点 (18) 10.3、设计体会及收获 (18) 11、参考资料 (19) 模拟进程调度功能的设计与实现 1、设计目的意义 1.1、目的意义 ●通过课程设计理解进程调度的概念,深入了解进程控制的功能、进程的创建、删除以 及进程各个状态间的转换过程;实现先来先服务、时间片轮转、最短作业优先、优先级调度算法对进程进行的调度过程;通过观察有关的队列结构的内容的动态变化过程深入体会各个调度算法的特点;从而能够更好的巩固从书本上学到的知识。 ●编程过程中需要建立队列等结构进行各种操作,通过该次课程设计,我们更加从实用 的角度对《数据结构》课程内容进行更深入理解和更熟练的应用。 ●使用C++语言进行编程,通过对调度功能的编程实现,不但能有效训练我们对编程语 言的熟练使用,还能促进我们独立思考解决问题、以及独立查新获取知识的能力。 1.2、实现目标 初始态、执行状态、 状态。

进程管理器的模拟实现

衡阳师范学院《操作系统》课程设计 题目:进程管理器的模拟实现系别:计算机科学系 专业:物联网工程 班级:1206班 学生姓名:郑晓娟 学号:12450218 指导老师:王玉奇 完成日期:2014年12月28日

目录 一、需求分析 (3) 二、概要设计 (3) 三、详细设计 (4) 1.进程PCB结构体的定义 (4) 2.创建模块 (4) 3.查看模块 (5) 4.换出模块 (6) 5.杀死模块 (8) 四、程序调试 (10) 五、总结分析 (14)

一、需求分析 有时候我们需要去了解我们电脑的运行情况,掌握和管理它的进程,并对其异常情况给予操作和控制。进程管理器就像我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以查看到所有进程的运行情况,并对运行的进程加以管理和控制。在本课程设计中,进入模拟进程系统后,可以根据请求选择“创建进程”创建新的进程。还可以选择“查看进程“来查看当前正在运行的进程,以及该进程的相关的信息,其中包括进程的pid,进程优先级,进程大小和进程的内容,我们可以通过这些来了解计算机中每个进程的使用状况。选择“换出进程”,可以挂起某个正在运行的进程。选择“撤销进程”,可以停止某个正在运行的程序,并且释放其占用的资源。选择“退出进程”,可以退出进程模拟系统。 二、概要设计 程序流程:

三、详细设计 (1)进程PCB结构体的定义 struct jincheng_type{ //定义表示进程信息的结构体int pid; //进程ID int youxian; //优先级 int daxiao; //大小 int zhuangtai; //进程的状态,这里用0表示没有建立或被杀死,1表示执行,2表示换出 int neirong; //内容 }; (2)创建模块 void create() //函数--创建一个新进程 { if(shumu>=20) printf("\n内存已满,请先换出或杀死进程\n") //判断内存空间是否已满 else{ for(int i=0;i<20;i++) if(neicun[i].zhuangtai==0) break; //选出空着的内存单元给新进程使用 printf("\n请输入新进程pid\n"); //输入新进程ID存至选出的内存单元 scanf("%d",&(neicun[i].pid));

实验 进程管理与系统监视

实验报告 学院:专业:班级:成绩: 姓名:学号:组别:组员: 实验地点:实验日期:指导教师签名: 实验8项目名称:进程管理 1、实验目的 理解进程管理的基本原理方法,掌握在Linux系统中查看进程状态、控制进程以及调整进程优先级等基本方法。 2、实验内容 2.1 进程管理的基本概念 什么是进程管理?要理解这个概念,就必须理解什么是进程。进程是在《操作系统原理》课程中的一个核心概念。进程(Process)是程序的一个执行过程。进程需要占用各种系统资源,包括CPU、内存等,需要读写各类文件,调用各种系统功能。自然,从进程的创建到撤销,操作系统会为它安排一切。不过,操作系统的安排是根据固定的算法所进行,纵使这些算法能根据当前情况不断调整,但不可能预先知道你的需要,然后让某个进程在特定某个时间挂起,让某个进程的优先级升高等等。因此,进程管理是指根据当前实际需求,对进程加以特定的控制。 作为一个管理员,定时查看当前系统中各个进程的具体状态,捕捉各种进程运行的异常,合理分配各类资源,特别是CPU资源给不同的进程,对各类进程有计划地控制等等,都属于进程管理的内容。系统为管理员提供了一系列的工具和命令,以让管理员完成管理工作。 2.2进程管理的基本方法 2.2.1查看进程状态 获知进程状态是进程管理的第一步。UNIX系统为进程留了许多接口、命令和工具。最典型的是/proc文件系统。这是一个特殊的文件系统。在此文件系统中,每个目录对应于一个进程,目录的名称即为进程的PID号。进入某个进程对应的目录,里面有若干文件,这些文件记录了该进程当前运行的各种相关状态信息。应用程序可通过对这些文件打开并读取(部分甚至还能通过写文件控制进程)来获取进程信息。 例子:查看/proc文件系统 #cd /proc/ #ls

操作系统模拟进程调度算法

操作系统 ——项目文档报告 进程调度算法 专业: 班级: 指导教师: 姓名: 学号:

一、核心算法思想 1.先来先服务调度算法 先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。 2.短作业(进程)优先调度算法 短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。 3.高响应比优先调度算法 在批处理系统中,短作业优先算法是一种比较好的算法,其主要不足之处是长作业的运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为: 优先权=(等待时间+要求服务时间)/要求服务时间 即优先权=响应时间/要求服务时间 如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。 当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务 对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得处理机。 4.时间片轮转算法 在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。 二、核心算法流程图

进程管理模拟实验指导书09

进程管理模拟系统实验指导书2 一、实验目的 学习进程管理的设计与实现,学习和运用操作系统原理,设计一个操作系统子系统的模拟系统。通过该系统的设计调试可增加对操作系统实现的感知性。同时可发挥团队协作精神和个人创造能力。使同学们对操作系统学习有一个实现的尝试和创新的思维。 二、实验规则 1.每组设计一个模拟系统(共100分) 2.每人设计系统中的一部分(满分60分) 3.集体调试创意(满分40分) 三、实验要求 1.进程管理功能以进程调度为主要功能。以进程控制为辅助功能。 2.体现操作系统原理中进程调度算法和进程控制算法。按照操作系统原理设计。 3.结构化设计。设计时构建出模块结构图并存于文件中。模块化实现,对每一功能,每一操作使用模块、函数、子程序设计方法实现。 4.进程以PCB为代表。队列、指针用图示。每一步功能在桌面上能显示出来。 5.系统应具有排错功能,对可能出现的错误应具有排查功能和纠错能力。 6.界面自行设计,语言自行选择。(可用VC/C++/C/C#语言,也可用你会的其他语言,甚至还可用PPT) 7.每人的设计功能都能表现或说明出来。 8.进程以队列法组织,对不同进程调度算法: FIFO队列或PRI队列或rotate(轮转队列)用同一个进程序列组织,对阻塞队列可设置一个,也可设多个。 9.因为是模拟系统,所以要显示每个功能和操作结果。显示应力求清晰、易读和一目了然(一屏),最好能用汉字,否则可用英语或汉语拼音。 10.操作方便,使用便捷。可视化程度高。 11.设计出系统后,还需要写出(介绍系统采用的语言、支撑平台、小组成员及分工。如何安装、如何启动、如何操作) 12.每组需写一份课程设计报告,内容包括:课程设计内容,课程设计设计思路,课程设计结构图,及分工内容、介绍。 13. 实验结果演示验收后,将可在任何环境下运行的可执行文件和系统说明书一起存盘并交盘。(可合组一张盘),上标:班级、组号、姓名。 14. 实验结束后从中选出优秀作品,介绍给大家。 四、系统功能 1.创建进程:主要创建PCB,并在创建后显示PCB及所在RL队列。内容包括①标识数(按产生顺序产生),②进程名(字母序列),③优先数(随机产生),④进程状态,⑤队列指针(可用数字或图表示),⑥其它(可自定义:如运行时间、家族等)。创建进程的个数可人工设定,或可自动设定,也可两者兼有。 2.撤销进程:撤销进程主要显示PCB的消失和队列的变化。 3.进程队列的组织:进程队列可对创建的所有进程变化队形:可组织成FIFO队列,也可组织成PRI队列;或rotate队列,对队列有插入、移出的功能,也有在队列中某位置插入删除功能。 4.显示功能:模拟系统在整个演示过程中都需要可视化,因此显示功能非常重要,要求对队列、PCB每次操作前后予以显示,以表示操作功能的实施效果。

最新整理Linux操作系统的进程管理详解

L i n u x操作系统的进程管理详解 L i n u x操作系统中进程的管理是很重要的一部分,下面由学习啦小编为大家整理了L i n u x操作系统的进程管理详解的相关知识,希望对大家有帮助! L i n u x操作系统的进程管理详解 对于L i n u x的进程的管理,是通过进程管理工具实现的,比如p s、k i l l、p g r e p等工具; L i n u x操作系统的进程管理/1、 p s监视进程工具; p s为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用t o p工具; 1.p s的参数说明; p s提供了很多的选项参数,常用的有以下几个; l长格式输出; u按用户名和启动时间的顺序来显示进程; j用任务格式来显示进程; f用树形格式来显示进程; a显示所有用户的所有进程(包括其它用户); x显示无控制终端的进程; r显示运行中的进程;

w w避免详细参数被截断; 我们常用的选项是组合是a u x或l a x,还有参数f 的应用; p s a u x或l a x输出的解释; U S E R进程的属主; P I D进程的I D; P P I D父进程; %C P U进程占用的C P U百分比; %M E M占用内存的百分比; N I进程的N I C E值,数值大,表示较少占用C P U时间; V S Z进程虚拟大小; R S S驻留中页的数量; W C H A N T T Y终端I D S T A T进程状态 D U n i n t e r r u p t i b l e s l e e p(u s u a l l y I O) R正在运行可中在队列中可过行的; S处于休眠状态; T停止或被追踪;

相关文档
最新文档