操作系统编程:进程管理(优先级)
2006-01-22 20:33
393 查看
//process.h
// C++下,模拟进程调度,只考虑优先级和内层资源占用
// 清翔兔 05/10/21 第三次修改
#include <iostream>
using namespace std;
const int eve_priority = 3; //优先级减少数/次
const int eve_time = 5; //CPU运行时间片/次
const int memMax = 100; //内存空间
// 进程类
class process_item {
public:
process_item (int id, int mem, int time, int priority);
bool _ok; // 是否已经完成
bool _on; // 是否已经进入内层
int _mem; // 需要内层空间
int id () {return _id; }
int priority () {return _priority; }
int mem () {return _mem; }
void over () { _ok=1;} //表示进程结束
bool ontime() {return _on;} //检查是否在内层中
//void init_priority () { _priority = 0;}
void init_time () { _time = 0;} //结束时,将时间归0
int time () {return _time; }
//一个时间片后,优先级减少
int down_priority () { _priority -= eve_priority; return _priority;}
//一个时间片后,时间减少
int down_time() {_time -= eve_time; return _time;}
process_item * next() {return _next;}
void next ( process_item *p ) { _next = p;}
void print_item ();
private:
int _id;
//int _mood;
int _time;
int _priority;
process_item * _next;
};
//进程项目类
class process {
public:
process():_front(0),_end(0),_num(0),_memNow(0) {} //进程初始化
int num() { return _num; }
int memNow() { return _memNow; }
void up_num () { _num++; }
void add (int id, int mem, int time, int priority);
int up_memNow (process_item* item);
int down_memNow (process_item* item);
bool in_mem (process_item* item); //进入内存控制
void print();
void done(); //进程主函数
process_item *whichone(); //选择执行进程
process_item *front() { return _front;}
private:
process_item *_front ,*_end;
int _num;
int _memNow; //当前已经被占用的内存空间
};
inline int process::up_memNow( process_item* item ) //进入内存后,增加内存
{
//cout << item->_on << endl; //测试语句
if (item->_on==0)
{
//cout << item->_mem << " " << _memNow ; //测试语句
_memNow +=item->_mem;
item->_on =1;
}
return _memNow;
}
inline int process::down_memNow(process_item* item) //完成后,离开内层
{
_memNow -= item->_mem;
item->_on =0;
return _memNow;
}
bool process::in_mem(process_item* item) //测试能否进入内存,可以就进入
{
if ( item->_ok==1 ) return 0;
if ( item->_on==1 ) return 1;
int t;
t= memNow() + item->_mem;
//cout << item->_mem <<" t: " << t ;
if ( t > memMax) return 0;
else
{
up_memNow (item);
return 1;
}
}
inline process_item::
process_item(int id, int mem, int time, int priority)
:_id(id),_mem(mem),_time(time),_priority(priority),_next(0),_on(0),_ok(0){}
void process_item::print_item ()
{
cout << "id:" << _id
<< "/t priority:" << _priority
<< "/t lefttime:" << _time
<< "/t mem:" << _mem;
}
inline process_item *process::whichone() //选择
{
process_item *m = _front;
while (!in_mem(m) )
{
if (!m->next()) return m;
m=m->next();
}
process_item *p = m->next();
while ( p!=NULL )
{
if ( in_mem(p) //是否进了内层?
&& p->priority() > m->priority() ) m=p;
p = p->next();
}
//up_memNow (m);
return m;
}
inline void process::add (int id, int mem, int time, int priority)
{
process_item *p=
new process_item (id, mem, time, priority);
if ( !_end)
_front = _end = p;
else {
_end->next(p);
_end = p;
}
up_num();
}
void process::print ()
{
process_item *p = _front;
while ( p!=NULL )
{
p->print_item();
p = p->next();
}
cout << "Num:" << _num << endl;
}
void process::done()
{
int tot_time=0;
process_item *m = whichone();
while ( m->time() > 0 )
{
/*
// 如下考虑优先级不为0
if ( m->priority() > eve_time)
m->down_priority();
else
m->init_priority();
*/
m->down_priority(); //降低优先级
if ( m->time() > eve_time) //检查时间满足
{
tot_time += eve_time;
m->down_time();
}
else //对不满足时间的,进行完,并离开内存
{
tot_time += m->time();
down_memNow( m );
m->init_time();
m->over();
}
m->print_item();
cout << "/t/tmemNow:" << memNow() << endl;
m = whichone();
}
}
//main.h
#include "process.h"
void main ()
{
process mytask;
//int id, int mem, int time, int priority
mytask.add(1,13,10,3);
mytask.add(2,91,25,7);
mytask.add(3,27,15,5);
mytask.done();
}
// C++下,模拟进程调度,只考虑优先级和内层资源占用
// 清翔兔 05/10/21 第三次修改
#include <iostream>
using namespace std;
const int eve_priority = 3; //优先级减少数/次
const int eve_time = 5; //CPU运行时间片/次
const int memMax = 100; //内存空间
// 进程类
class process_item {
public:
process_item (int id, int mem, int time, int priority);
bool _ok; // 是否已经完成
bool _on; // 是否已经进入内层
int _mem; // 需要内层空间
int id () {return _id; }
int priority () {return _priority; }
int mem () {return _mem; }
void over () { _ok=1;} //表示进程结束
bool ontime() {return _on;} //检查是否在内层中
//void init_priority () { _priority = 0;}
void init_time () { _time = 0;} //结束时,将时间归0
int time () {return _time; }
//一个时间片后,优先级减少
int down_priority () { _priority -= eve_priority; return _priority;}
//一个时间片后,时间减少
int down_time() {_time -= eve_time; return _time;}
process_item * next() {return _next;}
void next ( process_item *p ) { _next = p;}
void print_item ();
private:
int _id;
//int _mood;
int _time;
int _priority;
process_item * _next;
};
//进程项目类
class process {
public:
process():_front(0),_end(0),_num(0),_memNow(0) {} //进程初始化
int num() { return _num; }
int memNow() { return _memNow; }
void up_num () { _num++; }
void add (int id, int mem, int time, int priority);
int up_memNow (process_item* item);
int down_memNow (process_item* item);
bool in_mem (process_item* item); //进入内存控制
void print();
void done(); //进程主函数
process_item *whichone(); //选择执行进程
process_item *front() { return _front;}
private:
process_item *_front ,*_end;
int _num;
int _memNow; //当前已经被占用的内存空间
};
inline int process::up_memNow( process_item* item ) //进入内存后,增加内存
{
//cout << item->_on << endl; //测试语句
if (item->_on==0)
{
//cout << item->_mem << " " << _memNow ; //测试语句
_memNow +=item->_mem;
item->_on =1;
}
return _memNow;
}
inline int process::down_memNow(process_item* item) //完成后,离开内层
{
_memNow -= item->_mem;
item->_on =0;
return _memNow;
}
bool process::in_mem(process_item* item) //测试能否进入内存,可以就进入
{
if ( item->_ok==1 ) return 0;
if ( item->_on==1 ) return 1;
int t;
t= memNow() + item->_mem;
//cout << item->_mem <<" t: " << t ;
if ( t > memMax) return 0;
else
{
up_memNow (item);
return 1;
}
}
inline process_item::
process_item(int id, int mem, int time, int priority)
:_id(id),_mem(mem),_time(time),_priority(priority),_next(0),_on(0),_ok(0){}
void process_item::print_item ()
{
cout << "id:" << _id
<< "/t priority:" << _priority
<< "/t lefttime:" << _time
<< "/t mem:" << _mem;
}
inline process_item *process::whichone() //选择
{
process_item *m = _front;
while (!in_mem(m) )
{
if (!m->next()) return m;
m=m->next();
}
process_item *p = m->next();
while ( p!=NULL )
{
if ( in_mem(p) //是否进了内层?
&& p->priority() > m->priority() ) m=p;
p = p->next();
}
//up_memNow (m);
return m;
}
inline void process::add (int id, int mem, int time, int priority)
{
process_item *p=
new process_item (id, mem, time, priority);
if ( !_end)
_front = _end = p;
else {
_end->next(p);
_end = p;
}
up_num();
}
void process::print ()
{
process_item *p = _front;
while ( p!=NULL )
{
p->print_item();
p = p->next();
}
cout << "Num:" << _num << endl;
}
void process::done()
{
int tot_time=0;
process_item *m = whichone();
while ( m->time() > 0 )
{
/*
// 如下考虑优先级不为0
if ( m->priority() > eve_time)
m->down_priority();
else
m->init_priority();
*/
m->down_priority(); //降低优先级
if ( m->time() > eve_time) //检查时间满足
{
tot_time += eve_time;
m->down_time();
}
else //对不满足时间的,进行完,并离开内存
{
tot_time += m->time();
down_memNow( m );
m->init_time();
m->over();
}
m->print_item();
cout << "/t/tmemNow:" << memNow() << endl;
m = whichone();
}
}
//main.h
#include "process.h"
void main ()
{
process mytask;
//int id, int mem, int time, int priority
mytask.add(1,13,10,3);
mytask.add(2,91,25,7);
mytask.add(3,27,15,5);
mytask.done();
}
相关文章推荐
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- windows mobile 5.0 进程管理、窗体管理、重启和关闭操作系统
- 系统编程之进程管理 pipe
- 操作系统复习——进程管理
- 进程、线程、文件共享--操作系统概念--unix环境高级编程
- 模拟进程队列管理——按照优先级入列
- UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数
- Android系统中的进程管理:进程的优先级
- 【操作系统】进程管理
- 操作系统实验一(进程管理)
- 操作系统原理学习笔记--进程管理
- 总结操作系统进程管理部分知识
- C#编程应用--进程管理
- 操作系统进程调度算法 先到先服务 短作业 优先级 时间片轮转
- windows mobile 5.0 进程管理、窗体管理、重启和关闭操作系统
- 操作系统--进程管理--进程同步的经典问题
- 操作系统总结二(进程管理)
- 浅谈操作系统之进程管理
- linux操作系统下c语言编程入门 -- (2)进程介绍
- 2015年考研核心考点命题思路解密——操作系统 第2章 进程管理 PV算法 文件打印问题 生产者——消费者问题