Linux核心--16.Linux数据结构
原著: David A Rusling翻译: Banyan & fifa
第十五章
Linux核心数据结构
本章列出了Linux实用的主要数据结构。
block_dev_struct
此结构用于向核心登记块设备,它还被buffer
cache实用。所有此类结构都位于blk_dev数组中。
struct
blk_dev_struct
{
void
(*request_fn)(void);
struct
request
*
current_request;
struct
request
plug;
struct
tq_struct
plug_tq;
};
buffer_head
此结构包含关于buffer
cache中一块缓存的信息。
/*
bh
state
bits
*/
#define
BH_Uptodate
0
/*
1
if
the
buffer
contains
valid
data
*/
#define
BH_Dirty
1
/*
1
if
the
buffer
is
dirty
*/
#define
BH_Lock
2
/*
1
if
the
buffer
is
locked
*/
#define
BH_Req
3
/*
0
if
the
buffer
has
been
invalidated
*/
#define
BH_Touched
4
/*
1
if
the
buffer
has
been
touched
(aging)
*/
#define
BH_Has_aged
5
/*
1
if
the
buffer
has
been
aged
(aging)
*/
#define
BH_Protected
6
/*
1
if
the
buffer
is
protected
*/
#define
BH_FreeOnIO
7
/*
1
to
discard
the
buffer_head
after
IO
*/
struct
buffer_head
{
/*
First
cache
line:
*/
unsigned
long
b_blocknr;
/*
block
number
*/
kdev_t
b_dev;
/*
device
(B_FREE
=
free)
*/
kdev_t
b_rdev;
/*
Real
device
*/
unsigned
long
b_rsector;
/*
Real
buffer
location
on
disk
*/
struct
buffer_head
*b_next;
/*
Hash
queue
list
*/
struct
buffer_head
*b_this_page;
/*
circular
list
of
buffers
in
one
page
*/
/*
Second
cache
line:
*/
unsigned
long
b_state;
/*
buffer
state
bitmap
(above)
*/
struct
buffer_head
*b_next_free;
unsigned
int
b_count;
/*
users
using
this
block
*/
unsigned
long
b_size;
/*
block
size
*/
/*
Non-performance-critical
data
follows.
*/
char
*b_data;
/*
pointer
to
data
block
*/
unsigned
int
b_list;
/*
List
that
this
buffer
appears
*/
unsigned
long
b_flushtime;
/*
Time
when
this
(dirty)
buffer
*
should
be
written
*/
unsigned
long
b_lru_time;
/*
Time
when
this
buffer
was
*
last
used.
*/
struct
wait_queue
*b_wait;
struct
buffer_head
*b_prev;
/*
doubly
linked
hash
list
*/
struct
buffer_head
*b_prev_free;
/*
doubly
linked
list
of
buffers
*/
struct
buffer_head
*b_reqnext;
/*
request
queue
*/
};
device
系统中每个网络设备都用一个设备数据结构来表示。
struct
device
{
/*
*
This
is
the
first
field
of
the
"visible"
part
of
this
structure
*
(i.e.
as
seen
by
users
in
the
"Space.c"
file).
It
is
the
name
*
the
inte易做图ce.
*/
char
*name;
/*
I/O
specific
fields
*/
unsigned
long
rmem_end;
/*
shmem
"recv"
end
*/
unsigned
long
rmem_start;
/*
shmem
"recv"
start
*/
unsigned
long
mem_end;
/*
shared
mem
end
*/
unsigned
long
mem_start;
/*
shared
mem