質問: 再起動の仕組 c++で再起動プログラムを作りたいと 思っています。 具体的には、3.5インチfddに入れて パソコンが立ち上がりfddを読んで 再起動するというものです。 仕組を教えて欲しいのですが、プログラム自体では なくパソコン内でどういったことで再起動しているのか教えてほしいのですが。
回答: 再起動とは「cpuをリセットする」と言う事です。 cpuやハードウェアを限定せず、一般的なcpuとパソコンの話として解説してみます(8ビットcpuを積んだマイコン等は話が違うので除外します) 電源投入直後、cpuは「リセットベクタ」と言う場所に書かれているアドレスを拾い、そこから実行を開始します。 マザーボードのリセットスイッチを押すとcpuにリセット信号が入り、cpuは今までやっていた事をすべて放り出して、電源投入直後と同じように「リセットベクタ」からアドレスを拾い、そこから実行を開始します(実際には、周辺チップにもリセット信号が入り、周辺チップもリセットされます。 で、再起動の話に戻りますが、上記の「リセットベクタからアドレスを拾い、そこから実行を開始する」と言う、特別な命令コードがあります(リスタート命令などと呼ばれたりします。通常、この命令は特権命令であり、cpuを特権モードに切り替えていないと、特権命令違反などの例外が発生し、命令が実行されません) 実際の再起動処理では、ファイルアクセス、i/oアクセスをすべて閉じ、必要であれば周辺チップの再初期化を行い、割り込みを禁止してから上記のリスタート命令を実行します(周辺チップの再初期化が必要なのは、リセット信号の入力時と違い、周辺チップにリセットがかかっていないので、プログラムで周辺チップをリセット時と同じ状態にしてあげる必要がある為です)