ブート ストラップ と は。 古典・エミッタ接地+ブートストラップ

追加のソフトウェアをインストールするためのブートストラップアクションの作成

ブート ストラップ と は

ある勝率と期待値をもつBOTが、実際にある一定期間でどのくらいの運用成績を得られるか?を判断するのは非常に難しい問題です。 とくに定額ではなく定率(複利)でトレードをする場合、なおさら予測は困難になります。 例えば、ある売買ロジックでBOTを運用した結果、1年間で以下のような結果が得られたとします。 実成績でもバックテストの結果でも構いません。 0% 手数料合計 : -273098円 これは実際にあるパラメータで1時間足のチャネルブレイクアウトBOTを(口座のリスク率2%)で動かした場合の運用成績の例です。 疑問 この結果だけを見ると最終成績は良好に見えます。 1年間で3倍以上になっていますから。 しかし問題なのは、 『この最終成績390%という数字はどの程度、運が良かった結果なのか?』という情報が、最終成績の数字を見てもよくわからない点にあります。 仮に勝率20. 5%、期待値1. 06%(平均利益10%、平均損失-1. 3%)という結果の元となる確率分布が、今後も続くと信じることを前提にしても、161回の試行で390%という運用成績が果たしてどのくらい「ありうる」ことなのか? かなり運が良かったのか、それとも期待値通りの平凡な結果だったのか、潜在的にどのくらいドローダウンリスクがあったのか? この数字だけではわかりません。 今回の記事では、判断の目安として、得られたリターンのサンプルから何度も復元抽出(リサンプリング)をして、ありえた最終成績のシミュレーションをするを紹介します。 ブートストラップ法(復元抽出) ブートストラップ法とは、1度だけしか抽出できないサンプルを再利用して大量のトレード結果を疑似的に生成するモンテカルロシミュレーションです。 数学が得意でないので、厳密な定義はわかりませんが、多分そんな感じです。 この方法の優れたところは、リターンがどんな確率分布に従うのかわからない(正規分布などでモデル化できない)場合でも、実際のサンプルから好きなだけ疑似的なトレード結果を生成できることです。 復元抽出(=1度選んだ玉をバケツに戻す方式)なので、実際にありえる値の中から実際にありえる頻度(確率)に近い形でリターンを選んで、それを使って異なる結果をシミュレーションすることができます。 もちろん同じサンプルを何度も使ってるだけなので、何万回も試行を繰り返せば同じ分布になります。 ですが、1年間の成績(161回のトレード)という少ない試行回数の制限の中では、どの程度、結果がバラつく可能性があったかをシミュレーションできます。 pythonコード ブートストラップ法のイメージを掴むために、疑似的なトレード結果のサンプルを合計25セットほど作成してその結果をグラフにしてみましょう。 135,15. 292,-1. 133,-1. 02,-1. 843,-2. 156,-0. 794,-1. 107,-1. 083,-0. 031,-1. 068,28. 578,-1. 034,-1. 547,-0. 599,7. 268,-1. 419,-0. 417,-2. 124,-1. 076,-1. 109,-1. 172,1. 587,-1. 981,-1. 087,41. 402,-1. 122,-1. 09,2. 864,-1. 089,7. 148,3. 553,-2. 005,-1. 972,-2. 023,-1. 865,-1. 085,-1. 092,-1. 096,-1. 079,0. 169,7. 34,4. 487,6. 202,-1. 068,-1. 079,-0. 852,-1. 234,1. 611,-2. 103,0. 805,-1. 13,-1. 084,0. 782,-1. 286,-1. 215,-1. 285,14. 745,-1. 112,-1. 074,-1. 17,-1. 251,-1. 133,-1. 258,-1. 3,-1. 219,-1. 54,-1. 213,-1. 296,-0. 761,-1. 169,-1. 176,-1. 507,-0. 509,-0. 538,-1. 212,-0. 798,22. 072,40. 899,-1. 802,-1. 051,-2. 005,-1. 056,-1. 574,-1. 059,2. 483,-1. 657,3. 692,14. 52,-1. 598,-1. 039,-2. 046,-1. 062,-1. 394,-1. 955,-1. 13,-1. 038,-1. 106,-1. 077,-1. 216,-2. 013,13. 119,-1. 114,-1. 134,-1. 178,-0. 287,-1. 059,-1. 112,-1. 151,-1. 501,0. 696,-2. 151,-1. 174,-1. 236,-1. 319,-1. 206,-1. 496,-1. 202,12. 396,-1. 14,0. 541,-1. 133,22. 143,-1. 593,-2. 306,-1. 196,-1. 131,0. 01,-1. 16,-2. 036,-2. 2,-1. 103,1. 774,-0. 634,-1. 143,-0. 973,-1. 93,13. 559,0. 187,-1. 796,-1. 816,-2. 214,-0. 033,-2. 169,-2. 207,-1. 051,-1. 095,-2. 146,-0. 44,4. 444,-1. 131,-1. 112,-1. 134,5. 13,-1. 066,-1. 092,35. 116,-2. 012,-1. 027,-2. 018,-0. 996 まずは上記のように、実際のトレードまたはバックテストで得られたリターンの結果(161個)を羅列して1つのcsvに保存します。 ここでは仮に return. csv で保存したとします。 次に以下のようなコードをpythonファイルで保存して、読み込みます。 genfromtxt ". format average plt. grid plt. array random. title "リターンの分布と頻度" plt. format average plt. grid plt. xlabel "復元抽出した平均リターンの分布" plt. ylabel "頻度" plt. legend plt. show 上記のコードは、ブートストラップ法によって生成した疑似トレード161回の結果を合計25セット生成し、その勝率、平均リターン、ヒストグラムを図にするコードです。 それを1セットとします。 N はブートストラップ法で何セット疑似サンプルを生成するかを指定する数字です。 欲しいだけいくらでもデータを生成できます。 実際、あとで10万セット生成して運用パフォーマンスをシミュレーションする例を紹介します。 実行結果 このように25セットの疑似データを生成することができました。 同じサンプル(実際のトレード結果)から再抽出してるので、どれもパッと見では似たようなリターン分布になっています。 左上の4個を拡大したものが以下です。 しかし実際には、以下の出力を見るとわかるように、勝率には13. 7%~27. 48%~1. 以下は 疑似生成した25セットのトレード結果の平均リターンをヒストグラムにしたものです。 赤い線は、 161回のトレードの平均リターンを25回採取したものの平均値(=つまり平均リターンの平均)です。 このように25回ほどシミュレーションを繰り返してみた結果、大体どの場合でも平均リターンは一応プラスになりそうだということ、年間161回という少ない試行の中では、運が悪ければ勝率が13%程度ということもありえた、ということ、などが想像できます。 25回のシミュレーションでは、1番低い平均リターンは +0. 資産カーブをグラフ化する それでは次に、いよいよ知りたかった「最終的な運用パフォーマンスにどのくらいのバラつきがありえたのか?」を検証してみましょう。 ブートストラップ法で疑似的に生成したトレード結果を最初の資金に適用して、最終資金のシミュレーションをします。 なお注意点として、ここで用いる「リターン」のサンプルが、証拠金利回りの数字になっていることを確認してください。 この数字を用いないと、初期資金とリターンを掛け合わせた結果が最終的な資金と一致しません。 単なるリターンと証拠金利回りの違いはこちらの記事で解説しています。 grid for i in range N : plt. legend plt. show これを実行すると以下のようになります。 「太い黒線」が実際のトレード(バックテスト)で得られた資産カーブです。 たった25回のシミュレーション結果を見るだけでも、最終資金は、50万円~300万円以上まで幅広くバラついているのがわかります。 運が悪ければ、ほとんど資産が増えなかったケースもあり得たかもしれません。 ちなみに1000回ほどシミュレーションすると以下のようになります。 10万回シミュレーションする 上記のグラフを見ても、「どのくらいの最終資金になる可能性が高いのか?」「最終資金が50万円(初期資金)を下回る可能性はどのくらいあるのか?」いまいちわかりません。 なので、ブートストラップ法で10万回ほど疑似トレード結果をシミュレーションして最終資金のヒストグラムを作りましょう。 argmax y ] plt. format mode plt. format round median plt. grid plt. xlabel "ブートストラップ法による最終資金の分布(単位:円)" plt. ylabel "確率" plt. legend plt. show 5パーセンタイル値 : 57万1531円(運用成績 114. 3%) 最終資金の最頻値 : 120万0000円(運用成績 240. 0%) 中央値 : 188万0817円(運用成績 376. 1%) 実際の成績は194万円(390)%でしたが、これだけ勝率が低くかつ利益のバラつきが大きい売買ロジックでは、最終資金が120万円(最頻値)~190万円(中央値)くらいに終わってもおかしくなかったことがわかります。 ただし相当運が悪くても初期資金50万円を割る可能性は5%以下とかなり低いようです。 中には最終資金が1000万円を超えるようなシミュレーションもありますが、それは単に勝ちトレードのサンプル数が少ないことが原因です。 復元抽出なので、10万回もテストすれば極端に高い利益を何度も選びなおす可能性もあります。 当然ですが、実際に市場でそのような利益機会が生じた可能性を意味するわけではありません。 一方、「実際の成績よりも悪かった場合」のシミュレーションはそれなりに信憑性があると思います。 もちろん市場の過去データは1通りしかないので、何度サンプルを取り直したところで本当の意味で複数のシミュレーションをすることはできません。 しかし負けトレードの結果はサンプル数も多く分散も小さいので、現実にありえない値を取る可能性は低く、本当の勝率が想定より低かった場合をうまくシミュレーションできます。 また同時に、極端に1回だけ高い利益が出たことで全体の成績が実際より良く見えている場合(外れ値の影響)は、ブートストラップ法で何度もリターンを復元抽出することで、その影響を弱めることができます。 補足:数学的にわかること 上記のような最終資金のモンテカルロシミュレーションの意味を、もう少し一般的に理解するために、少し数学的に考えてみましょう。 トレードの成績をもっとシンプルに、(1)勝率、(2)勝ったときの平均利益、(3)負けたときの平均損失、の3つのパラメーターだけで決まる確率変数と仮定します。 すると最終資金は以下のように決まります。 つまり最終資金は、勝ちトレードの回数によって決まる関数です。 この「勝ちトレードの回数」は、勝率pによって決まる確率変数なので、数学的には以下のような二項分布でモデル化できます。 二項分布という確率分布は、試行回数(N)が十分に大きいとき(勝率が極端に小さくなければ)、正規分布に近似できることが知られています。 () ということは、最初の式に戻ってみると、「勝ち回数」を表す指数の部分(x乗)は正規分布で近似できることがわかります。 指数のところが正規分布に従うような確率変数を、 対数正規分布といいます。 対数正規分布というのは、トレードをしている方の多くが聞いたことがあると思いますが、0を閾値として右側にファットテールになる、以下のような形の確率分布です。 7 plt. linspace stats. lognorm. ppf 0. 01,s , stats. lognorm. ppf 0. 99,s , 100 plt. plot x, stats. lognorm. pdf x,s plt. show さきほどの最終資金のヒストグラムに似ていますね。 このような確率分布の特徴として、最頻値や中央値が平均値よりも小さくなる(左側に偏る)という性質があります。 いわゆる「数少ない一部の人が大勝ちし大半の人は平均より低い成績に偏る」という分布で、年収の分布などと同じです。 つまり、運用するBOTがどのような勝率・期待利益・期待損失を持ってるかに関わらず、基本的には最終資金のグラフの形はこのような感じになる、ということです。 なのでグラフの形状自体に意味はありません。 どのような売買ルールを採用しても多分こうなります。 有益な情報 ではこのブートストラップ法による最終資金のモンテカルロシミュレーションから、どのような情報を得ればいいのでしょうか。 1つは「最終資金のバラつきがどのくらい大きいか?」です。 例えば、同じモンテカルロシミュレーションで、勝率50%、期待利益2%、期待損失1%のBOTの運用をシミュレーションしてみましょう。 すると最終資金は以下のようになります。 このような分布であれば、最終的な資金(運用成績)についてある程度の精度で確信を持つことができそうです。 最頻値 89万8447円 中央値 90万2913円 期待値 91万8696円 次にもっと極端な 勝率10%、期待利益14%、期待損失1%のBOTを考えてみます。 こちらのBOTも期待リターンは同じ(+0. 5%)ですが、最終資金のヒストグラムはもっと歪んだ形になることが予想できます。 中央値はあまり変わりませんが、最頻値はさきほどより遥かに低くなっています。 一方で期待値はかなり大きくなっています。 またさきほどの分布とは異なり、 5パーセンタイル値が40万6381円で原資割れしています。 これは運が悪ければ、初期資金を下回る可能性もあったことを示しています。 最頻値 67万0016円 中央値 94万7437円 期待値 112万0384円 最後のシミュレーションには以下のコードを作りました。 bernoulli.

次の

ブート(ブートストラップ)とは

ブート ストラップ と は

現在ではこの領域は、いろいろなOSが自分のブートコードを自由に書く フリーな領域の如く扱われている。 元来このプログラムは DOSの起動のために作らており、 パーティションテーブルなども、このプログラムの 仕様の一部として設計されている。 つまりここには一切触れずにブートできるようにOS側を設計するべきということになっていた。 マスターブートレコードは、言わば一種の 聖域として位置付けだった訳だ。 しかし、その性質上、 パーティションテーブルは確かに他のOSと共存する上で絶対に侵すことはできなかったが、設計上、ブートストラップローダとパーティションテーブルはきっちりと分かれていた上、ブートストラップローダが マルチブートの機能を一切提供していなかったので、ここにブートストラップローダに単純にマルチブートを機能を追加した 独自のローダをインストールする試みがされた。 性質上、案の定、このプログラムを書き換えても、ブートさえしてしまえば、各OSとも全く不都合がなかったため、多くのOSがこの領域に独自のローダを置くようになった。 更に多くのサードパティのブートローダが登場し、ここに書かれるようになり、今日に至っている。 今ではプログラム領域は自由な領域、パーティションテーブル以降は侵すべからざる聖域という位置付けに事実上なっている訳だ。 ここではそれについての詳細な解説をしていきたいと思う。 よくLinuxのLILOをマスターブートレコードに書いた場合、LILOインストール前の状態に戻すために、 「LILOを消したい」という人がいる。 またSystemCommanderなどのサードパティのブートローダをインストールすると、やはりマスターブートレコードに書かれるので、元の状態に戻すのに、 「ブートローダを消して、アンインストールしたい」という人も見かける。 しかし単にLILOを消してしまったり、SystemCommanderを消してしまって、マスターブートレコードのプログラム領域に何のデータも無くしてしまっては、OSは一切起動不能になってしまう。 従って厳密には、LILOを消したり、SystemCommanderをアンインストールするというのは、マスターブートレコードのプログラム領域に、 もう一度ブートストラップローダを書くということを意味するのだ。 しかし上記のようなことを言う人が多いのは、すなわちブートストラップローダの存在を全く意識していない、知らないといった、一種の誤解をしている人が多いからだ。 そんな空気のような存在なので、これの インストールということも勿論意識している人は非常に少ないと思う。 しかしプログラムだから、決して自然発生する訳はなく、だれかがこれを書いている。 ここでは、どんな時に、誰がこのプログラムを書く(インストールする)のか説明する。 ブートストラップローダのインストールの仕方、及び無意識のうちにインストールされる場面というのは、実は結構沢山あるが、大きく分けて2種類に大別できる。 以下にそれを示す。 必ずブートストラップローダがインストールされる場合• マスターブートレコードにデータがない時のみインストールされる場合• DOSコマンド「FDISK」で領域を作成する。• このうち、1番のAと、2番の各項目が、多くの人が無意識のうちにインストールされる場合だ。 まず、1番の 「 必ずブートストラップローダがインストールされる場合」だが、Windows98などをインストールすると有無も言わさずインストールされる。 これはサードパーティのブートローダの作者からすると、 有名な迷惑仕様で、ローダの説明書は必ず注意事項として書いてある。 大抵のローダは復旧用の手段を用意している。 ブートストラップローダの復旧(インストール)に使われる最も一般的な方法だ。 FDISKコマンドは、Windows9xの起動ディスク、DOS窓、Command Prompt Onlyなどで実行可能だ。 やはりマルチブートをしている人には、Windows9xの起動ディスクは手放せないだろう。 因みに、これらの行為でブートストラップローダがインストールされるのは、その時点で 第1ハードディスクとして認識されているハードディスクのマスターブートレコードのみだ。 2番の 「 マスターブートレコードにデータがない時のみインストールされる場合」の方は、これによってブートストラップローダがインストールされることは殆ど知られてない。 無意識にうちにインストールされる最も典型的な場面だろう。 この 「マスターブートレコードにデータがない」というのは、通常は買ったばかりの まっさらなハードディスクの場合だろうが、厳密には単にマスターブートレコードの最終2バイトの ブートシグニチャが 「 0xAA55」でない場合を言う。 従って、実際にはマスターブートレコードにブートコードやパーティション情報が既に書かれていても、ブートシグニチャが例えば「0xBB55」だったりしたら、FDISKなどのパーティションツールや、OSから、そのマスターブートレコード自体が無効扱いされるので、まっさらの(全て00で埋まっている)状態と同様の扱いになる。 厳密に言うと上記のような仕様だが、通常はおかしなブートシグニチャになることはないはずなので(私のように実験のためにわざと書き換えるなどしない限り)、 「そのハードディスクではじめてパーティションを作る時」と理解してもらっても、特段不都合はないだろう。 またこちらの場合は、 第1ハードディスク以外に領域を作成した場合でも、そのハードディスクのマスターブートレコードにもインストールされる。 FDISKコマンドの実行方法は前述と同じだ。 以前の解説と重複するが、このプログラムの動作概要から書く。 パーティションテーブルの検査 4つのテーブルエントリーを先頭から順に検査し、起動可能な(起動フラグの立った)基本領域がないか探す。 見つかったら、その領域の先頭位置をテーブルから取得する。 BIOSにその位置を示して、当該先頭セクターをメモリーにロードしてもらう。 ロードした先頭セクターに制御を移す。 これを踏まえて、ここではもっと突っ込んだ動作検証をしていく。 まずこのプログラムは非常に小さいので バイナリダンプしてみよう。 以下にマスターブートレコード全体のバイナリダンプを示す。 もしバイナリダンプの意味すらわからない人は、動作解説だけ読んでみてほしい。 00000020 B3 04 80 3C 80 74 0E 80 3C 00 75 1C 83 C6 10 FE ウ.? v 0000002D. 000044 BB 0700 MOV BX,0007h ; サ.. 000047 B4 0E MOV AH,0Eh ; エ. 000054 B4 06 MOV AH,06h ; エ. 000056 3C 0E CMP AL,0Eh ; v 0000006B t. 00005A B4 0B MOV AH,0Bh ; エ. 00005C 3C 0C CMP AL,0Ch ; v 00000065 t. 0000AB 813E FE7D 55AA CMP word ptr[7DFEh],AA55h ; ・. 0000BC BE 2707 MOV SI,0727h ; セ'. 0000C2 91 XCHG AX,CX ;. 0000C3 52 PUSH DX ; R 0000C4 99 CWD ;. 0000E3 56 PUSH SI ; V 0000E4 56 PUSH SI ; V 0000E5 52 PUSH DX ; R 0000E6 50 PUSH AX ; P 0000E7 06 PUSH ES ;. 0000E8 53 PUSH BX ; S 0000E9 51 PUSH CX ; Q 0000EA BE 1000 MOV SI,0010h ; セ.. 0000ED 56 PUSH SI ; V 0000EE 8BF4 MOV SI,SP ; 偶 0000F0 50 PUSH AX ; P 0000F1 52 PUSH DX ; R 0000F2 B8 0042 MOV AX,4200h ; ク. Invalid 000117 706172746974696F DB 'p','a','r','t','i','t','i','o' ;?? partitio 00011F 6E207461626C6500 DB 'n',' ','t','a','b','l','e',00h ;?? n table. 000127 4572726F72206C6F DB 'E','r','r','o','r',' ','l','o' ;?? Error lo 00012F 6164696E67206F70 DB 'a','d','i','n','g',' ','o','p' ;?? ading op 000137 65726174696E6720 DB 'e','r','a','t','i','n','g',' ' ;?? erating 00013F 73797374656D004D DB 's','y','s','t','e','m',00h,'M' ;?? system. M 000147 697373696E67206F DB 'i','s','s','i','n','g',' ','o' ;?? issing o 00014F 7065726174696E67 DB 'p','e','r','a','t','i','n','g' ;?? perating 000157 2073797374656D00 DB ' ','s','y','s','t','e','m',00h ;?? system. 00015F 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000167 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00016F 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000177 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00017F 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000187 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00018F 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000197 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00019F 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001A7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001AF 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001B7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001BF 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001C7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001CF 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001D7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001DF 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001E7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001EF 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001F7 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001FF 00 DB 00h ;?? まず大きな違いは、 FAT32のバックアップブートセクターに対応している点だ。 FAT32ではブートセクターが破壊された場合に備えて、その バックアップを持っている。 デフォルトでは ブートセクターの6セクター後ろだが、一応ブートセクターのBPBにもその位置が書いてある。 もっともBPBに書いてあるバックアップブートセクター位置は参照されていないようで、必ず6セクター後ろを見に行く。 もし正規のブートセクター(先頭セクター)が無効であった場合(ブートシグニチャが0xAA55でない)、ベーシック版では、 「Missing operating system」というエラーメッセージを出力して停止してしまうが、FAT32対応版は、バックアップブートセクターの読み込みを試みる。 これを試みても更に有効なブートセクターが見つからない場合のみ、前述のエラーメッセージを出力して停止する。 もう一つのベーシック版との大きな違いは LBA対応だ。 ブートしようとするパーティションが FAT16X(ID 0x0C)、 FAT32X(ID 0x0E)の場合、 CHSでなく LBAモードでセクターの読み出しを行う。 従って 8GB以降にあるこれらの領域からブートセクターをロードすることが可能になっている。 ただし前述のように FAT16Xと FAT32Xの領域にしか、LBAモードを使わないので、 NTFSやLinuxの ext2fsなどが8GB以降にある場合はロードすることはできない。 最後に 完全LBA対応版の場合だ。 00000010 BF 1B 06 50 57 B9 E5 01 F3 A4 CB BD BE 07 B1 04 ソ.. 00000020 38 6E 00 7C 09 75 13 83 C5 10 E2 F4 CD 18 8B F5 8n. 愚 00000040 F0 AC 3C 00 74 FC BB 07 00 B4 0E CD 10 EB F2 88 ャ.... Uェ FAT32対応版よりも更にサイズが大きくなり、 379バイトある。 以下に逆アッセンブラしたデータを示す。 [完全LBA対応のブートストラップローダの逆アッセンブラデータ] 000000 33C0 XOR AX,AX ; 3タ 000002 8ED0 MOV SS,AX ; 社 000004 BC 007C MOV SP,7C00h ; シ. 000007 FB STI ;. 000008 50 PUSH AX ; P 000009 07 POP ES ;. 00000A 50 PUSH AX ; P 00000B 1F POP DS ;. 00000C FC CLD ;. 00000D BE 1B7C MOV SI,7C1Bh ; セ. 000010 BF 1B06 MOV DI,061Bh ; ソ.. 000013 50 PUSH AX ; P 000014 57 PUSH DI ; W 000015 B9 E501 MOV CX,01E5h ; ケ.. 000018 F3 REP ;. 000019 A4 MOVSB ; 、 00001A CB RETF ;v 0000002E. 000046 BB 0700 MOV BX,0007h ; サ.. 000049 B4 0E MOV AH,0Eh ; エ. 000066 A0 B607 MOV AL,byte ptr[07B6h] ;. 00007C A0 B607 MOV AL,byte ptr[07B6h] ;. 000097 57 PUSH DI ; W 000098 8BF5 MOV SI,BP ; 寓 00009A CB RETF ; ヘ. 0000AB 98 CBW ;. 0000B9 D2EE SHR DH,CL ; メ. 0000CD BB 007C MOV BX,7C00h ; サ. 000102 6A 00 PUSH 00h ; j. 00010A 6A 00 PUSH 00h ; j. 00010C 68 007C PUSH 7C00h ; h. 00010F 6A 01 PUSH 01h ; j. 000111 6A 10 PUSH 10h ; j. 000120 32E4 XOR AH,AH ; 2. Invalid 000134 706172746974696F DB 'p','a','r','t','i','t','i','o' ;?? partitio 00013C 6E207461626C6500 DB 'n',' ','t','a','b','l','e',00h ;?? n table. 000144 4572726F72206C6F DB 'E','r','r','o','r',' ','l','o' ;?? Error lo 00014C 6164696E67206F70 DB 'a','d','i','n','g',' ','o','p' ;?? ading op 000154 65726174696E6720 DB 'e','r','a','t','i','n','g',' ' ;?? erating 00015C 73797374656D004D DB 's','y','s','t','e','m',00h,'M' ;?? system. M 000164 697373696E67206F DB 'i','s','s','i','n','g',' ','o' ;?? issing o 00016C 7065726174696E67 DB 'p','e','r','a','t','i','n','g' ;?? perating 000174 2073797374656D00 DB ' ','s','y','s','t','e','m',00h ;?? system. 00017C 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000184 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00018C 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 000194 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 00019C 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001A4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001AC 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001B4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001BC 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001C4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001CC 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001D4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001DC 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001E4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001EC 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001F4 0000000000000000 DB 00h,00h,00h,00h,00h,00h,00h,00h ;?? 0001FC 00000000 DB 00h,00h,00h,00h ;?? FAT32対応版の機能を一通り包含した上、どの領域に対しても使用可能であれば、 LBAモードを使用するという特徴を持っている。 機能的な違いとしては、上記くらいしか確認できなかったが、次のような動作上の違いを確認した。 FAT32対応版以前では、読み込んだブートセクターが無効だった場合、 「Missing operating system」というエラーメッセージを出力ていたが、このバージョンのローダの場合、その場合でも 「Error loading operating system」というエラーメッセージを出力した。 いろいろ実験したが、「Missing operating system」というエラーメッセージを出力されることは、結局できなかった。 これは何かバッグっぽい気もするが。 このようにブートストラップローダにもバージョンがあり、インストールの仕方、インストールされる場面によって違うので、環境移行の場合や、障害復旧時には気をつける必要がある。 まあ、本格的なマルチブートを行っている人は、ブートストラップローダを使っていないだろうから、多くの場合問題ないだろうが。

次の

追加のソフトウェアをインストールするためのブートストラップアクションの作成

ブート ストラップ と は

この記事はなが全く示されていないか、不十分です。 して記事の信頼性向上にご協力ください。 ( 2016年11月) ブートストラップ問題 Bootstrap problem は、をコンパイル対象ので作成した際に、そのコンパイラの最初のコンパイルをどうするかといった場合を典型的な例とする、いわゆる「」の形をした環境の問題を指す。 これを解決するための方式を ブートストラップ方式といい、この問題を何とかして最初の完備した環境を作ることを ブートストラッピングという。 名前についてはの記事を参照。 種類 [ ] 言語 X のコンパイラを言語 X で書く場合、次のような対処法がある。 言語 X のかを言語 Y で実装する。 は、最初のコンパイラをで書いたとされている。 X の別のインタプリタかコンパイラが言語 Y で既に書かれて存在している。 これはでしばしば用いられる手法である。 X のサブセットのコンパイラをまず用意し、その X のサブセットで X のコンパイラを書く。 を拡張した言語のコンパイラの幾つかやコンパイラの幾つか、最初のコンパイラはこの方式で作成されている。 X のコンパイラが既に存在するプラットフォーム上で、別のプラットフォームのオブジェクトコードを生成する X のコンパイラをコンパイルし、とする。 そのクロスコンパイラでコンパイラをコンパイルすれば、ターゲットのプラットフォーム上で動作するコンパイラが得られる。 コンパイラを別のプラットフォームに移植する際にこの方式が採用される。 X のインタプリタが実装されている場合に、そのインタプリタ上で X のコンパイラを実行し、 X のコンパイラ自身をコンパイルする。 のP-Codeで書かれたトランクコンパイラの場合がこれに相当する。 トランクコンパイラは、オブジェクトコード生成部がコメントとなっている場合があり、その場合にはコンパイル前にターゲットマシンに合わせたものに書き換える必要がある。 X で書かれたコンパイラのソースの最初のコンパイルは、人手により「ハンドコンパイル」する。 は、システム でこの方式を採用した。 コンパイラをソースコード形式で配布する場合、同時に移植の容易な版のコンパイラを提供し、コンパイラ自身のコンパイルができるようにする(一例)。 経緯 [ ] ブートストラップがおこなわれた最初の実装は(の一種)であった。 商用の実装ではの実装が最初である。 今日の言語処理系では、C言語のようなシステム記述に向いた基本的な言語処理系の実装などは、その言語自身で書かれることが多いため、全く手掛かりのない環境ではブートストラッピングが必要になることがある(大抵の環境では、バイナリディストリビューションやクロスコンパイルを利用して回避できるので、難しいプロセスは回避できる)。 以下に幾つかの実装が行っているブートストラッピングの方法を示す。 : OCamlで書かれているネイティブコードコンパイラは、ソースだけでなくバイトコードも配布している• : Haskellで書かれているので、中間言語としてC言語を使うオプションを利用した、Cコンパイラでコンパイルできるコードを、ブートストラッピング用に配布している また、など、言語処理系の実装に際して、プログラムを生成するプログラムを使っている場合も、似たような再帰的依存関係の問題がある。 脚注 [ ].

次の