#include<stdio.h>
#include<time.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define BLOCK_SIZE 1024 //每个页的大小1K
#define MEM_SIZE 64 //内存大小 64K
#define SWAP_SPACE_SIZE 128 //置换空间大小 128K
#define LODE_COUNT 3 //装入的页数
struct Page_Table
{
int pageno,blockno,swapspaceno; //页号,块号,置换块号
int exists,modified; //存在位,修改位
};
struct Access_Queue //页面访问队列
{
int pageno;
struct Access_Queue *next;
};
struct PCB
{
char name[20];
int size;
struct Page_Table *page_table;
struct Access_Queue *fifo,*lru;
struct PCB *next;
};
struct PCB *ready,*running,*blocked;
char swap_algorithm[10]="FIFO";
void add(struct PCB *head,struct PCB *process) //在队列尾添加一个节点
{
struct PCB *tmp=head;
while(tmp->next!=NULL)
tmp=tmp->next;
tmp->next=process;
process->next=NULL;
}
struct PCB * removeFirst(struct PCB *head) //将队列的第一个节点删除
{
struct PCB *tmp=head->next;
if(tmp!=NULL)
{
head->next=tmp->next;
tmp->next=NULL;
}
return tmp;
}
void setbit(char *b,int bit_no,int flag) //把该位置成0或1
{
char mask=(char)1<<bit_no;
if(flag)
*b=*b|mask;
else
{
mask=~mask;
*b=*b&mask;
}
}
int getbit(char b,int bit_no) //获得该位的数字