Changeset 4841104 in mainline


Ignore:
Timestamp:
2005-09-23T20:44:35Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
adecf496
Parents:
23443b2
Message:

Physical memory management work.
Add "attribute ((packed))" to frame_t so that it takes up less space.
Note that this is essential as there is lot of these structures.
Remove busy list from zone_t as it is redundant.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/mm/frame.h

    r23443b2 r4841104  
    4545        frame_t *frames;        /**< array of frame_t structures in this zone */
    4646        link_t free_head;       /**< list of free frame_t structures */
    47         link_t busy_head;       /**< list of busy frame_t structures */
    4847        count_t free_count;     /**< number of frame_t structures in free list */
    49         count_t busy_count;     /**< number of frame_t structures in busy list */
     48        count_t busy_count;     /**< number of frame_t structures not in free list */
    5049        int flags;
    5150};
    5251
    5352struct frame {
    54         count_t refcount;       /**< when > 0, the frame is in busy list, otherwise the frame is in free list */
    55         link_t link;            /**< link either to frame_zone free or busy list */
    56 };
     53        count_t refcount;       /**< when == 0, the frame is in free list */
     54        link_t link;            /**< link to zone free list when refcount == 0 */
     55} __attribute__ ((packed));
    5756
    5857extern spinlock_t zone_head_lock;       /**< this lock protects zone_head list */
  • src/main/main.c

    r23443b2 r4841104  
    3636#include <proc/thread.h>
    3737#include <proc/task.h>
    38 #include <mm/vm.h>
    3938#include <main/kinit.h>
    4039#include <cpu.h>
    41 #include <mm/heap.h>
    4240
    4341#ifdef __SMP__
     
    4947
    5048#include <arch/mm/memory_init.h>
     49#include <mm/heap.h>
    5150#include <mm/frame.h>
    5251#include <mm/page.h>
    5352#include <mm/tlb.h>
     53#include <mm/vm.h>
     54
    5455#include <synch/waitq.h>
    5556
  • src/mm/frame.c

    r23443b2 r4841104  
    116116        frame->refcount++;
    117117        list_remove(tmp);                       /* remove frame from free_head */
    118         list_append(tmp, &zone->busy_head);     /* append frame to busy_head */
    119118        zone->free_count--;
    120119        zone->busy_count++;
     
    181180
    182181        if (!--frame->refcount) {
    183                 list_remove(&frame->link);                      /* remove frame from busy_head */
    184182                list_append(&frame->link, &zone->free_head);    /* append frame to free_head */
    185183                zone->free_count++;
     
    196194 *
    197195 * Find respective frame structrue for supplied addr.
    198  * Increment frame reference count and move the frame structure to busy list.
     196 * Increment frame reference count and remove the frame structure from free list.
    199197 *
    200198 * @param addr Address of the frame to be marked. It must be a multiple of FRAME_SIZE.
     
    242240
    243241                list_remove(&frame->link);                      /* remove frame from free_head */
    244                 list_append(&frame->link, &zone->busy_head);    /* append frame to busy_head */
    245242                zone->free_count--;
    246243                zone->busy_count++;
     
    314311
    315312                z->busy_count = 0;
    316                 list_initialize(&z->busy_head);
    317313               
    318314                z->frames = (frame_t *) malloc(cnt * sizeof(frame_t));
Note: See TracChangeset for help on using the changeset viewer.