Changeset 20d50a1 in mainline for generic/src/proc


Ignore:
Timestamp:
2006-01-13T13:02:45Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f9425006
Parents:
0369911
Message:

Memory management work.

  • vm.* → as.* (as like address space is, imho, more fitting)
  • Don't do TLB shootdown on vm_install(). Some architectures only need to call tlb_invalidate_asid().
  • Don't allocate all frames for as_area in as_area_create(), but let them be allocated on-demand by as_page_fault().
  • Add high-level page fault handler as_page_fault().
  • Add as_area_load_mapping().
Location:
generic/src/proc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • generic/src/proc/scheduler.c

    r0369911 r20d50a1  
    3333#include <mm/frame.h>
    3434#include <mm/page.h>
    35 #include <mm/vm.h>
     35#include <mm/as.h>
    3636#include <arch/asm.h>
    3737#include <arch/faddr.h>
     
    353353         */
    354354        if (TASK != THREAD->task) {
    355                 vm_t *m1 = NULL;
    356                 vm_t *m2;
     355                as_t *as1 = NULL;
     356                as_t *as2;
    357357
    358358                if (TASK) {
    359359                        spinlock_lock(&TASK->lock);
    360                         m1 = TASK->vm;
     360                        as1 = TASK->as;
    361361                        spinlock_unlock(&TASK->lock);
    362362                }
    363363
    364364                spinlock_lock(&THREAD->task->lock);
    365                 m2 = THREAD->task->vm;
     365                as2 = THREAD->task->as;
    366366                spinlock_unlock(&THREAD->task->lock);
    367367               
    368368                /*
    369                  * Note that it is possible for two tasks to share one vm mapping.
    370                  */
    371                 if (m1 != m2) {
    372                         /*
    373                          * Both tasks and vm mappings are different.
     369                 * Note that it is possible for two tasks to share one address space.
     370                 */
     371                if (as1 != as2) {
     372                        /*
     373                         * Both tasks and address spaces are different.
    374374                         * Replace the old one with the new one.
    375375                         */
    376                         vm_install(m2);
     376                        as_install(as2);
    377377                }
    378378                TASK = THREAD->task;   
  • generic/src/proc/task.c

    r0369911 r20d50a1  
    2929#include <proc/thread.h>
    3030#include <proc/task.h>
    31 #include <mm/vm.h>
     31#include <mm/as.h>
    3232#include <mm/heap.h>
    3333
     
    5555 * Create new task with no threads.
    5656 *
    57  * @param m Task's virtual memory structure.
     57 * @param as Task's address space.
    5858 *
    5959 * @return New task's structure on success, NULL on failure.
    6060 *
    6161 */
    62 task_t *task_create(vm_t *m)
     62task_t *task_create(as_t *as)
    6363{
    6464        ipl_t ipl;
     
    7070                list_initialize(&ta->th_head);
    7171                list_initialize(&ta->tasks_link);
    72                 ta->vm = m;
     72                ta->as = as;
    7373               
    7474                ipl = interrupts_disable();
  • generic/src/proc/the.c

    r0369911 r20d50a1  
    4343        the->thread = NULL;
    4444        the->task = NULL;
    45         the->vm = NULL;
     45        the->as = NULL;
    4646}
    4747
Note: See TracChangeset for help on using the changeset viewer.