rassert(processes);
n_processes = n;
for (i = 0; i < n_processes; ++i)
- processes[i].size = -1L;
+ processes[i].paras = -1;
#ifndef INDIRECT_CORE
#ifndef INDIRECT_SWAP
static bool do_swap_out(int swap_out) {
int victim_core_blocks;
int blocks, swap_base, core_base;
- long size;
+ int paras;
#ifndef INDIRECT_CORE
#ifdef INDIRECT_SWAP
int i, j, core_block, swap_block;
#else /* INDIRECT_CORE */
core_base = victim->core_item.limit - victim_swap_blocks;
#endif /* INDIRECT_CORE */
- size = (long)blocks << BLOCK_SHIFT;
+ paras = blocks << BLOCK_PARAS_SHIFT;
// transfer data to swap
#ifndef INDIRECT_CORE
#ifndef INDIRECT_SWAP
printf("write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, swap_base, swap_base + blocks);
core_to_swap_copy(
- (long)core_base << BLOCK_SHIFT,
- (long)swap_base << BLOCK_SHIFT,
- size
+ core_base << BLOCK_PARAS_SHIFT,
+ swap_base << BLOCK_PARAS_SHIFT,
+ paras
#else /* INDIRECT_SWAP */
rassert(
block_pool_alloc(&swap_block_pool, swap_table_mem + swap_base, blocks)
);
#ifdef INDIRECT_SWAP
printf("write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, swap_base, swap_base + blocks);
- j = (int)(size >> BLOCK_SHIFT);
+ j = paras >> BLOCK_PARAS_SHIFT;
printf("blocks");
for (i = 0; i < j; ++i) {
core_block = core_base + i;
swap_block = swap_table_mem[swap_block];
printf(" %d", swap_block);
core_to_swap_copy(
- (long)core_block << BLOCK_SHIFT,
- (long)swap_block << BLOCK_SHIFT,
- BLOCK_SIZE
+ core_block << BLOCK_PARAS_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
+ BLOCK_PARAS
);
}
- j = (int)size & (BLOCK_SIZE - 1);
+ j = (int)paras & (BLOCK_PARAS - 1);
if (j) {
core_block = core_base + i;
swap_block = swap_base + i;
printf(" %d", swap_block);
//putchar('*');
core_to_swap_copy(
- (long)core_block << BLOCK_SHIFT,
- (long)swap_block << BLOCK_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
j
);
}
);
#endif /* INDIRECT_SWAP */
printf("write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, swap_base, swap_base + blocks);
- j = (int)(size >> BLOCK_SHIFT);
+ j = paras >> BLOCK_PARAS_SHIFT;
printf("blocks");
for (i = 0; i < j; ++i) {
core_block = core_base + i;
printf(",%d", swap_block);
#endif /* INDIRECT_SWAP */
core_to_swap_copy(
- (long)core_block << BLOCK_SHIFT,
- (long)swap_block << BLOCK_SHIFT,
- BLOCK_SIZE
+ core_block << BLOCK_PARAS_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
+ BLOCK_PARAS
);
}
- j = (int)size & (BLOCK_SIZE - 1);
+ j = (int)paras & (BLOCK_PARAS - 1);
if (j) {
core_block = core_base + i;
core_block = core_table_mem[core_block];
#endif /* INDIRECT_SWAP */
//putchar('*');
core_to_swap_copy(
- (long)core_block << BLOCK_SHIFT,
- (long)swap_block << BLOCK_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
j
);
}
return true;
}
-bool process_alloc(struct process *process, long size) {
+bool process_alloc(struct process *process, int paras) {
int blocks;
// must not be already allocated
- assert(process->size == -1L);
+ assert(process->paras == -1);
// check blocks
- blocks = (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ blocks = (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
if (
process_avail < blocks ||
!pool_alloc(
process->lru_item.next->prev = &process->lru_item;
// track total allocation
- process->size = size;
+ process->paras = paras;
process_avail -= blocks;
return true;
}
-bool process_realloc(struct process *process, long size) {
+bool process_realloc(struct process *process, int paras) {
int blocks, old_blocks, blocks_change;
// must be already allocated
- assert(process->size != -1L);
+ assert(process->paras != -1);
// must be fully in core
assert(process->lru_item.prev != NULL);
// check blocks
- blocks = (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
- old_blocks = (int)((process->size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ blocks = (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
+ old_blocks = (process->paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
blocks_change = blocks - old_blocks;
if (process_avail < blocks_change)
return false;
#endif /* INDIRECT_CORE */
// track total allocation
- process->size = size;
+ process->paras = paras;
process_avail -= blocks_change;
return true;
}
void process_run(struct process *process) {
int blocks, process_core_blocks, process_swap_blocks;
int swap_base, core_base;
- long size;
+ int paras;
#ifndef INDIRECT_CORE
#ifdef INDIRECT_SWAP
int i, j;
#endif /* INDIRECT_CORE */
// must be already allocated
- assert(process->size != -1L);
+ assert(process->paras != -1);
// see whether fully in core
if (process->lru_item.prev != NULL) {
#endif /* INDIRECT_CORE */
process_core_blocks += blocks;
process_swap_blocks -= blocks;
- size = (long)blocks << BLOCK_SHIFT;
+ paras = blocks << BLOCK_PARAS_SHIFT;
// transfer data to core
#ifdef INDIRECT_CORE
#ifndef INDIRECT_CORE
#ifndef INDIRECT_SWAP
swap_to_core_copy(
- (long)swap_base << BLOCK_SHIFT,
- (long)core_base << BLOCK_SHIFT,
- size
+ swap_base << BLOCK_PARAS_SHIFT,
+ core_base << BLOCK_PARAS_SHIFT,
+ paras
);
#else /* INDIRECT_SWAP */
- j = (int)(size >> BLOCK_SHIFT);
+ j = paras >> BLOCK_PARAS_SHIFT;
printf("blocks");
for (i = 0; i < j; ++i) {
int core_block = core_base + i;
swap_block = swap_table_mem[swap_block];
printf(",%d", swap_block);
swap_to_core_copy(
- (long)swap_block << BLOCK_SHIFT,
- (long)core_block << BLOCK_SHIFT,
- BLOCK_SIZE
+ swap_block << BLOCK_PARAS_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
+ BLOCK_PARAS
);
}
- j = (int)size & (BLOCK_SIZE - 1);
+ j = (int)paras & (BLOCK_PARAS - 1);
if (j) {
int core_block = core_base + i;
int swap_block = swap_base + i;
swap_block = swap_table_mem[swap_block];
printf(",%d", swap_block);
swap_to_core_copy(
- (long)swap_block << BLOCK_SHIFT,
- (long)core_block << BLOCK_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
j
);
}
block_pool_free(&swap_block_pool, swap_table_mem + swap_base, blocks);
#endif /* INDIRECT_SWAP */
#else /* INDIRECT_CORE */
- j = (int)(size >> BLOCK_SHIFT);
+ j = paras >> BLOCK_PARAS_SHIFT;
printf("blocks");
for (i = 0; i < j; ++i) {
int core_block = core_base + i;
printf(",%d", swap_block);
#endif /* INDIRECT_SWAP */
swap_to_core_copy(
- (long)swap_block << BLOCK_SHIFT,
- (long)core_block << BLOCK_SHIFT,
- BLOCK_SIZE
+ swap_block << BLOCK_PARAS_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
+ BLOCK_PARAS
);
}
- j = (int)size & (BLOCK_SIZE - 1);
+ j = (int)paras & (BLOCK_PARAS - 1);
if (j) {
int core_block = core_base + i;
core_block = core_table_mem[core_block];
printf(",%d", swap_block);
#endif /* INDIRECT_SWAP */
swap_to_core_copy(
- (long)swap_block << BLOCK_SHIFT,
- (long)core_block << BLOCK_SHIFT,
+ swap_block << BLOCK_PARAS_SHIFT,
+ core_block << BLOCK_PARAS_SHIFT,
j
);
}
#endif /* INDIRECT_CORE */
// must be already allocated
- assert(process->size != -1L);
+ assert(process->paras != -1);
// see whether fully in core, victim, or fully in swap
if (process->lru_item.prev != NULL) {
pool_free(&swap_table, &process->swap_item);
// track total allocation
- process_avail += (int)((process->size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
- process->size = -1L;
+ process_avail += (process->paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
+ process->paras = -1;
}
#define TRANSFER_SIZE 0x8000
-uint8_t *core_block_mem;
-uint8_t *swap_block_mem;
+int *core_block_mem;
+int *swap_block_mem;
-void core_hash_init(int process, long base, long size, long offset) {
- long i, addr;
+void core_hash_init(int process, int base, int paras, int offset) {
+ int i, addr;
- //printf("core_hash_init %d %ld(%d) %ld(%d) %ld(%d)\n", process, base, (int)(base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT), offset, (int)(offset >> BLOCK_SHIFT));
- for (i = 0L; i < size; ++i) {
+ //printf("core_hash_init %d %d(%d) %d(%d) %d(%d)\n", process, base, base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT, offset, offset >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i) {
addr = base + i;
#ifdef INDIRECT_CORE
addr =
- (core_table_mem[addr >> BLOCK_SHIFT] << BLOCK_SHIFT) |
- (addr & (BLOCK_SIZE - 1));
+ (core_table_mem[addr >> BLOCK_PARAS_SHIFT] << BLOCK_PARAS_SHIFT) |
+ (addr & (BLOCK_PARAS - 1));
#endif /* INDIRECT_CORE */
- rassert(core_block_mem[addr] == 0xaa);
- core_block_mem[addr] = (uint8_t)(process * 17 + (i + offset) * 29);
+ rassert(core_block_mem[addr] == 0xaaaaaaaa);
+ core_block_mem[addr] = process * 17 + (i + offset) * 29;
}
}
-void core_hash_verify(int process, long base, long size, long offset) {
- long i, addr;
+void core_hash_verify(int process, int base, int paras, int offset) {
+ int i, addr;
- //printf("core_hash_verify %d %ld(%d) %ld(%d) %ld(%d)\n", process, base, (int)(base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT), offset, (int)(offset >> BLOCK_SHIFT));
- for (i = 0L; i < size; ++i) {
+ //printf("core_hash_verify %d %d(%d) %d(%d) %d(%d)\n", process, base, base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT, offset, offset >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i) {
addr = base + i;
#ifdef INDIRECT_CORE
addr =
- (core_table_mem[addr >> BLOCK_SHIFT] << BLOCK_SHIFT) |
- (addr & (BLOCK_SIZE - 1));
+ (core_table_mem[addr >> BLOCK_PARAS_SHIFT] << BLOCK_PARAS_SHIFT) |
+ (addr & (BLOCK_PARAS - 1));
#endif /* INDIRECT_CORE */
- rassert(
- core_block_mem[addr] == (uint8_t)(process * 17 + (i + offset) * 29)
- );
- core_block_mem[addr] = 0xaa;
+ rassert(core_block_mem[addr] == process * 17 + (i + offset) * 29);
+ core_block_mem[addr] = 0xaaaaaaaa;
}
}
-void swap_hash_verify(int process, long base, long size, long offset) {
- long i, addr;
+void swap_hash_verify(int process, int base, int paras, int offset) {
+ int i, addr;
- //printf("swap_hash_verify %d %ld(%d) %ld(%d) %ld(%d)\n", process, base, (int)(base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT), offset, (int)(offset >> BLOCK_SHIFT));
- for (i = 0L; i < size; ++i) {
+ //printf("swap_hash_verify %d %d(%d) %d(%d) %d(%d)\n", process, base, base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT, offset, offset >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i) {
addr = base + i;
#ifdef INDIRECT_SWAP
addr =
- (swap_table_mem[addr >> BLOCK_SHIFT] << BLOCK_SHIFT) |
- (addr & (BLOCK_SIZE - 1));
+ (swap_table_mem[addr >> BLOCK_PARAS_SHIFT] << BLOCK_PARAS_SHIFT) |
+ (addr & (BLOCK_PARAS - 1));
#endif /* INDIRECT_SWAP */
- rassert(
- swap_block_mem[addr] == (uint8_t)(process * 17 + (i + offset) * 29)
- );
- swap_block_mem[addr] = 0xaa;
+ rassert(swap_block_mem[addr] == process * 17 + (i + offset) * 29);
+ swap_block_mem[addr] = 0xaaaaaaaa;
}
}
#ifndef INDIRECT_CORE
-void core_copy(long src_base, long dest_base, long size) {
- long i;
+void core_copy(int src_base, int dest_base, int paras) {
+ int i;
- //printf("core_copy %ld(%d) %ld(%d) %ld(%d)\n", src_base, (int)(src_base >> BLOCK_SHIFT), dest_base, (int)(dest_base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- for (i = 0L; i < size; ++i) {
+ //printf("core_copy %d(%d) %d(%d) %d(%d)\n", src_base, src_base >> BLOCK_PARAS_SHIFT, dest_base, dest_base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i) {
core_block_mem[dest_base + i] = core_block_mem[src_base + i];
- core_block_mem[src_base + i] = 0xaa;
+ core_block_mem[src_base + i] = 0xaaaaaaaa;
}
}
-void core_copy_up(long src_limit, long dest_limit, long size) {
- long i;
+void core_copy_up(int src_limit, int dest_limit, int paras) {
+ int i;
- //printf("core_copy_up %ld(%d) %ld(%d) %ld(%d)\n", src_limit, (int)(src_limit >> BLOCK_SHIFT), dest_limit, (int)(dest_limit >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- size = -size;
- for (i = -1L; i >= size; --i) {
+ //printf("core_copy_up %d(%d) %d(%d) %d(%d)\n", src_limit, src_limit >> BLOCK_PARAS_SHIFT, dest_limit, dest_limit >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ paras = -paras;
+ for (i = -1; i >= paras; --i) {
core_block_mem[dest_limit + i] = core_block_mem[src_limit + i];
- core_block_mem[src_limit + i] = 0xaa;
+ core_block_mem[src_limit + i] = 0xaaaaaaaa;
}
}
#endif /* ! INDIRECT_CORE */
#ifndef INDIRECT_SWAP
-void swap_copy(long src_base, long dest_base, long size) {
- long i;
+void swap_copy(int src_base, int dest_base, int paras) {
+ int i;
- //printf("swap_copy %ld(%d) %ld(%d) %ld(%d)\n", src_base, (int)(src_base >> BLOCK_SHIFT), dest_base, (int)(dest_base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- for (i = 0; i < size; ++i) {
+ //printf("swap_copy %d(%d) %d(%d) %d(%d)\n", src_base, src_base >> BLOCK_PARAS_SHIFT, dest_base, dest_base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i) {
swap_block_mem[dest_base + i] = swap_block_mem[src_base + i];
- swap_block_mem[src_base + i] = 0xaa;
+ swap_block_mem[src_base + i] = 0xaaaaaaaa;
}
}
-void swap_copy_up(long src_limit, long dest_limit, long size) {
- long i;
+void swap_copy_up(int src_limit, int dest_limit, int paras) {
+ int i;
- //printf("swap_copy_up %ld(%d) %ld(%d) %ld(%d)\n", src_limit, (int)(src_limit >> BLOCK_SHIFT), dest_limit, (int)(dest_limit >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- size = -size;
- for (i = -1; i >= size; --i) {
+ //printf("swap_copy_up %d(%d) %d(%d) %d(%d)\n", src_limit, src_limit >> BLOCK_PARAS_SHIFT, dest_limit, dest_limit >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ paras = -paras;
+ for (i = -1; i >= paras; --i) {
swap_block_mem[dest_limit + i] = swap_block_mem[src_limit + i];
- swap_block_mem[src_limit + i] = 0xaa;
+ swap_block_mem[src_limit + i] = 0xaaaaaaaa;
}
}
#endif /* ! INDIRECT_SWAP */
-void core_to_swap_copy(long src_base, long dest_base, long size) {
- long i;
+void core_to_swap_copy(int src_base, int dest_base, int paras) {
+ int i;
- //printf("core_to_swap_copy %ld(%d) %ld(%d) %ld(%d)\n", src_base, (int)(src_base >> BLOCK_SHIFT), dest_base, (int)(dest_base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- for (i = 0; i < size; ++i)
- rassert(swap_block_mem[dest_base + i] == 0xaa);
- memcpy(swap_block_mem + dest_base, core_block_mem + src_base, size);
- memset(core_block_mem + src_base, 0xaa, size);
+ //printf("core_to_swap_copy %d(%d) %d(%d) %d(%d)\n", src_base, src_base >> BLOCK_PARAS_SHIFT, dest_base, dest_base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i)
+ rassert(swap_block_mem[dest_base + i] == 0xaaaaaaaa);
+ memcpy(
+ swap_block_mem + dest_base,
+ core_block_mem + src_base,
+ paras * sizeof(int)
+ );
+ memset(core_block_mem + src_base, 0xaa, paras * sizeof(int));
}
-void swap_to_core_copy(long src_base, long dest_base, long size) {
- long i;
+void swap_to_core_copy(int src_base, int dest_base, int paras) {
+ int i;
- //printf("swap_to_core_copy %ld(%d) %ld(%d) %ld(%d)\n", src_base, (int)(src_base >> BLOCK_SHIFT), dest_base, (int)(dest_base >> BLOCK_SHIFT), size, (int)((size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT));
- for (i = 0; i < size; ++i)
- rassert(core_block_mem[dest_base + i] == 0xaa);
- memcpy(core_block_mem + dest_base, swap_block_mem + src_base, size);
- memset(swap_block_mem + src_base, 0xaa, size);
+ //printf("swap_to_core_copy %d(%d) %d(%d) %d(%d)\n", src_base, src_base >> BLOCK_PARAS_SHIFT, dest_base, dest_base >> BLOCK_PARAS_SHIFT, paras, (paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
+ for (i = 0; i < paras; ++i)
+ rassert(core_block_mem[dest_base + i] == 0xaaaaaaaa);
+ memcpy(
+ core_block_mem + dest_base,
+ swap_block_mem + src_base,
+ paras * sizeof(int)
+ );
+ memset(swap_block_mem + src_base, 0xaa, paras * sizeof(int));
}
int main(int argc, char **argv) {
char buf[256];
#endif
bool result;
- long actual_old_size;
+ int actual_old_paras;
int old_blocks, blocks, actual_old_blocks;
int swap_base, swap_blocks;
- long swap_size;
+ int swap_paras;
int core_base, core_blocks;
- long core_size;
+ int core_paras;
if (argc < 5) {
printf(
#else /* INDIRECT_CORE */
core_init(n_core_blocks, core_table_blocks);
#endif /* INDIRECT_CORE */
- core_block_mem = malloc((long)n_core_blocks << BLOCK_SHIFT);
+ core_block_mem = malloc(n_core_blocks * (BLOCK_PARAS * sizeof(int)));
rassert(core_block_mem);
- memset(core_block_mem, 0xaa, (long)n_core_blocks << BLOCK_SHIFT);
+ memset(core_block_mem, 0xaa, n_core_blocks * (BLOCK_PARAS * sizeof(int)));
#ifndef INDIRECT_SWAP
swap_init(n_swap_blocks);
#else /* INDIRECT_SWAP */
swap_init(n_swap_blocks, swap_table_blocks);
#endif /* INDIRECT_SWAP */
- swap_block_mem = malloc((long)n_swap_blocks << BLOCK_SHIFT);
+ swap_block_mem = malloc(n_swap_blocks * (BLOCK_PARAS * sizeof(int)));
rassert(swap_block_mem);
- memset(swap_block_mem, 0xaa, (long)n_swap_blocks << BLOCK_SHIFT);
+ memset(swap_block_mem, 0xaa, n_swap_blocks * (BLOCK_PARAS * sizeof(int)));
process_init(n_processes, spare);
for (i = 0; i < n_processes; ++i)
- processes[i].size = -1L;
+ processes[i].paras = -1;
while (true) {
//printf("avail %d %d(%d) %d(%d)\n", process_avail, CORE_AVAIL, core_table.avail, SWAP_AVAIL, swap_table.avail);
test.type = PROCESS_TEST_TYPE_ALLOC;
rassert(
scanf(
- "%d %ld %s",
+ "%d %d %s",
&test.process,
- &test.size,
+ &test.paras,
buf
) == 3
);
rassert(test.process >= 0 && test.process < n_processes);
- rassert(test.size >= 0);
+ rassert(test.paras >= 0);
if (strcmp(buf, "false") == 0)
test.success = false;
else if (strcmp(buf, "true") == 0)
test.type = PROCESS_TEST_TYPE_REALLOC;
rassert(
scanf(
- "%d %ld %ld %s",
+ "%d %d %d %s",
&test.process,
- &test.old_size,
- &test.size,
+ &test.old_paras,
+ &test.paras,
buf
) == 4
);
rassert(test.process >= 0 && test.process < n_processes);
- rassert(test.old_size >= 0);
- rassert(test.size >= 0);
+ rassert(test.old_paras >= 0);
+ rassert(test.paras >= 0);
if (strcmp(buf, "false") == 0)
test.success = false;
else if (strcmp(buf, "true") == 0)
}
else if (strcmp(buf, "free") == 0) {
test.type = PROCESS_TEST_TYPE_FREE;
- rassert(scanf("%d %ld", &test.process, &test.old_size) == 2);
+ rassert(scanf("%d %d", &test.process, &test.old_paras) == 2);
rassert(test.process >= 0 && test.process < n_processes);
- rassert(test.old_size >= 0);
+ rassert(test.old_paras >= 0);
}
else
rassert(false);
switch (test.type) {
case PROCESS_TEST_TYPE_ALLOC:
printf(
- "alloc %d %ld %s\n",
+ "alloc %d %d %s\n",
test.process,
- test.size,
+ test.paras,
test.success ? "true" : "false"
);
- rassert(processes[test.process].size == -1L);
- result = process_alloc(processes + test.process, test.size);
+ rassert(processes[test.process].paras == -1);
+ result = process_alloc(processes + test.process, test.paras);
printf(
"... %s\n",
result == test.success ?
if (!test.success) {
printf("... undo\n");
process_free(processes + test.process);
- processes[test.process].size = -1L;
+ processes[test.process].paras = -1;
}
else {
core_base = processes[test.process].core_item.base;
- blocks = (int)((test.size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ blocks = (test.paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
assert(
processes[test.process].core_item.limit ==
core_base + blocks
printf("new core [%d,%d)\n", core_base, core_base + blocks);
core_hash_init(
test.process,
- (long)core_base << BLOCK_SHIFT,
- test.size,
- 0L
+ core_base << BLOCK_PARAS_SHIFT,
+ test.paras,
+ 0
);
printf("new swap [%d,%d)\n", processes[test.process].swap_item.base, processes[test.process].swap_item.limit);
}
break;
case PROCESS_TEST_TYPE_REALLOC:
printf(
- "realloc %d %ld %ld %s\n",
+ "realloc %d %d %d %s\n",
test.process,
- test.old_size,
- test.size,
+ test.old_paras,
+ test.paras,
test.success ? "true" : "false"
);
- if (processes[test.process].size == -1L)
+ if (processes[test.process].paras == -1)
printf("... not allocated, ignore\n");
else {
core_base = processes[test.process].core_item.base;
- actual_old_size = processes[test.process].size;
+ actual_old_paras = processes[test.process].paras;
actual_old_blocks =
- (int)((actual_old_size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ (actual_old_paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
rassert(
processes[test.process].core_item.limit ==
core_base + actual_old_blocks
);
- old_blocks = (int)((test.old_size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ old_blocks = (test.old_paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
if (actual_old_blocks != old_blocks) {
printf(
"... old blocks %d, should be %d\n",
printf("old core [%d,%d) swap [%d,%d)\n", core_base, core_base + actual_old_blocks, processes[test.process].swap_item.base, processes[test.process].swap_item.limit);
core_hash_verify(
test.process,
- ((long)core_base << BLOCK_SHIFT) + test.size,
- actual_old_size - test.size,
- test.size
+ (core_base << BLOCK_PARAS_SHIFT) + test.paras,
+ actual_old_paras - test.paras,
+ test.paras
);
- result = process_realloc(processes + test.process, test.size);
+ result = process_realloc(processes + test.process, test.paras);
printf(
"... %s\n",
result == test.success ?
if (result) {
if (!test.success) {
printf("... undo\n");
- rassert(process_realloc(processes + test.process, actual_old_size));
+ rassert(process_realloc(processes + test.process, actual_old_paras));
}
else {
core_base = processes[test.process].core_item.base;
- blocks = (int)((test.size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ blocks = (int)((test.paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT);
rassert(
processes[test.process].core_item.limit ==
core_base + blocks
printf("new core [%d,%d) swap [%d,%d)\n", core_base, core_base + blocks, processes[test.process].swap_item.base, processes[test.process].swap_item.limit);
core_hash_init(
test.process,
- ((long)core_base << BLOCK_SHIFT) + actual_old_size,
- test.size - actual_old_size,
- actual_old_size
+ (core_base << BLOCK_PARAS_SHIFT) + actual_old_paras,
+ test.paras - actual_old_paras,
+ actual_old_paras
);
}
}
break;
case PROCESS_TEST_TYPE_RUN:
printf("run %d\n", test.process);
- if (processes[test.process].size == -1L)
+ if (processes[test.process].paras == -1)
printf("... not allocated, ignore\n");
else {
process_run(processes + test.process);
}
break;
case PROCESS_TEST_TYPE_FREE:
- printf("free %d %ld\n", test.process, test.old_size);
- if (processes[test.process].size == -1L)
+ printf("free %d %d\n", test.process, test.old_paras);
+ if (processes[test.process].paras == -1)
printf("... not allocated, ignore\n");
else {
actual_old_blocks =
- (int)((processes[test.process].size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ (processes[test.process].paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
old_blocks =
- (int)((test.old_size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT);
+ (test.old_paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
if (actual_old_blocks != old_blocks) {
printf(
"... old blocks %d, should be %d\n",
assert(processes + test.process != victim);
core_base = processes[test.process].core_item.base;
core_blocks = processes[test.process].core_item.limit - core_base;
- core_size = processes[test.process].size;
+ core_paras = processes[test.process].paras;
swap_base = -1;
swap_blocks = 0;
- swap_size = 0L;
+ swap_paras = 0;
}
else {
if (processes + test.process == victim) { // victim
#else /* INDIRECT_CORE */
core_blocks = victim->core_item.limit - core_base - victim_swap_blocks;
#endif /* INDIRECT_CORE */
- core_size = core_blocks << BLOCK_SHIFT;
+ core_paras = core_blocks << BLOCK_PARAS_SHIFT;
swap_base = victim->swap_item.limit - victim_swap_blocks;
swap_blocks = victim_swap_blocks;
- swap_size = victim->size - core_size;
+ swap_paras = victim->paras - core_paras;
}
else { // fully in swap
core_base = -1;
core_blocks = 0;
- core_size = 0L;
+ core_paras = 0;
swap_base = processes[test.process].swap_item.base;
swap_blocks = processes[test.process].swap_item.limit - swap_base;
- swap_size = processes[test.process].size;
+ swap_paras = processes[test.process].paras;
}
}
rassert(core_blocks + swap_blocks == actual_old_blocks);
fflush(stdout);
core_hash_verify(
test.process,
- (long)core_base << BLOCK_SHIFT,
- core_size,
+ core_base << BLOCK_PARAS_SHIFT,
+ core_paras,
0
);
swap_hash_verify(
test.process,
- (long)swap_base << BLOCK_SHIFT,
- swap_size,
- core_size
+ swap_base << BLOCK_PARAS_SHIFT,
+ swap_paras,
+ core_paras
);
process_free(processes + test.process);
- processes[test.process].size = -1L;
+ processes[test.process].paras = -1;
printf("... ok\n");
}
break;
#endif
printf("final state:\n");
for (i = 0; i < n_processes; ++i) {
- if (processes[i].size == -1L)
+ if (processes[i].paras == -1)
printf("process %d: not allocated\n", i);
else {
if (processes[i].lru_item.prev != NULL) { // fully in core
assert(processes + i != victim);
core_base = processes[i].core_item.base;
core_blocks = processes[i].core_item.limit - core_base;
- core_size = processes[i].size;
+ core_paras = processes[i].paras;
swap_base = -1;
swap_blocks = 0;
- swap_size = 0L;
+ swap_paras = 0;
}
else {
if (processes + i == victim) { // victim
#else /* INDIRECT_CORE */
core_blocks = victim->core_item.limit - core_base - victim_swap_blocks;
#endif /* INDIRECT_CORE */
- core_size = core_blocks << BLOCK_SHIFT;
+ core_paras = core_blocks << BLOCK_PARAS_SHIFT;
swap_base = victim->swap_item.limit - victim_swap_blocks;
swap_blocks = victim_swap_blocks;
- swap_size = victim->size - core_size;
+ swap_paras = victim->paras - core_paras;
}
else { // fully in swap
core_base = -1;
core_blocks = 0;
- core_size = 0L;
+ core_paras = 0;
swap_base = processes[i].swap_item.base;
swap_blocks = processes[i].swap_item.limit - swap_base;
- swap_size = processes[i].size;
+ swap_paras = processes[i].paras;
}
}
rassert(
core_blocks + swap_blocks ==
- (int)((processes[i].size + (BLOCK_SIZE - 1)) >> BLOCK_SHIFT)
+ (processes[i].paras + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT
);
printf(
"process %d: core [%d,%d) swap [%d,%d)\n",
);
core_hash_verify(
i,
- (long)core_base << BLOCK_SHIFT,
- core_size,
+ core_base << BLOCK_PARAS_SHIFT,
+ core_paras,
0
);
#ifdef INDIRECT_CORE
#endif /* INDIRECT_CORE */
swap_hash_verify(
i,
- (long)swap_base << BLOCK_SHIFT,
- swap_size,
- core_size
+ swap_base << BLOCK_PARAS_SHIFT,
+ swap_paras,
+ core_paras
);
#ifdef INDIRECT_SWAP
block_pool_free(
rassert(core_block_pool.bitmap[j] == (uint8_t)~(-1 << k));
}
#endif /* INDIRECT_CORE */
- j = n_core_blocks << BLOCK_SHIFT;
+ j = n_core_blocks << BLOCK_PARAS_SHIFT;
for (i = 0; i < j; ++i)
- rassert(core_block_mem[i] == 0xaa);
+ rassert(core_block_mem[i] == 0xaaaaaaaa);
#ifdef INDIRECT_SWAP
for (i = 0; i < swap_table_blocks; ++i)
rassert(swap_table_mem[i] == 0x55555555);
rassert(swap_block_pool.bitmap[j] == (uint8_t)~(-1 << k));
}
#endif /* INDIRECT_SWAP */
- j = n_swap_blocks << BLOCK_SHIFT;
+ j = n_swap_blocks << BLOCK_PARAS_SHIFT;
for (i = 0; i < j; ++i)
- rassert(swap_block_mem[i] == 0xaa);
+ rassert(swap_block_mem[i] == 0xaaaaaaaa);
return 0;
}