DVDドライブのSATAデータケーブルに問題があると、Windows 8.1のドライブにアクセスしないプログラムで問題が発生する可能性がありますか?

JRAH

Windows 8.1ワークステーションの1つで非常に奇妙な問題と解決策がありましたが、自分の解決策で問題がどのように解決されたかがわかりません。

これはワークステーションです:

  • Windows 8.1 x64
  • AMD Athlon x64 x2 5200+ 2.7GHz
  • 4GB DDR2 RAM
  • NG1DB-M25Biostarマザーボード
  • 1TB Western Digital HDD
  • DVDドライブ(ブランドは不明)

ご覧のとおり、ハードドライブとDVDドライブを除いてかなり古いハードウェアです(おそらく古いですが、最近まで使用されていなかったので、そのまま入れました)。

ユーザーの説明からは完全に理解できないことが起こった後(おそらくスリープモードに関係するもの)、ワークステーションは修復ループに入りました。そこでは、ロードするだけではセーフモードで起動することさえできませんでした。自分自身を修復しようとし始めます。

私は一日中優先度の高いもので忙しかったので、それを実行したままにして翌日は正常に起動しましたが、Windows Updateを開こうとするとウィンドウが開きますが、情報が読み込まれず、エクスプローラーを再起動するまでハングします。別のプログラムにも問題があり、そのプログラムがハングする原因になりました。

私は最初にDISM.exe /Online /Cleanup-image /RestorehealthSFCを試しましたどちらも機能しなかったので、先に進んで再フォーマットすることにしました。DVDを入れて起動しようとすると、Windowsは、取り外し可能なストレージが原因で問題が発生したというエラー画面(コードや正確な表現を今は思い出せません)が表示されました。USBドライブがないので、DVDドライブに関連している必要があると思いました。SATAデータケーブルを切り替えたところ、ワークステーションは完全に機能しており、再フォーマットなどの必要はありません。

それがどのように問題を解決したかを合計することはできません。最後まで、DVDドライブにアクセスされていなかったため、問題の原因はありませんでした。SATAケーブルを交換することでこれらすべてが修正される理由を誰かが知っていますか、それとも偶然であり、何か他のことが起こった可能性がありますか?

phyrfox

ハードウェアに障害が発生すると、さまざまな症状が発生する可能性があります。最も可能性が高いのは死のブルースクリーンですが、より少ない症状も同じように簡単に現れる可能性があります。明らかに無関係なプログラムがハードウェアによってどのように影響を受けるかをよりよく理解するには、オペレーティングシステムモデルを検討してください。

ユーザーソフトウェア>カーネル>ハードウェアアブストラクションレイヤー>ハードウェア

CPUやRAMを含め、文字通りあらゆるリソースと対話したいプログラムは、カーネルと連携する必要があります。カーネルは、ハードウェアとの間のさまざまな物理信号をカーネルとの間の論理信号に変換するためにHALに依存します。 。

カーネルには、安定性を「保証」するための特定の制限があります。たとえば、再入可能の制限された機能、スレッドセーフ、リソースの制限などです。特に、ほとんどのハードウェアには共有の概念がありません。これは、HALまたはカーネルドライバーを介してより高いレベルで抽象化されます。

モデムの時代を思い出すと、ダイヤラなど、一度に1つのプログラムしかモデムを使用できませんでした。インターネットは、共通のスタックを作成することでこれを回避しました。インターネットにアクセスしたいすべてのプログラムは、共通のスタックを介してアクセスし、その1つのスタックがハードウェアを排他的に制御していました。スタックは、この1つのリソースを共有するために多重化を生成しました。

現在でも、サウンドカード、ディスクドライブ、ビデオカードなどを物理的に共有することはできません。信号が混乱し、混乱が生じます。HALは、ユーザーをだまして、実際には一度に複数のことが起こっていると思わせるという非常に優れた仕事をします。まだ物理的なボトルネックがありますが、ハードウェアが意図したとおりに機能している場合、通常は気づきません。

ただし、問題の核心にたどり着くために、HALがデバイスとの通信に問題がある場合、データを何度も再送信または再読み取りしようとしているときにブロックされる可能性があります。また、HALは通常、マルチスレッド化されていないため、一度に1つの要求のみを処理できます(ドライバーチェーンごと)。

ディスクドライバがロックされている場合は、不良ドライブを読み取ろうとします。たとえば、同様のAPI呼び出しを行おうとする他のプログラムは、ブロックされた呼び出しの背後のキューにあり、そのプログラムがハングする可能性があります。ドライブがロックされている間もUIの応答性を維持できるため、マルチスレッドプログラムではこの問題は発生しません。残念ながら、ほとんどのプログラムはマルチスレッドではありません

Windowsの多くのプログラムは、基本的に次のようにループに入ります。

while(GetMessage(&msg, hWnd, NULL, NULL)) {
    DispatchMessage(&msg);
}

ご想像のとおり、スレッドは1つだけです。ハングしたドライブから読み取ろうとすると、ドライブが最終的にタイムアウトするまで回復できません。そうでない場合、そのプログラムはOSのAPIに翻弄されます。ただし、マルチスレッドの場合でも、UIスレッドはこれを検出して回復/中止することができますが、ドライブ読み取りスレッドはロックされます。

問題を悪化させるために、メモリを割り当てたり、ドライブやファイルを開いたりするなど、多くのAPI呼び出しは、すべて呼び出しをブロックしています。これにより、現在のスレッドは、OSが要求を完了するか、タイムアウトのために中止するまで、(特定のタイムアウト値を要求しない限り)無期限に待機します。ほとんどのプログラムは、OSに非常に長い時間がかかるとは想定していないため、タイムアウトを指定しないでください。ドライブが応答しない場合、これらのプログラムは回復しません。

「故障したドライブにアクセスしない」プログラムの場合、必ずしもアクセスする必要はありません。必要なのは、不良ドライブによって現在ブロックされている関数を呼び出すことだけです。たとえば、不良DVDドライブでOpenFileが呼び出された場合、他のファイル要求は、システムドライブからの読み取りのみであったとしても、DVDドライブがタイムアウトするまでハングする可能性があります。

たぶん、プログラムはGetOpenFileNameを呼び出します。これは、スレッドが戻るまでスレッドの制御を引き継ぐOSレンダリングされたダイアログを表示します。そのウィンドウには、ドライブのリストを列挙することにより、システム上のすべてのドライブが一覧表示されます。APIが不良ドライブでハングした場合、最終結果は同じです。ダイアログボックスがフリーズし、アプリケーション全体がフリーズし、このドライブが使用可能/解放されるのを待ちます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ