#ifndef INDIRECT_CORE
// remove from core pool
pool_free(&core_table, &process->core_item);
-#endif /* ! INDIRECT_CORE */
process->flags &= ~PROCESS_FLAGS_CORE_ITEM;
+#endif /* ! INDIRECT_CORE */
victim = &lru_head;
swap_out -= blocks;
process->lru_item.next->prev = &process->lru_item;
// track total allocation
+#ifndef INDIRECT_CORE
process->flags = PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM;
+#else /* INDIRECT_CORE */
+ process->flags = PROCESS_FLAGS_ACTIVE;
+#endif /* INDIRECT_CORE */
process->para = para;
process->paras = paras;
process->swap_blocks = 0;
bool process_realloc(struct process *process, int paras, bool dir) {
int old_blocks, para, blocks, blocks_change;
- // must be already allocated and fully in core
- assert(
- (process->flags & (PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM)) ==
- (PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM)
- );
- assert(process->lru_item.prev != NULL && process->swap_blocks == 0);
+ // must be already allocated
+ assert(process->flags & PROCESS_FLAGS_ACTIVE);
+
+ // must be fully in core
+#ifndef INDIRECT_CORE
+ assert(process->flags & PROCESS_FLAGS_CORE_ITEM);
+#endif /* ! INDIRECT_CORE */
+ assert(process->swap_blocks == 0);
// check blocks
old_blocks = process->swap_item.limit - process->swap_item.base;
// see whether fully in core
if (process->lru_item.prev != NULL) {
+#ifndef INDIRECT_CORE
assert(process->flags & PROCESS_FLAGS_CORE_ITEM);
+#endif /* INDIRECT_CORE */
assert(process->swap_blocks == 0);
// yes, remove from LRU list
// loop entry code for case of fully in swap
if (victim != &process->lru_item) {
+#ifndef INDIRECT_CORE
assert((process->flags & PROCESS_FLAGS_CORE_ITEM) == 0);
+#endif /* ! INDIRECT_CORE */
assert(
process->swap_blocks ==
process->swap_item.limit - process->swap_item.base
POOL_ALLOC_MODE_MOVEABLE
)
);
-#endif /* ! INDIRECT_CORE */
process->flags |= PROCESS_FLAGS_CORE_ITEM;
+#endif /* ! INDIRECT_CORE */
goto loop_entry_full;
}
assert(process->swap_blocks);
// remove from LRU list
if (victim == &process->lru_item)
victim = &lru_head;
- if (process->lru_item.prev != NULL) {
+ if (process->lru_item.prev) {
process->lru_item.prev->next = process->lru_item.next;
process->lru_item.next->prev = process->lru_item.prev;
}