Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> プロトコルスタックのLinuxのリンク層上のデータ伝送

プロトコルスタックのLinuxのリンク層上のデータ伝送

  
 

<<プリズンブレイク>>第三四半期の第五のエピソードは、最終的には後半待望の、その驚くべき知恵とscofidで再び日保存したが、どのように彼は刑務所の悪をSONAますそれをエスケープ? I /Oメモリマッピングの予備知識:I :-)コミュニケーションの目的を達成するためにバインドされ、私たちはこのことを知りませんが、我々は、ネットワークドライバは、このインタフェースの物理層&'を介してデータパケットを取得する方法であるのLinuxを分析することができ、刑務所&'。制御バス、バス状態およびCPUを介してデータバスに接続された装置。制御転送制御信号の総数は、例えば、ネットワークカードを有効にします。例えば、データの伝送カードをデータ送信を制御するためのデータバスは、状態の総数は、一般に、そのような読み取りカードのMACアドレスとして、デバイスの現在のステータスが読み出されます。従来の動作では、読み出した値は、デバイス・レジスタによって達成されます。しかし、これは、CPUのクロックを消費します。各レジスタの値が低い効率を生じる、デバイスを読み取る必要がかかり。現代でオペレーティングシステム
。 I /Oメモリマッピングを引用しています。すなわち、メインメモリ、レジスタの値は、ボディをマッピングしました。デバイスレジスタの動作は、大幅に効率を向上させる、メインメモリの動作に変換します。これは、データ処理装置のDMAに関する一つの方法です。従来の処理方法であって、デバイスがデータを受信し、CPUに通知割り込み。 CPUの割り込み処理、メモリへのデータ。現代のオペレーティングシステムで導入されたDMAは、CPUが再び割り込みを発生し、データを受信するデバイスは、データがDMAメモリに入れている、ことを意味します。これは現代のオペレーティングシステムでのソフト割り込みとNAPIに多くのCPU時間を節約し、割り込み処理速度がますます厳しくなってきました。それは二つの部分、すなわち、上半分と下半分に分割されている割り込みに応答して。割り込みに応じて、データ処理キューの上半分を押します。そして、スケジュールの下半分で残りのタスクを完了します。 NAPIは、新しい概念を導入し2.6である、それは割り込み禁止、中断の時点で起こりました。次に、データを処理します。デバイスのクエリによって処理すべきデータがある場合はその後、特定の時間に、それが主導権を握るだろう。 I /O、DMAは、コードのその後の分析に実装linux2.6.21に説明します。 NAPI詳細な知識とソフト割り込みは、分析の時点で割り込み処理、およびあなたの十時五十八ます:ネットワークカードのドライバから言えば。実施例におけるIntel 100M NICドライバは、パケットフローの送信の概要を受信します。コードを参照してください(ドライバ/ネット/e100.c)カードは、PCIデバイスは、平均的なPCIデバイスの登録への登録が全く異なるとされていない属しています。静的INT __init e100_init_module(ボイド){IF(((1<<デバッグ) - 1)&#038; NETIF_MSG_DRV){のprintk(KERN_INFO PFX"%sは、%S \\ N" DRV_DESCRIPTION、DRV_VERSION)のprintk(KERN_INFO PFX"%S \\ N" DRV_COPYRIGHT);} //登録PCIreturnのpci_module_init(&#038; e100_driver);} e100_driverがpci_driver.static構造体pci_driver e100_driver = {//NICドライバ名対応.nameの= DRV_NAMEに対応し、 e100_id_table = .id_table //マッチタイプ、//検出機能.probe = e100_probe、//関数を削除し、この関数は、.remove = __devexit_p(e100_remove)デバイスが除去されたとき、#IFDEF CONFIG_PM.suspend = e100_suspend呼ばれます。 = e100_resumeを再開し、#endifの}

の合計数はPCIデバイスはデバイスの初期化、e100_probe呼ばれるe100_id_tableパラメータに準拠しています検出にe100_probeに始まったとき:静的int型__devinit e100_probe(構造体pci_dev * PDEV、constの構造体pci_device_idの*のENT){構造体net_device * NETDEV、構造体NIC * NIC; INT ERR; //は、イーサネットインターフェイスの//alloc_etherdev net_device net_device分布関数を割り当て、割り当てます。 {もしあれば、それはalloc_netdevラッパー関数である(;<((1<デバッグ) - 1)&#038; NETIF_MSG_PROBE)(!(NETDEV = alloc_etherdev(はsizeof(構造体NIC))))のprintk(KERN_ERR PFX" EtherdevのALLOCが失敗しました。); \\ N"アボート-ENOMEMを返す;}の関数ポインタの

//初期値NETDEV netdev->開く= e100_open; netdev-> netdev-> = e100_closeを停止します。 //ツール支持ethtoolの; hard_start_xmit = e100_xmit_frame; netdev-> get_statsの=のe100_get_stats; netdev-> set_multicast_list = e100_set_multicast_list; netdev-> set_mac_address = e100_set_mac_address; netdev-> change_mtu = e100_change_mtu; netdev-> do_ioctl = e100_do_ioctl有効SET_ETHTOOL_OPS(NETDEV、&#038; e100_ethtool_ops); netdev-> tx_timeout = e100_tx_timeout; netdev-> watchdog_timeo = E100_WATCHDOG_PERIOD; //ポーリング機能netdev->投票= e100_poll; netdev->重量= E100_NAPI_WEIGHT; CONFIG_NET_POLL_CONTROLLERnetdevの#ifdef - > poll_controller = e100_netpoll;#endifの//net_deviceプライベートデータ領域を取得し、その割り当て

//プライベートデータサイズがあるalloc_ etherdev()パラメータ指定NIC = netdev_priv(NETDEV); nic-> NETDEV = NETDEV; nic-> PDEV = PDEV; nic-> = msg_enable(&1 LT;<デバッグ) - 1; pci_set_drvdata(PDEV 、NETDEV);((ERR = pci_enable_device(PDEV))){DPRINTK(PROBE場合//開始DMA後カードの準備、I /Oメモリは、制御をマッピングし、それが実際にPCIに割り当てられている//レジスタ達成しました。 )、ERR、&\\ n"を中止、;.はPCIデバイスを有効にできないQUOT。

Copyright © Windowsの知識 All Rights Reserved