www.pudn.com > LFYOS.zip > block_free.c
#include "memory.h"
#define NO_FREE_BLOCK (-1)
int get_free_block(int memory_process_number)
{
int bn;
struct physical_block *b;
if((bn=(*(memory_body->free_physical_block)))<0)
return NO_FREE_BLOCK;
b=memory_body->physical_block+bn;
*(memory_body->free_physical_block)=b->buf_back;
(memory_body->memory_process+memory_process_number)
->block_number++;
b->state=FREE_BLOCK;
(*(memory_body->free_block_number))--;
return bn;
}
void free_free_block(int memory_process_number,int block_number)
{
int processor,semaphore;
struct physical_block *b;
b=memory_body->physical_block+block_number;
b->state=FREE_BLOCK;
b->buf_back=(*(memory_body->free_physical_block));
*(memory_body->free_physical_block)=block_number;
(memory_body->memory_process+memory_process_number)
->block_number--;
(*(memory_body->free_block_number))++;
if((processor=memory_body->wait_block->processor)>=0)
if((semaphore=memory_body->wait_block->semaphore)>=0){
memory_body->wait_block->processor=(-1);
memory_body->wait_block->semaphore=(-1);
memory_v_operation(processor,semaphore);
}
return;
}