[go: up one dir, main page]

Menu

[8bf46b]: / io / simdisk_file.h  Maximize  Restore  History

Download this file

161 lines (136 with data), 3.8 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#ifndef SIMDISK_HEADER
#define SIMDISK_HEADER
/***************************************************************************
* simdisk_file.h
*
* Sat Aug 24 23:55:03 2002
* Copyright 2002 Roman Dementiev
* dementiev@mpi-sb.mpg.de
****************************************************************************/
#include "ufs_file.h"
#include <math.h>
#ifdef BOOST_MSVC
// mmap call does not exist in Windows
#else
#include <sys/mman.h>
__STXXL_BEGIN_NAMESPACE
//! \addtogroup fileimpl
//! \{
#define AVERAGE_SPEED (15*1024*1024)
class DiskGeometry
{
struct Zone
{
// manufactuted data
// int last_cyl;
// int sect_per_track;
// derived data
int first_sector;
int sectors;
double sustained_data_rate; // in Mb/s
inline Zone (int
_first_sector):first_sector (_first_sector)
{
}; // constructor for zone search
inline Zone ( //int _last_cyl,
//int _sect_per_track,
int _first_sector,
int _sectors, double _rate):
//last_cyl(_last_cyl),
// sect_per_track(_sect_per_track) ,
first_sector (_first_sector),
sectors (_sectors),
sustained_data_rate (_rate)
{
};
};
struct ZoneCmp
{
inline bool operator () (const Zone & a, const Zone & b) const
{
return a.first_sector < b.first_sector;
};
};
protected:
int nsurfaces;
int bytes_per_sector;
double cmd_ovh; // in s
double seek_time; // in s
double rot_latency; // in s
double head_switch_time; // in s
double cyl_switch_time; // in s
double revolution_time; // in s
double interface_speed; // in byte/s
std::set < Zone, ZoneCmp > zones;
void add_zone (int &first_cyl, int last_cyl,
int sec_per_track, int &first_sect);
public:
inline DiskGeometry ()
{
}
double get_delay (stxxl::int64 offset, size_t size); // returns delay in s
inline ~DiskGeometry ()
{
};
};
class IC35L080AVVA07:public DiskGeometry // IBM series 120GXP
{
public:
IC35L080AVVA07 ();
};
class sim_disk_request;
//! \brief Implementation of disk emulation
//! \remark It is emulation of IBM IC35L080AVVA07 disk's timings
class sim_disk_file:public ufs_file_base, public IC35L080AVVA07
{
public:
//! \brief constructs file object
//! \param filename path of file
//! \attention filename must be resided at memory disk partition
//! \param mode open mode, see \c stxxl::file::open_modes
//! \param disk disk(file) identifier
inline sim_disk_file (const std::string & filename, int mode,int disk):ufs_file_base (filename, mode, disk)
{
std::cout << "Please, make sure that '" << filename <<
"' is resided on swap memory partition!" <<
std::endl;
};
request_ptr aread(void *buffer, stxxl::int64 pos, size_t bytes,
completion_handler on_cmpl);
request_ptr awrite(void *buffer, stxxl::int64 pos, size_t bytes,
completion_handler on_cmpl);
void set_size (stxxl::int64 newsize);
};
//! \brief Implementation of disk emulation
class sim_disk_request:public ufs_request_base
{
friend class sim_disk_file;
protected:
inline sim_disk_request (sim_disk_file * f, void *buf, stxxl::int64 off,
size_t b, request_type t,
completion_handler on_cmpl):
ufs_request_base (f,
buf,
off,
b,
t,
on_cmpl)
{
};
void serve ();
public:
inline const char *io_type ()
{
return "simdisk";
};
private:
// Following methods are declared but not implemented
// intentionnaly to forbid their usage
sim_disk_request(const sim_disk_request &);
sim_disk_request & operator=(const sim_disk_request &);
sim_disk_request();
};
//! \}
__STXXL_END_NAMESPACE
#endif
#endif