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; 
}