Class: Resilience::SystemTable

Inherits:
Object
  • Object
show all
Includes:
OnImage
Defined in:
lib/resilience/tables/system.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from OnImage

#image, image, included, restore_pos, #restore_pos, store_pos, #store_pos

Constructor Details

#initializeSystemTable



11
12
13
# File 'lib/resilience/tables/system.rb', line 11

def initialize
  @pages = []
end

Instance Attribute Details

#pagesObject

Returns the value of attribute pages.



9
10
11
# File 'lib/resilience/tables/system.rb', line 9

def pages
  @pages
end

Class Method Details

.first_page_addressObject



21
22
23
# File 'lib/resilience/tables/system.rb', line 21

def self.first_page_address
  PAGES[:first] * PAGE_SIZE
end

.parseObject



15
16
17
18
19
# File 'lib/resilience/tables/system.rb', line 15

def self.parse
  table = new
  table.parse_pages
  table
end

Instance Method Details

#parse_pagesObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/resilience/tables/system.rb', line 25

def parse_pages
  image.seek(self.class.first_page_address + ADDRESSES[:system_table_page])
  system_table_page    = image.read(8).unpack('Q').first
  system_table_address = system_table_page * PAGE_SIZE 

  image.seek(system_table_address + ADDRESSES[:system_pages])
  num_system_pages = image.read(4).unpack('L').first

  0.upto(num_system_pages-1) do
    system_page_offset = image.read(4).unpack('L').first
    pos = image.pos

    image.seek(system_table_address + system_page_offset)
    system_page = image.read(8).unpack('Q').first
    @pages << system_page

    image.seek(pos)
  end
end