示例#1
0
void test_throughput()
{
    struct bitarray* bits;
    struct timeval start, end;
    char pretty_time[32];
    uint64_t i, time;

    bits = bitarray_init(4294967296);

    for (i = 0; i < 4294967296; i++)
    {
        bitarray_set_bit(bits, i);
    }

    gettimeofday(&start, NULL);
    for (i = 0; i < 4294967296; i++)
    {
        assert(bitarray_get_bit(bits, i) == true);
    }
    gettimeofday(&end, NULL);

    time = diff_time(start, end);
    pretty_print_microseconds(time, pretty_time, 32);
    fprintf_cyan(stdout, "time to get 4294967296 items and check set: %s\n",
                         pretty_time);
    bitarray_destroy(bits);
}
示例#2
0
int main(int argc, char* argv[])
{
    uint64_t i;
    struct bitarray* bits;

    fprintf_blue(stdout, "-- Bitarray Test Suite --\n");

    fprintf_light_blue(stdout, "* test bitarray_init()\n");
    bits = bitarray_init(8*512);
    bitarray_print(bits);
    fprintf_light_blue(stdout, "* test bitarray_set_all()\n");
    bitarray_set_all(bits);
    bitarray_print(bits);
    fprintf_light_blue(stdout, "* test bitarray_clear()\n");
    bitarray_unset_all(bits);
    bitarray_print(bits);

    fprintf_light_blue(stdout, "* test bitarray_set_bit()\n");
    for (i = 0; i < 31; i++)
    {
        bitarray_set_bit(bits, test_nums[i]);
    }

    fprintf_light_blue(stdout, "* test bitarray_get_bit()\n");
    for (i = 0; i < 31; i++)
    {
        assert(bitarray_get_bit(bits, test_nums[i]) == true);
    }


    fprintf_light_blue(stdout, "* test bitarray_unset_bit()\n");
    bitarray_unset_bit(bits, test_nums[4]);
    bitarray_unset_bit(bits, test_nums[9]);
    for (i = 0; i < 31; i++)
    {
        if (i == 4 || i == 9) continue;
        assert(bitarray_get_bit(bits, test_nums[i]) == true);
    }

    for (i = 0; i < 31; i++)
    {
        bitarray_unset_bit(bits, test_nums[i]);
    }

    for (i = 0; i < 31; i++)
    {
        assert(bitarray_get_bit(bits, test_nums[i]) == false);
    }

    bitarray_print(bits);

    bitarray_destroy(bits);

    test_throughput();

    return EXIT_SUCCESS;
}
示例#3
0
void nuevoPrograma(int frame, int pid, int cantPaginas)
{
	int i,j=0;
	for(i=frame; i<(cantPaginas+frame); i++)
	{
		bitarray_set_bit(bitMap,i);
		tabla[i].pid = pid;
		tabla[i].page = j;
		j++;
	}
}
示例#4
0
void reservar_bloque_datos(ptrGBloque *blk_direct, int j)
{
	int pos_bit = bits_disponibles;
	while(bitarray_test_bit(bitmap, pos_bit))
	{
		pos_bit++;
	}
	bitarray_set_bit(bitmap, pos_bit);
	blk_direct[j] = pos_bit;
	char *bloque_dato = (char *) data_disco + blk_direct[j] * BLOCK_SIZE;
	bzero(bloque_dato, BLOCK_SIZE);
	return;
}
示例#5
0
void reservar_bloque_directo(int pos_archivo, int i)
{
	int pos_bit = bits_disponibles;

	while(bitarray_test_bit(bitmap, pos_bit))
	{
		pos_bit++;
	}
	bitarray_set_bit(bitmap, pos_bit);
	nodos[pos_archivo].blk_indirect[i] = pos_bit;
	ptrGBloque* blk_direct = (ptrGBloque *) (data_disco + nodos[pos_archivo].blk_indirect[i] * BLOCK_SIZE);
	int k;
	for(k = 0; k < 1024; k++)
	{
		blk_direct[k] = 0;
	}
	return;
}
示例#6
0
void moverFrame(int frame_origen, int frame_destino)
{
	pagina pag;
	//setea el frame donde se va mover en 1
	bitarray_set_bit(bitMap,frame_destino);
	//trae la pagina del frame origen y la escribe en el frame destino
	pag = leerPaginaFromFrame(frame_origen);
	escribirPaginaEnFrame(frame_destino,pag);
	free(pag);

	tabla[frame_destino].page = tabla[frame_origen].page;
	tabla[frame_destino].pid = tabla[frame_origen].pid;

	tabla[frame_origen].page = -1;
	tabla[frame_origen].pid = -1;

	bitarray_clean_bit(bitMap,frame_origen);
}