パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Windows XP SP2の欠陥にロシア企業が独自パッチ」記事へのコメント

  • もし Windows が i386 のセグメンテーション機能をフルに使っていたら実行禁止とかはセグメント毎に設定できるから最初から何も問題は発生しなかった、と思うんですがどうでしょうか? OS の設計やってる世界の人から見るとセグメンテーションという考え方はすでに古いのですか?

    昔のミニコンや OS/2 はセグメンテーションを使っていたと思うんですが、なにかディスアドバンテージがあったからフラットなメモリモデルが主流になったんでしょうか?
    --
    屍体メモ [windy.cx]
    • by Anonymous Coward on 2005年02月02日 19時41分 (#687959)
      i386のセグメンテーションを「使えるレベルで活用」しようとすると
      1桁遅いクロックになっているんじゃぁないかと思うくらい
      パフォーマンスが落ちます。

      インテルに言っても”そんなはずはない!”って
      取り合ってもらえませんでしたが、代理店さん
      の技術の人は’目をつぶってください。’
      って言ってました。
      親コメント
      • i386 のセグメンテーションを活用すると遅くなる、ということは、結局セグメントディスクリプタのロードが遅いってことなんでしょうかね。

        そういや仮想86モードも遅かったよなぁ。でも仮想86モードの場合はことあるごとにリング間遷移が頻発しているし、それで遅いんだと思ってました。

        単にせっかくの機能を使わないのはもったいないなぁ、って貧乏性なだけなんですけどね。使わないならその機能削ってダイサイズ小さくするとかすりゃいいのになぁ、なんて思った次第。
        --
        屍体メモ [windy.cx]
        親コメント
        • by Anonymous Coward on 2005年02月02日 20時20分 (#687984)
          フラットアドレスで使用しても別々のアドレスを設定してもディスクリプタのロード回数は(アーキテクチャ的に別のことをやらない限り)変わらないはずなので、そういうことではないんじゃないかなぁ、と思います。元コメントの方がどのような使い方をしたのか書いていないのでなんともいえない部分がありますが。

          仮想86モード(Livingdeadさんは理解していると思いますが、知らない方のために念のために書いておくと、仮想86モードはプロテクトモード内に含まれるサブモードのひとつです)が遅いのはそのとおりだと思います。割り込みが発生した際にリング遷移が起こったり、I/OポートアクセスごとにTSS32のテーブルを確認したり、アドレス変換のためにページテーブルを見たりといった要因も関連しているでしょう(もちろん、これは仮想86モードがプロテクトモードで動くリング0の管理下にある1つのタスクでしかないからこういう設計になっているわけで、無駄なことではありません)。

          親コメント
        • セグメント機構を使うととても遅くなるというのはよくわかりましたが、
          より高速なCPUを搭載したPCの需要が増えるので、CPUやPCメーカーとしては望むところだと思うのですけれど…

          最近のWindowsやLinuxデスクトップのような、どうでもい
          • 安全性のために実行禁止フラグ見るようにしたんだけど、そこにバグがあったという話じゃないの?

            > より高速なCPUを搭載したPCの需要が増えるので、CPUやPCメーカーとしては望むところだと思うのですけれど…
            新しいCPUを「より安全なCPU」ってことで売ることはできるかもしれません。
            (一般にはあまり知られてない機能みたいだけど)
      • by Anonymous Coward on 2005年02月02日 20時13分 (#687976)
        「使えるレベルで活用」というのがわかりませんが、タスク単位(TSS32)で普通にセグメント情報を設定して切り替えて使う分には、フラットアドレスを使おうがそうでなかろうが速度は変わらないと思います。というわけで、インテルが「そんなはずはない!」っていったというのはうなづけます。

        具体的にどのような使い方が「使えるレベルで活用」なのでしょうか?

        親コメント
    • セグメントが使える(事実上専用)のコンパイラを使わないとセグメントが違ったときにポインタを関数に渡すと渡ったポインタが明後日を差す。とかね。つかセグメントの代わりにそういう実行保護するのがDEPなんじゃねーか?
      # バッファオーバーフローはスタックが普通とは逆に下から上に伸びるようにするだけでほとんどは回避できる。はずなんだが...
      親コメント
    • by Anonymous Coward on 2005年02月02日 17時19分 (#687885)
      • i386系(いわゆるIA-32)専用にカーネルを設計しているわけではない。
      • セグメントを管理しつつページを管理するのは激しく面倒。
      • そもそもAMD64/EM64Tの64bitモードには(メモリアドレス変換という意味での)セグメントはない。そして他アーキテクチャも普通に無かったりする。

      とかとか。ちょっと考えるといろいろと出てきそうです。

      親コメント
    • セグメンテーションを使用すると信じられないぐらいプログラムサイズがでかく、遅くなることがあります。

      最重要データの保護の為に別セグメント(物理的にはメインメモリと同じRAM)にデータを置いただけで、2割ぐらい大きくなって、キャッシュをOFFにしたかと思うぐらいに遅かったことがありました。タスクのCPU時間の消費を見ると1割少々から9割を越えてました。
      仕方ないのでローカルにコピーして更新して書き戻すことになってしまいました。なんだか、ディスクにアクセスしているみたいな感じです。
      実際は、キャッシュが有効に働かない状況を作っていたかもしれませんけど。
      親コメント

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

処理中...