Linuxのスカルの欠陥

..スカルはそれがあり、このタスクを処理するためにメモリ割り当てコードを要求したかどうかを決定しなければならないのは、書き込みロジックの深さのあるスカルメモリ管理コードで簡単に見てみましょう。

 

(もし!dptr->データ[s_pos]){

dptr->データ[s_pos] = kmallocの(量子、GFP_KERNEL)。(もし!dptr->データ[s_pos])

後藤アウト。

}

 

同じオフセット独立Schullの同じデバイスを書き込もう(私たちは、「A」、それらを呼び出して、「B」であろう)は、2つのプロセスがあると仮定する。各プロセス同時に上記試験線分場合、最初に到着。場合試験ポインタがNULLで、各プロセスは、メモリの割り当てを決定し、そして各コピーは、2つのプロセスが明らかにのみ割り当てに成功し、同じ位置に割り当てられているからである。[s_pos] DATAT> dptr-ポインタをもたらすであろう。

 

もちろん、割り当てプロセスを完了するために最初の2の発生は、プロセスがその割り当てが、この中で、プロセスBでカバーされるだろう代入する前に、スカルは、単に割り当てられたメモリA忘れるれる場合は、「勝つ」でしょう。...それだけでメモリBを指し、ポインタ。ポインタが、割り当てられていないので、失われ、システムに戻さなくなり。

 

この一連の事象は、競争力の状況を実証することである。競争が制御されていない共有データアクセスの結果である。アクセスモードエラーが不要なもので、その結果、発生した場合。競技の例は、ここで議論し、結果はメモリリークが。これは十分に悪いですが、競争は、多くの場合、システムのクラッシュやデータの破損につながる。プログラマが競争を無視するように誘惑されるかもしれない、万人のイベントで1かなり低い確率事象があるが、コンピュータの世界でそれは数秒ごとに発生し、結果は深刻になります。

 

すぐに我々は競争スカルを削除しますが、最初にすべての私たちは、より一般的な同時見直しを行う必要があります。

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11141633.html