Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/minix/servers/pm/alloc.c

    r14 r9  
    6868 * needed for FORK or EXEC.  Swap other processes out if needed.
    6969 */
    70   register struct hole *hp, *prev_ptr, *best, *prev_best;
    71   int delta=-1;
     70  register struct hole *hp, *prev_ptr;
    7271  phys_clicks old_base;
     72
    7373  do {
    7474        prev_ptr = NIL_HOLE;
    75         hp = hole_head;
    76         while (hp != NIL_HOLE && hp->h_base < swap_base) {
    77                 printf("base:%d len:%d (req:%d)\n", hp->h_base, hp->h_len, clicks);
    78                 if (hp->h_len == clicks) {
    79                         /* We found a hole that is big enough.  Use it. */
    80                         old_base = hp->h_base;  /* remember where it started */
    81                         hp->h_base += clicks;   /* bite a piece off */
    82                         hp->h_len -= clicks;    /* ditto */
    83                         /* Remember new high watermark of used memory. */
    84                         if(hp->h_base > high_watermark)
    85                                 high_watermark = hp->h_base;
    86                         /* Delete the hole if used up completely. */
    87                         if (hp->h_len == 0) del_slot(prev_ptr, hp);
    88                         /* Return the start address of the acquired block. */
    89                         printf("Allocazione 'perfetta'\n");
    90                         return(old_base);
    91                 if (hp->h_len > clicks) {
    92                         if (hp->h_len - clicks < delta || delta == -1){
    93                                 delta = hp->h_len - clicks;
    94                                 best = hp;
    95                                 prev_best = prev_ptr;
    96                         }
    97                 prev_ptr = hp;
    98                 hp = hp->h_next;
    99         if (delta > -1){
    100            printf("Allocazione con delta=%d\n",delta);
    101            old_base = best->h_base;     /* remember where it started */
    102            best->h_base += clicks;      /* bite a piece off */
    103            best->h_len -= clicks;       /* cioe` delta */
    104            /* Remember new high watermark of used memory. */
    105            if(best->h_base > high_watermark)
    106                 high_watermark = best->h_base;
    107            /* Delete the hole if used up completely. */
    108            if (best->h_len == 0) printf("Non dovrebbe mai succedere\n");
    109            /* Return the start address of the acquired block. */
    110            return(old_base);
    111   } while (swap_out());         /* try to swap some other process out */
     75        hp = hole_head;
     76        while (hp != NIL_HOLE && hp->h_base < swap_base) {
     77                if (hp->h_len >= clicks) {
     78                        /* We found a hole that is big enough.  Use it. */
     79                        old_base = hp->h_base;  /* remember where it started */
     80                        hp->h_base += clicks;   /* bite a piece off */
     81                        hp->h_len -= clicks;    /* ditto */
     82
     83                        /* Remember new high watermark of used memory. */
     84                        if(hp->h_base > high_watermark)
     85                                high_watermark = hp->h_base;
     86
     87                        /* Delete the hole if used up completely. */
     88                        if (hp->h_len == 0) del_slot(prev_ptr, hp);
     89
     90                        /* Return the start address of the acquired block. */
     91                        return(old_base);
     92                }
     93
     94                prev_ptr = hp;
     95                hp = hp->h_next;
     96        }
     97  } while (swap_out());         /* try to swap some other process out */
    11298  return(NO_MEM);
    11399}
Note: See TracChangeset for help on using the changeset viewer.