二进程同步算法模拟

二进程同步算法模拟
二进程同步算法模拟

实验二进程同步算法模拟

一、实验目的

1、模拟设计一种进程调度过程:FCFS、短作业优先、高响应比优

先(任选其一)。

2、算法代码实现,模拟数据演示,模拟结果验证。

二、实验学时

4课时

三、实验环境与平台

Windows 2000, C/C++程序开发集成环境(开发语言可自选)

四、实验内容及要求

1、实验内容:(1)自定义PCB的数据结构;(2)针对资源分配

中出现的问题,选择适合的算法,实现资源的合理分配。

2、实验要求:(1)完成规定的实验内容;(2)在实验之前,利

用课外时间浏览帮助文件的相关主题内容;(3)实验时保存程序代码;(4)写出实验报告.(实验目的、实验时间、实验设备和实验环境平台、完成的实验内容、实验结果和结论)。

五、完成的实验内容

下例是用C语言编写,用TC2.0调试结果

六、实现代码如下:

#include "stdio.h"

#define getjcb(type) (type*)malloc(sizeof(type))

#define NULL 0

int n=0,time=0;float eti,ewi;

struct jcb{ char name[10]; /* 作业名 */

char state; /* 作业状态 */

int ts; /* 提交时间 */

float super; /* 优先权 */

int tb; /* 开始运行时间 */

int tc; /* 完成时间 */

float ti; /* 周转时间 */

float wi; /* 带权周转时间 */

int ntime; /* 作业所需运行时间 */ char resource[10]; /* 所需资源 */

struct jcb *link; /* 结构体指针 */

} *p,*q,*head=NULL;

typedef struct jcb JCB;

inital(){

int i;

printf("\nInput jcb num\n");

scanf("%d",&n);

printf("Input\nname\tts\tntime\tresource\n");

for(i=0;i

{p=getjcb(JCB);

scanf("%s\t%d\t%d\t%s",&p->name,&p->ts,&p->ntime,&p->resou rce);

p->state='W';

p->link=NULL;

if(head==NULL) head=q=p;

else{ q->link=p; q=p; }

}

}

fileinput(){

FILE *fp;

int i;

if((fp=fopen("os2.txt","r"))==NULL) printf(" open error!") ; fscanf(fp,"%d\n",&n);

for(i=0;i

fscanf(fp,"%s%d%d%s",&p->name,&p->ts,&p->ntime,&p->resource );

p->state='W';

p->link=NULL;

if(head==NULL) head=q=p;

else{

q->link=p;

q=p;

}

} fclose(fp);}

void print(JCB *pr,int m){

JCB *p;

printf("\ntime=%d",time);

if(m==3){

printf("\nname\tstate\tts\tntime\tsuper\tsource\ttb\ttc\tti

\twi\n");

printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",

pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->resource,

pr->tb,pr->tc,pr->ti,pr->wi);

} else {

printf("\nname\tstate\tts\tntime\tsource\ttb\ttc\tti\twi\n"

); printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n", pr->name,pr->state,pr->ts,pr->ntime,pr->resource,pr->tb,pr-

>tc,pr->ti,pr->wi); }

p=head;

do{ if(p->state=='W')

if(m==3){

printf("%s\t%c\t%d\t%d\t%4.2f\t%s\n",

p->name,p->state,p->ts,p->ntime,p->super,p->resource);

}

else{

printf("%s\t%c\t%d\t%d\t%s\n",

p->name,p->state,p->ts,p->ntime,p->resource);

}

p=p->link;

}while(p!=NULL);

p=head;

do{

if(p->state=='F')

if(m==3){

printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",

p->name,p->state,p->ts,p->ntime,p->super,p->resource,p->tb, p->tc,p->ti,p->wi);

}

else{

printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n",

p->name,p->state,p->ts,p->ntime,p->resource,p->tb,p->tc,p-> ti,p->wi);

}

p=p->link;

}while(p!=NULL);

}

void last(){

eti/=n;ewi/=n;

printf("\neti=%7.3f\tewi=%7.3f\n",eti,ewi);

}

super(){

JCB *padv;

padv=head;

do{

if(padv->state=='W'&&padv->ts<=time)

padv->super=(float)(time-padv->ts+padv->ntime)/padv->ntime; padv=padv->link;

}while(padv!=NULL);

}

void hrn(m){

JCB *min;

int i,iden;

for(i=0;i

p=min=head;iden=1;

super();

do{

if(p->state=='W'&&p->ts<=time)

if(iden){

min=p;iden=0;

}

else if(p->super>min->super) min=p;

p=p->link;

}while(p!=NULL);

if(iden) {

i--;time++;printf("\ntime=%d:\tno JCB submib...wait...",time);

if(time>1000){printf("\nruntime is too long...error...");getch();}

}

else{

running(min,m);

}

}

}

void sjf(int m){

JCB *min;

int i,iden;

for(i=0;i

p=min=head;iden=1;

do{

if(p->state=='W'&&p->ts<=time)

if(iden){

min=p;iden=0;

}

else if(p->ntimentime) min=p;

p=p->link;

}while(p!=NULL) ;

if(iden) {

i--;printf("\ntime=%d:\tno JCB submib...wait...",time);time++;

if(time>100){printf("\nruntime is too long...error");getch();}

}

else{

running(min,m);

}

}

}

fcfs(int m){

int i,iden;

printf("\n\nthe jcb is runing...");

for(i=0;i

p=head;iden=1;

do{

if(p->state=='W'&&p->ts<=time) iden=0;

if(iden)p=p->link;

}while(p!=NULL&&iden) ;

if(iden) {

i--;printf("\ntime=%d:\tno JCB submib...wait...",time);time++;

if(time>100){printf("\nruntime is too long...error");getch();}

}

else{

running(p,m);

}

}

}

running(JCB *p,int m){

p->tb=time;p->state='R';

p->tc=p->tb+p->ntime;

p->ti=(float)(p->tc-p->ts);

p->wi=(float)(p->ti/p->ntime);

eti+=p->ti;

ewi+=p->wi;

print(p,m);

time+=p->ntime;

p->state='F';

printf("\n%s has been finished!\npress any key to continue...\n",p->name);

getch();

}

void runjcb(int m){

printf("\n\nstart running jcb...");

switch(m){

case 1:fcfs(m);break;

case 2:sjf(m);break;

case 3:hrn(m);break;

default:printf("\nrunjcb error...\n");exit();

}

}

fileway(){

printf("\nadopts the file way to input the datas...y/n:") ; if(getch()=='y') fileinput();

else inital();

}

start(){

int m;

char str[100]="\nselect algorithm\n1.FCFS\n2.SJF\n3.HRN\n" ;

printf("%s",str);

m=getch()-48;

fileway();

if(1<=m&&m<=3) runjcb(m);

else {

printf("\nselect error!try again...\n");

start();

}

last();

}

main()

{

start();

printf("\nfinished!");

getch();

}

六、实验结果

七、结论分析

本例依次实现了FCFS,SJF,HRN算法,我只对SJF算法即短作业优先调度算法进行了实验

按要求输入数据,如上图所示,即:

进程个数(jcd num):5

执行后,输出周转时间ti、带权周转时间wi,而且是逐次运行。通过上面的运行过程可看出,短作业优先调度算法是对短作业优先进行调度的算法。根据所需资源由少到多进行调度。所以,顺序依次是ADBEC。此算法对短进程有利,对长进程不利,且没有考虑作业的紧迫度。

基于熵的图像二值化算法设计二维最大熵分割

基于熵的图像二值化算法设计二维最大熵分割公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]

1设计目的与要求 设计目的 (1)熟悉和掌握MATLAB程序设计方法。 (2)学习和掌握MATLAB图像处理工具箱。 (2)了解图像分割和图像二值化的原理。 (3)掌握图像二值化技术阈值的选取。 (4)将原彩色图像变为二值化后的图像,通过二维最大熵图像分割法对图像进行分割达到预期目的。 设计要求 (1)了解图像变换的意义和手段。 (2)熟悉最大熵和二值化的基本性质。 (3)通过本实验掌握利用MATLAB编程实现数字图像处理。 (4)理解图像分割的原理,了解其应用,掌握最大熵和二值化分割的方法。

2 设计方案 图像二值化 图像二值化是数字图像处理技术中的一项基本技术,二值化图像的显示与打印十分方便,存储与传输也非常容易,在目标识别、图像分析、文本增强、字符识别等领域得到广泛应用。图像二值化是将灰度图像转化为只有黑白两类像素的图像,大多采用阈值化算法处理。在不同的应用中,阈值的选取决定着图像特。 征信息的保留。因此,图像二值化技术的关键在于如何选取阈值。 最大熵原理 最大熵原理:最大熵原理是在1957 年由 提出的,其主要思想是,在只掌握关于未知分布的部分知识时,应该选取符合这些知识但熵值最大的概率分布。因为在这种情况下,符合已知知识的概率分布可能不止一个。我们知道,熵定义的实际上是一个随机变量的不确定性,熵最大的时候,说明随机变量最不确定,换句话说,也就是随机变量最随机,对其行为做准确预测最困难。 图像分割中最大熵的引入:在图像分割中若假定以灰度级T 分割图像,则图像中低于灰度级T 的像素点构成目标物体,高于灰度级T 的像素点构成背景那么各个灰度级在图像分割后的两区域中的概率如下: O :t i N N ???(0<=i<=t) () B : t i N N N - (t+1<=i<=255) () ? 其中Ni 为图像中灰度级为i 的像素点个数,Nt 为灰 度级从0~t 的像素点总和,N 为图像总像素点,t 为假定灰度阈值T 。 ) l og()(0 t i t i N N N N H ∑ -= ??? ? (0<=i<=t) ? ? ()

实验二(1)进程同步

实验二(2)进程同步 一、实验目的 1、生产者-消费者问题是很经典很具有代表性的进程同步问题,计算机中的很多同步问题都可抽象为生产者-消费者问题,通过本实验的练习,希望能加深学生对进程同步问题的认识与理解。 2、熟悉VC的使用,培养和提高学生的分析问题、解决问题的能力。 二、实验内容及其要求 1.实验内容 以生产者/消费者模型为依据,创建一个控制台进程,在该进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。 2.实验要求 学习并理解生产者/消费者模型及其同步/互斥规则;设计程序,实现生产者/消费者进程(线程)的同步与互斥; 三、实验算法分析 1、实验程序的结构图(流程图); 2、数据结构及信号量定义的说明; (1) CreateThread ●功能——创建一个在调用进程的地址空间中执行的线程 ●格式 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParamiter, DWORD dwCreationFlags, Lpdword lpThread ); ●参数说明 lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。dwStackSize——定义原始堆栈大小。 lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。 lpParamiter——定义一个给进程传递参数的指针。 dwCreationFlags——定义控制线程创建的附加标志。 lpThread——保存线程标志符(32位) (2) CreateMutex ●功能——创建一个命名或匿名的互斥量对象 ●格式 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); bInitialOwner——指示当前线程是否马上拥有该互斥量(即马 ●参数说明 lpMutexAttributes——必须取值NULL。上加锁)。 lpName——互斥量名称。 (3) CreateSemaphore ●功能——创建一个命名或匿名的信号量对象 ●格式 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); ●参数说明 lpSemaphoreAttributes——必须取值NULL。

进程调度算法模拟 (操作系统课程设计报告)

福建农林大学计算机与信息学院 课程设计报告 课程名称:操作系统 实习题目:进程调度算法模拟 姓名: 系:计算机科学与技术系 专业:计算机科学与技术 年级:2012 学号: 指导教师: 职称:副教授 年月日

福建农林大学计算机与信息学院计算机类 课程设计结果评定

目录 1.本选题课程设计的目的 (4) 2.本选题课程设计的要求 (4) 3.本选题课程设计报告内容 (4) 3.1前言 (4) 3.2进程调度算法模拟的环境 (4) 3.3系统技术分析 (4) 3.4系统流程图及各模块 (5) 3.5程序调试情况 (8) 4.总结 (11) 参考文献 (11) 程序代码 (12)

1.设计目的 课程设计将课本上的理论知识和实际有机的结合起来,锻炼学生的分析系统,解决实际问题的能力。提高学生分析系统、实践编程的能力。 2.设计要求 利用学到的操作系统和编程知识,完成具有一定难度的系统分析研究或系统设计题目。其中:专题系统理论研究应包括研究目的、目标,论点和论据以及证明推导等;分析、设计系统应包括编写、调试程序以及最后写出设计报告或系统说明文档文件,系统说明文档包括系统界面、变量说明、系统功能说明、编程算法或思路、流程图和完整程序。具体要求如下: 1、对系统进行功能模块分析、控制模块分析正确; 2、系统设计要实用; 3、编程简练,可用,功能全面; 4、说明书、流程图要清楚。 3.设计方案 3.1前言 本程序包括三种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。 3.2本选题设计的环境 WindowsXP下的Microsoft Visual C++ 6.0 3.3系统技术分析 (1)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。

实验一 模拟实现进程调度算法

实验一模拟实现进程调度算法(4学时) ①、实验目的 a、进程调度是处理机管理的核心内容。观察、体会操作系统的进程调度方法,并通过一个简单的进程调度模拟程序的实现,加深对进程控制块、进程队列、进程调度算法,进程切换的理解,并体会和了解各种调度算法的具体实施办法。 b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。 ②、实验内容 a、设计进程控制块PCB表结构,模拟实现进程调度算法:FIFO,静态优先级调度,时间片轮转调度,短进程优先调度算法,多级反馈队列调度。(实现静态优先级调度算法、短进程优先调度算法)。 b、编写一个进程调度程序模拟程序。模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。 c、由用户输入(可通过文件输入)进程名、进程状态、进程运行时间和进程优先级等数据。 ③、实验要求 a、使用模块化设计思想来设计。 b、给出主函数和各个算法函数的流程图。 c、学生可按照自身条件,随意选择采用的算法,(例如:采用冒泡法编写程序,实现短进程优先调度的算法)。 d、进程调度程序模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。 ④、运行结果 a、给出进程的调度模拟操作排序结果。 ⑤、提示 a、每个进程可有三个状态,并假设初始状态为就绪状态。 b、为了便于处理,程序中的进程运行时间以纳秒为单位计算。 C、各进程的优先级或轮转时间数以及进程需运行的纳秒数的初始值均由用户给定。 d、在优先级算法中,采用静态优先级。在时间片轮转算法中,采用可变时间片,由用户给定。 e、对于遇到优先级一致的情况,采用FIFO策略解决。

f、输入:进程流文件(文本文件),其中存储的是一系列要执行的进程,每个进程包括四个数据项:进程名进程状态(1就绪2等待3运行) 所需时间优先级(0级最高)。 g、输出:进程执行流等待时间平均等待时间。 ⑥、分析与讨论 a、各种进程调度算法的异同? b、如何理解“算法+数据结构=程序设计”? c、如何理解“数据结构始终是为实现功能服务的”? ⑦、参考代码 参看:附录A1 考核方法: 1、实验报告占50%,程序设计30%,出勤占20%; 3、每次实验100分,2次实验的平均分为最终实验成绩。 注:无出勤只交实验报告者,以实验报告成绩×50%为最后成绩。 打游戏者发现一次本次实验扣10分。 早退者本次实验扣10分。 点名时未到者,后来补签到按照迟到时间长短扣分,点名后即来扣5分,1节课过后才来扣10分。

进程调度算法模拟实验

华北科技学院计算机系综合性实验 实验报告 课程名称操作系统C 实验学期2012至2013学年第2学期学生所在系部计算机系 年级专业班级 学生姓名学号 任课教师杜杏菁 实验成绩 计算机系制

《操作系统C》课程综合性实验报告 开课实验室:基础六机房2013年6月3日 实验题目进程调度算法模拟 一、实验目的 通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。 二、设备与环境 1.硬件设备:PC机一台 2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java等编程语言环境。 三、实验内容 (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)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。

进程调度算法的模拟实现

操作系统课程设计报告题目:进程调度算法的模拟实现_ 专业计算机科学与技术 学生姓名 班级 学号 指导教师 发放日期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)算法 优先权调度算法是为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入最高优先权优先调度算法。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。

指纹图像二值化算法的分析和比较

指纹图像二值化算法的分析和比较 1引言 指纹作为人体的重要特征,因其具有唯一性和终生不变性,已经成为生物识别领域的重要手段。它不仅应用于公安司法系统的犯罪识别,而且还广泛应用于如一些保密系统的身份验证,成为生物识别领域的新热点。在指纹自动识别系统中,图像采集设备所得到的图像是一幅含有较多噪声的灰度图,必须经过预处理,除去大量的噪声信号,得到一幅纹线清晰的点线图,才能进行指纹特征的提取和匹配。指纹图像的预处理是正确地进行特征提取、比对等操作的基础,而二值化是图像预处理中非常重要的一步,也是指纹细化并提取特征前的重要步骤。 不同的二值化经常会对后续的步骤产生极大的影响,常用的二值化方法由于仅仅利用了图像的灰度信息,没有考虑指纹图像自身的方向结构特点,对指纹图像的二值化效果不理想. 本文首先对常用的二值化算法进行了讨论,并主要通过实验比较了两种特别针对指纹图像的二值化算法。 通常认为一个好的针对指纹图像的二值化算法应满足以下几点要求[f。1]: ●保持纹线的原始走向; ●相关领域内指纹的纹线走向基本一致; ●避免造成指纹纹线的中断和粘连; ●避免生成虚假指纹纹线; ●纹线间的间距变化平稳; 2图像的二值化算法 在很多情况下,图象是由具有不同灰度的两类区域组成的。如在指纹图象中,指纹脊线和谷线就由不同的灰度构成,通常脊线要比谷线暗。所谓灰度图象的二值化就是通过设定阀值,把它变为仅用两个灰度值分别表示图象的前景和背景颜色的二值图象。图象的二值化可以根据下面的阀值来处理: 假设一幅灰度图的像素值为f(i,j)∈(r1,r2 ,…,rm),设有一阀值为T=ri ,1≤i≤m,则: 二值化的方法很多,关键在于阀值T的选取。而T的取值方法又取决于二值化的技术。T的选择有基于由点的像灰度值单独决定的、有由像素的局部特征决定的、也有基于全局像素决定的。阀值可以分为两类:全局阀值和局部阀值。 1)全局阈值 全局阈值是在整个图像中将灰度阈值的值设置为常数。如果背景的灰度值在整个图像中可以合理的看作恒定,而且所有的物体于背景都具有几乎相同的的对比度,那么只要选择了正确的阈值,使用一个全局阈值可以得到非常好的的效果。代表算法有最大类间方差法(OSTU方法)。 OSTU方法计算简单,稳定有效,是实际应用中经常采用的方法。但是它对噪声和目标大小十分敏感,仅对类间方差是单峰的图像有较好效果。当目标与背景的大小比例悬殊时,类间方差准则函数可能为双峰或多峰,此时OSTU方法就会失效。 2)自适应阈值 自适应阈值化算法也称动态局部阈值化算法。所谓动态是指根据每个像素及其邻域像素的灰度值情况动态地计算分割所需的阈值,如:Bernsen算法,它对图像上的每个点以之为中心取一个局部窗口,则该点的阈值为窗口中最大灰度和最小灰度的平均,依次对每个点根据其阈值进行二值化。 4.基于方向图的动态阈值指纹图像二值化方法

进程调度算法实验报告

进程调度算法实验报告 篇一:操作系统进程调度算法模拟实验报告 进程调度算法模拟 专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日 一、实验目的 通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。 二、实验要求 编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算 法分别进行模拟调度。 三、实验方法内容 1. 算法设计思路 将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存 在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。

主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、 完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入 各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 2. 算法流程图主程序的框架: ();//先来先服务 ();//最短进程优先调度//简单时间片轮转//最高优先数优先//输入进程信息 ();.m_WaitQueue.empty()||.m_ProcessQueue.empt() (); (); 进程调度过程: ; 3. 算法中用到的数据结构 struct fcfs{//先来先服务算法从这里开始char name[10];float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float

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

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

基于熵的图像二值化算法设计-二维最大熵分割

1设计目的与要求 1.1 设计目的 (1)熟悉和掌握MATLAB程序设计方法。 (2)学习和掌握MATLAB图像处理工具箱。 (2)了解图像分割和图像二值化的原理。 (3)掌握图像二值化技术阈值的选取。 (4)将原彩色图像变为二值化后的图像,通过二维最大熵图像分割法对图像进行分割达到预期目的。 1.2 设计要求 (1)了解图像变换的意义和手段。 (2)熟悉最大熵和二值化的基本性质。 (3)通过本实验掌握利用MATLAB编程实现数字图像处理。 (4)理解图像分割的原理,了解其应用,掌握最大熵和二值化分割的方法。

2 设计方案 2.1 图像二值化 图像二值化是数字图像处理技术中的一项基本技术,二值化图像的显示与打印十分方便,存储与传输也非常容易,在目标识别、图像分析、文本增强、字符识别等领域得到广泛应用。图像二值化是将灰度图像转化为只有黑白两类像素的图像,大多采用阈值化算法处理。在不同的应用中,阈值的选取决定着图像特。 征信息的保留。因此,图像二值化技术的关键在于如何选取阈值。 2.2 最大熵原理 最大熵原理:最大熵原理是在1957 年由E.T.Jaynes 提出的,其主要思想是,在只掌握关于未知分布的部分知识时,应该选取符合这些知识但熵值最大的概率分布。因为在这种情况下,符合已知知识的概率分布可能不止一个。我们知道,熵定义的实际上是一个随机变量的不确定性,熵最大的时候,说明随机变量最不确定,换句话说,也就是随机变量最随机,对其行为做准确预测最困难。 图像分割中最大熵的引入:在图像分割中若假定以灰度级T 分割图像,则图像中低于灰度级T 的像素点构成目标物体,高于灰度级T 的像素点构成背景那么各个灰度级在图像分割后的两区域中的概率如下: O :t i N N (0<=i<=t) (3.2.1) B : t i N N N - (t+1<=i<=255) (3.2.2) 其中Ni 为图像中灰度级为i 的像素点个数,Nt 为灰度级从0~t 的像素点总和,N 为 图像总像素点,t 为假定灰度阈值T 。 ) l og()( t i t i N N N N H ∑-= (0<=i<=t) (3.2.3) ) log()( t i t i B N N N N N N H ---=∑ (t+1<=i<=255) (3.2.4)

车牌识别中二值化方法的研究与实现

车牌识别中二值化方法的研究与实现 摘要:在基于数字图像处理的车牌识别技术的研究过程中,因为车牌定位和字符分割一般都是基于车牌区域的二值化结果进行的,因此对图像的二值化是非常关键的一步。二值化最主要的是阈值的确定,文章对比了几种常规的车牌图像全局阈值二值化处理算法,发现这些方法不够理想,然后提出几种新的方法——基于图像直方图波形分析的车牌图像二值化处理算法;考虑到光照变化以及定位出的车牌周边环境和自身干扰等因素,提出了一种新的车牌二值化的方法,这种方法结合了高斯拉普拉斯算子法和迭代法;而不均匀光照下的图像二值化是数字图像处理中的另一个难题.为此,本文提出一种解决办法,首先使用同态滤波去掉车牌图像的不均匀光照的影响,然后使用改进的Bernsen算法对车牌图像进行二值化。实验表明,这三种方法在进行车牌图像二值化处理时效果比较理想。 关键词:车牌识别;二值化;高斯拉普拉斯算子;图像直方图;不均匀光线 Realize and Research on binarization method of license plate recognition Abstrac t:During the research for the license plate recognition based on the Distal Image Processing Technology,because the location and segmentation of license plate are usually based on the binarized image,the image binaryzation is a key step.The most important part of the image binaryzation is the determination of threshold.In this paper,severalmethods have been compared,and also the basic principles and computer simulation results of inter-class varimaxand maximum entropy method have been analyzed.But we have found that these methods are not optional when used to process vehicle license plate images.Therefore,a new method has been put forward,which is the arithtactic of license plate image binarization based on image histogram.Considering the changes of illumination,the surrounding environment of the license plate and the license plate itself,a new method of taking threshold value of binarization is introduced.This method combines the Gauss-Laplace method and the iteration method.It is a difficult task to binarize image under nonuniform illumination.A new method is presented as follows:at first,it enhances the plate image quality by homomorphic filtering to eliminate the bad effect of the nonuniform illumination;then,binarizes the plate image by a improved Bernsen algorithm.It has been proved that the three methods are well when used to process vehicle license plate images. Key words:Vehicle license plate recognition, binary, gaosilapulasi operator, image histogram, uneven light

进程调度算法模拟程序设计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;

图像二值化算法研究与实现

图像二值化算法研究与实现 摘要:图像二值化是图像预处理中的一项重要技术,在模式识别、光学字符识别、医学成像等方面都有重要应用。论文介绍了图像及数字图像处理技术的一些概念和相关知识;对VC++ 软件的发展和软件在图像处理中的应用做了简要介绍;还介绍了图像二值化算法以及利用VC++软件工具进行算法的实现。论文重点实现了图像分割技术中常用灰度图像二值化算法,如Otsu算法、Bernsen算法,并对这些算法运行的实验结果进行分析与比较。 关键词:图像处理;二值化;VC++; 1.引言 1.1 图像与数字图像 图像就是用各种观测系统观测客观世界获得的且可以直接或间接作用与人眼而产生视觉的实体。视觉是人类从大自然中获取信息的最主要的手段。拒统计,在人类获取的信息中,视觉信息约占60%,听觉信息约占20%,其他方式加起来才约占20%。由此可见,视觉信息对人类非常重要。同时,图像又是人类获取视觉信息的主要途径,是人类能体验的最重要、最丰富、信息量最大的信息源。通常,客观事物在空间上都是三维的(3D)的,但是从客观景物获得的图像却是属于二维(2D)平面的。 数字图像:数字图像是将连续的模拟图像经过离散化处理后得到的计算机能够辨识的点阵图像。在严格意义上讲,数字图像是经过等距离矩形网格采样,对幅度进行等间隔量化的二维函数。因此,数字图像实际上就是被量化的二维采样数组。 1.2 数字图像处理技术内容与发展现状 数字图像处理就是采用一定的算法对数字图像进行处理,以获得人眼视觉或者某种接受系统所需要的图像处理过程。图像处理的基础是数字,主要任务是进行各种算法设计和算法实现。 图像处理技术的发展大致经历了初创期、发展期、普及期和实用化期4个阶段。初创期开始与20世纪60年代,当时的图像采用像素型光栅进行少秒显示,大多采用中、大型机对其处理。在这一时期,由于图像存储成本高、处理设备昂贵,其应用面很窄。进入20世纪70年代的发展期,开始大量采用中、小型机进行处理,图像处理也逐渐改用光栅扫描方式,特别是CT和卫星遥感图像的出现,对图像处理技术的发展起到了很好的推动作用。到了20世纪80年代,图像处理技术进入普及期,此时的微机已经能够担当起图形图像处理的任务。超大规模集成电路(Very Large Scale Integration, VLSI)的出现更使处理速度大大提高,设备造价也进一步降低,极大地促进了图形图像系统的普及和应用。20世纪90年代是图像处理技术的实用化时期,图像处理的信息量巨大,对处理速度的要求极高。 1.3 图像二值化原理及意义 图像二值化是指用灰度变换来研究灰度图像的一种常用方法,即设定某一阈值将灰度

[操作系统]经典进程同步问题题库

1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。 Var Sempty,Sfull: semaphore:= 1,0 Begin Parbegin Collection:begin repeat 采集一个数据; wait(Sempty); 数据放入缓冲区; signal(Sfull); untill false; end; Compute:begin repeat wait(Sfull); 从缓冲区取出数据; signal(Sempty); 计算; ` until false; end; Parend End 2、有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题。 var mutex, readcount :semaphore := 1,100; Begin Parbegin Process Reader:begin repeat wait(readcount); wait(mutex); <填入座号和姓名完成登记>; signal(mutex); <阅读> wait(mutex) <删除登记表中的相关表项,完成注销> signal(mutex); signal(readcount); until false; end; parend; End; 1)、桌上有一空盘,只允许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait 和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。 var Sempty, Sapple, Sorange,: semaphore:= 1,0,0; begin parbegin Father: begin repeat wait(Sempty); ; signal(Sapple); until false; end; Mother: begin repeat wait(Sempty); ; signal(Sorange); until false; end; Son: begin repeat wait(Sorange); ; signal(Sempty); until false; end; Daughter: begin repeat wait(Sapple); ; signal(Sempty); until false; end; parend; end; 1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。请试用信号量机制对其上过程进行分析。 var s1,s2,s3:semaphpre:=0,0,0; begin parbegin Athlete1: begin Run 100m; signal(s1); end; Athlete2: begin wait(s1); Run 100m; signal(s2); end; Athlete3: begin wait(s2); Run 100m; signal(s3); end; Athlete4: begin wait(s3); Run 100m; end; parend; end 2、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。

指纹图像二值化算法的研究_祁亚萍

科技信息 SCIENCE &TECHNOLOGY INFORMATION 2011年第23期0引言 指纹识别技术是当前生物识别技术中应用最为广泛的一种。自动指纹识别的关键技术包含指纹预处理,指纹特征提取,指纹特征匹配几方面。实际得到广泛应用的指纹特征匹配多是基于指纹细节点特征。指纹细节点特征的提取通常在细化二值指纹图像上进行。图像二值化就是根据一定的规则,将一幅图像变为只用两阶灰度表示的黑白图像。二值化指纹图像中通常黑像素表示指纹的脊线,而白像素表示指纹的谷线和背景区。 1指纹图像二值化算法分析 指纹图像二值化方法主要有两种:灰度阈值分割法和邻域分析法。目前,自动指纹识别系统中应用的灰度阈值分割二值化算法根据阈值选取方式的不同可以分为全局固定阈值法和局部自适应动态阈值法。 1.1全局固定阈值法 全局固定阈值法一般根据整幅指纹图像前景区的灰度直方图分布选择一个合适的判断阈值,对整幅指纹图像进行二值化处理。该算法在指纹图像对比度较好的情况下,统计直方图的两个峰值比较明显,能够选择合适的阈值对指纹图像进行二值化处理。但该判定阈值的选择完全依赖于统计直方图,抵抗噪声干扰的能力较弱。另外,采集到的指纹图像中心区域和边缘区域的灰度分布一般难以达到一致,故全局固定阈值二值化算法并不能很好地适应实际处理的要求。1.2局部自适应动态阈值法 局部自适应动态阈值法是将整幅指纹图像分块,结合各块图像的自身特点,为每块图像分别选取不同的阈值,对各块指纹图像区域进行二值化处理。分块大小的设定和局部判决阈值的选取对指纹图像二值化效果起着关键作用。最佳的分块大小应该选取指纹图像纹线的整数倍距离,实际应用中很难精确地确定出指纹纹线距离,而且同一指纹图像的各区域纹线距离并不总是一致的。局部自适应动态阈值选取的一般依据是:对每块图像选取的阈值应尽量使该块图像内大于该阈值的像素点数和小于该阈值的像素点数大致相等。 该类算法实现的一般步骤为:首先对整幅指纹图像进行分块;然后根据某一规则确定局部灰度阈值T ;最后将方块中每个像素的灰度值与T 值比较。如果低于灰度阈值T 则视为脊线点,置为0;反之则视为谷线点,置为255。通常阈值T 取块内灰度均值较为简单,但抗噪能力较差。下面对现有的局部阈值选取方法进行分析。 文献[2]将指纹的方向信息引入到二值化处理过程中,综合考虑指纹的方向信息和自适应选择局部阈值,提出了一种结合方向信息的自适应局部阈值二值化算法。局部阈值确定采用迭代法,首先将指纹图像分成W ×W 的块,计算每块的平均灰度值;然后分别计算该区域内大于等于阈值T 的像素点个数N H 和小于阈值T 的像素点个数N L ;当|Nh-Nl|≤α(α=W ×W ×10%)时,则T 为阈值,否则循环调整T 值,直到得到满足上述不等式条件的阈值T 。根据沿指纹脊线方向上的像素灰度阶近似一致的特点,制定二值化规则。具体参见文献[2]。 文献[3]在文献[2]的基础上有所改进,计算局部阈值时综合考虑周边邻域像素的影响,采用块重叠的方式求取阈值T ,并对块内像素进行分类二值化。对二值化图像根据指纹纹理特点和方向信息进行去除粘线,消除孔洞的处理,在一定程度上提高了算法的鲁棒性和抗噪能力,但同时也增加了算法复杂度,降低了处理效率。 文献[4]指出对于一幅指纹图像,由于在脊线和谷线的分界处灰度的变化最大,不确定性最高,以脊线和谷线分界处灰度阶作为分割阈值得到的信息熵最大。文献[5]利用此结论将信息熵引入到指纹图像二值化算法中,先对指纹图像进行分块处理,提取指纹图像有效区域,然 后求取使局部信息熵最大的灰度值作为判决阈值进行二值化处理。该算法对噪声具有鲁棒性,能够有效实现对指纹图像的二值化,提高了细节特征提取结果的准确率,但灰度阈值的计算复杂度较大。1.3邻域分析法 邻域分析法充分利用指纹图像纹线的连续性和脊线谷线相间隔的特点。若指纹图像的某一点在脊线上,则与该点相邻的切线方向上的像素点也应位于脊线上,而该点纹线方向的垂直方向上的点应位于谷线上。因此,对于脊线上的点来说,沿纹线方向的灰度均值较小,沿纹线方向的垂直方向上灰度均值较大。 文献[6]基于指纹图像的这一特点给出一种基于方向信息的指纹图像自适应二值化算法。具体算法为:对于前景区域每一像素点g(x,y),以其为中心分别计算纹线方向上的m 个邻域点的加权灰度均值Gh(x,y)和纹线垂直方向上m 个点的加权灰度均值Gv(x,y);若Gh(x,y)

相关文档
最新文档