00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __address_space_h
00009 #define __address_space_h
00010
00011 #include <system/config.h>
00012 #include <mmu.h>
00013 #include <segment.h>
00014
00015 __BEGIN_SYS
00016
00017 class Address_Space
00018 {
00019 private:
00020 typedef Traits<Address_Space> Traits;
00021 static const Type_Id TYPE = Type<Address_Space>::TYPE;
00022
00023 typedef CPU::Phy_Addr Phy_Addr;
00024 typedef CPU::Log_Addr Log_Addr;
00025 typedef MMU::Directory Directory;
00026
00027 public:
00028 Address_Space() {
00029 db<Address_Space>(TRC) << "Address_Space(_dir=" << &_dir << ")\n";
00030 }
00031 ~Address_Space() {
00032 db<Address_Space>(TRC) << "~Address_Space(_dir=" << &_dir << ")\n";
00033 }
00034
00035
00036 Log_Addr attach(Segment & seg, Log_Addr addr = 0U) {
00037 db<Address_Space>(TRC) << "Address_Space::attach(seg=" << &seg
00038 << ",addr=" << addr << ")\n";
00039
00040 return _dir.attach(seg.chunk(), addr);
00041 }
00042 void detach(Segment & seg) {
00043 db<Address_Space>(TRC) << "Address_Space::detach(seg=" << &seg
00044 << ")\n";
00045
00046 _dir.detach(seg.chunk());
00047 }
00048
00049 Phy_Addr physical(Log_Addr address) {
00050 return _dir.physical(address);
00051 }
00052
00053 static int init(System_Info * si);
00054
00055 private:
00056 Directory _dir;
00057 };
00058
00059 __END_SYS
00060
00061 #endif
00062
00063
00064
00065