Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

types-and-constants.hh

Go to the documentation of this file.
00001 
00011 // ===================================================================
00012 // Avoid multiple inclusion.
00013 #if !defined (_TYPES_AND_CONSTANTS_HH)
00014 #define _TYPES_AND_CONSTANTS_HH
00015 // ===================================================================
00016 
00017 
00018 
00019 // ===================================================================
00020 // INCLUDES
00021 #include <hash_map.h>
00022 #include <list.h>
00023 // ===================================================================
00024 
00025 
00026 
00027 // ===================================================================
00028 // FORWARD DECLARATIONS
00029 
00030 struct Task;
00031 struct Process;
00032 // ===================================================================
00033 
00034 
00035 
00036 // ===================================================================
00037 // TYPES
00038 
00041 typedef char tag_t;
00042 
00044 typedef unsigned long long int timestamp_t;
00045 
00047 typedef unsigned long int virtual_address_t;
00048 
00050 typedef unsigned short int length_t;
00051 
00058 typedef unsigned long int context_ID_t;
00059 
00067 typedef unsigned long int virtual_page_ID_t;
00068 
00070 typedef unsigned long int canonical_page_ID_t;
00071 
00073 typedef unsigned short int task_ID_t;
00074 
00076 typedef unsigned int process_ID_t;
00077 
00080 typedef unsigned long int inode_ID_t;
00081 
00084 typedef unsigned short int device_ID_t;
00085 
00087 typedef unsigned long int shm_ID_t;
00088 
00091 typedef unsigned long int offset_t;
00092 
00094 typedef unsigned long long int file_offset_t;
00095 
00098 typedef char page_type_t;
00099 // ===================================================================
00100 
00101 
00102 
00103 // ===================================================================
00104 // CONSTANTS
00105 
00107 #define BUFFER_SIZE 256
00108 
00114 #define PAGE_SIZE_ORDER 12;
00115  
00116 // Valid reference trace tags.
00117 #define TAG_USER_READ                'r'
00118 #define TAG_KERNEL_READ              'R'
00119 #define TAG_USER_WRITE               'w'
00120 #define TAG_KERNEL_WRITE             'W'
00121 #define TAG_USER_INSTRUCTION_FETCH   'i'
00122 #define TAG_KERNEL_EVENT             'K'
00123 #define TAG_KERNEL_INSTRUCTION_FETCH 'I'
00124 
00125 // Valid kernel trace tags.
00126 #define TAG_SCHEDULE                 'S'
00127 #define TAG_FORK                     'F'
00128 #define TAG_EXEC                     'X'
00129 #define TAG_EXIT                     'T'
00130 #define TAG_CONTEXT_ASSIGNMENT       'A'
00131 #define TAG_DUPLICATE_RANGE          'D'
00132 #define TAG_MMAP_FILE                'M'
00133 #define TAG_MMAP_ANONYMOUS           'm'
00134 #define TAG_MUNMAP                   'U'
00135 #define TAG_COMPLETE_UNMAP           'u'
00136 #define TAG_IPC_SHMAT                's'
00137 #define TAG_IPC_SHMDT                'd'
00138 #define TAG_COW_UNMAP                'C'
00139 #define TAG_BUFFER_ALLOCATION        'B'
00140 #define TAG_BUFFER_DEALLOCATION      'b'
00141 #define TAG_FILE_CACHE_ALLOCATION    'P'
00142 #define TAG_FILE_CACHE_DEALLOCATION  'p'
00143 #define TAG_FILE_OPEN                '('
00144 #define TAG_FILE_CLOSE               ')'
00145 #define TAG_FILE_READ                '<'
00146 #define TAG_FILE_WRITE               '>'
00147 #define TAG_FILE_DELETE              '-'
00148 #define TAG_ACCEPT                   'a'
00149 #define TAG_END_OF_TRACE             'e'
00150 
00151 // Page types, used to know what is underlying each canonical page.
00152 
00159 #define TYPE_ANONYMOUS                   'A'
00160 
00162 #define TYPE_FILE_CACHE                  'F'
00163 
00166 #define TYPE_IPC_SHM_SEGMENT             'S'
00167 
00176 #define TYPE_ZERO_PAGE                   'Z'
00177 
00179 #define TYPE_BUFFER_CACHE                'B'
00180 
00188 #define KERNEL_CONTEXT 0x101
00189 
00191 #define KERNEL_PROCESS_ID 0
00192 
00195 #define KERNEL_VIRTUAL_PAGE_OFFSET 0xc0000
00196 
00206 #define KERNEL_CANONICAL_PAGE_OFFSET 0xfffc0000
00207 // ===================================================================
00208 
00209 
00210 
00211 // ===================================================================
00212 // STRUCTURES AND MAP TYPES
00213 
00216 struct virtual_page_s {
00217 
00218   context_ID_t context_ID;
00219   virtual_page_ID_t page_ID;
00220 
00221 };
00222 
00225 struct canonical_page_s {
00226 
00227   canonical_page_ID_t page; 
00228   unsigned int reference_count; 
00229   page_type_t type; 
00230   shm_ID_t shm_ID; 
00233 };
00234 
00236 struct file_ID_s {
00237 
00238    device_ID_t major; 
00239    device_ID_t minor; 
00240    inode_ID_t inode_ID; 
00242 };
00243 
00246 struct equal_virtual_page_ID_s {
00247   bool operator() (const virtual_page_ID_t x,
00248        const virtual_page_ID_t y) const {
00249     return (x == y);
00250   }
00251 };
00252 
00255 typedef hash_map<virtual_page_ID_t,
00256      canonical_page_s*,
00257      hash<virtual_page_ID_t>,
00258      equal_virtual_page_ID_s> virtual_to_canonical_map_t;
00259 
00262 struct equal_task_ID_s {
00263   bool operator() (const task_ID_t x, const task_ID_t y) {
00264     return (x == y);
00265   }
00266 };
00267 
00270 struct equal_context_ID_s {
00271   bool operator() (const context_ID_t x, const context_ID_t y) const {
00272     return (x == y);
00273   }
00274 };
00275 
00278 struct equal_file_ID_s {
00279   bool operator() (const file_ID_s& x, const file_ID_s& y) const {
00280     return ((x.major == y.major) &&
00281       (x.minor == y.minor) &&
00282       (x.inode_ID == y.inode_ID));
00283   }
00284 };
00285 
00288 struct equal_shm_ID_s {
00289   bool operator() (const shm_ID_t x, const shm_ID_t y) const {
00290     return (x == y);
00291   }
00292 };
00293 
00300 struct file_ID_hash_s {
00301 
00302   size_t operator() (const file_ID_s& id) const {
00303 
00304     // Treat the value as a sequence of bytes, forming a hash from a
00305     // calculation borrowed from the strings hashing function in the
00306     // STL code itself.
00307     unsigned long int h = 0;
00308     char* s = (char*)&id;
00309     for (unsigned int i = 0; i < sizeof(file_ID_s); i++) {
00310       h = (5 * h) + *s;
00311       s++;
00312     }
00313 
00314     return (size_t)h;
00315   }
00316 
00317 };
00318 
00321 typedef hash_map<task_ID_t,
00322      bool,
00323      hash<task_ID_t>,
00324      equal_task_ID_s> live_map_t;
00325 
00328 typedef hash_map<file_ID_s,
00329      virtual_to_canonical_map_t*,
00330      file_ID_hash_s,
00331      equal_file_ID_s> file_ID_to_V2C_map_t;
00332 
00335 typedef hash_map<shm_ID_t,
00336      virtual_to_canonical_map_t*,
00337      hash<shm_ID_t>,
00338      equal_shm_ID_s> shm_ID_to_V2C_map_t;
00339 
00342 typedef hash_map<shm_ID_t,
00343      bool,
00344      hash<shm_ID_t>,
00345      equal_shm_ID_s> defunct_shm_ID_map_t;
00346 
00348 typedef hash_map<task_ID_t,
00349      Task*,
00350      hash<task_ID_t>,
00351      equal_task_ID_s> task_ID_to_Task_map_t;
00352 
00354 typedef hash_map<context_ID_t,
00355      Process*,
00356      hash<context_ID_t>,
00357      equal_context_ID_s> context_ID_to_Process_map_t;
00358 
00361 struct reference_record_s {
00362 
00363   tag_t tag; 
00364   timestamp_t cycle_timestamp; 
00366   timestamp_t instruction_timestamp; 
00368   timestamp_t reference_timestamp; 
00370   length_t length; 
00371   virtual_address_t virtual_address; 
00373   virtual_page_s virtual_page; 
00375 };
00376 
00383 struct kernel_record_s {
00384 
00385   tag_t tag; 
00386   timestamp_t cycle_timestamp; 
00388   task_ID_t task_ID;  
00390   task_ID_t parent_task_ID; 
00393   context_ID_t context_ID; 
00395   context_ID_t duplicate_context_ID; 
00399   virtual_page_ID_t starting_page; 
00401   virtual_page_ID_t ending_page; 
00404   file_ID_s file_ID; 
00406   virtual_page_ID_t file_starting_page; 
00409   virtual_page_ID_t file_ending_page; 
00412   shm_ID_t shm_ID; 
00414   char filename[BUFFER_SIZE]; 
00420 };
00421 // ===================================================================
00422 
00423 
00424 
00425 // ===================================================================
00426 #endif // _TYPES_AND_CONSTANTS_HH
00427 // ===================================================================

Generated on Fri Jan 31 10:33:35 2003 for Laplace-merge by doxygen1.3-rc2