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