当前位置:操作系统 > Unix/Linux >>

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

  
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,