0

__sock_create()カーネルの内部機構をよりよく理解するためにコードを調べていたところ、カーネルがtry_module_get()2 回呼び出していることがわかりました。ここにスニペットがあります:

static int __sock_create(struct net *net, int family, int type, int protocol, struct socket **res, int kern)
{
   sock = sock_alloc();
   ...
   if (!try_module_get(pf->owner))
      goto out_release;

   err = pf->create(net, sock, protocol);
   ...

   if (!try_module_get(sock->ops->owner))
      goto out_module_busy

   ...
}

基本的に、ソケット関連のコールバックがモジュール内にある場合socket()、ユーザー空間からのすべてのコールバックがモジュールの参照カウントを 2 回増加させます。そのような行動の根拠は何ですか?

4

1 に答える 1

1

2 つのモジュールがあるため、2 つの参照カウントのインクリメントがあります。1 つはパケット ファミリ モジュール、2 番目はソケット型モジュールです。

http://www.haifux.org/lectures/217/netLec5.pdfを参照してください

于 2012-12-19T16:15:24.867 に答える