1

私は今本当に興味があります。私はPythonプログラマーですが、この質問は私を困惑させました。あなたはOSを作成します。どのように実行しますか?どういうわけか実行する必要があり、その方法は別のOS内にありますか?

OSを使用せずにアプリケーションを実行するにはどうすればよいですか?実行するOSがない場合、コンピュータにCを実行し、これらのコマンドを画面に対して実行するように指示するにはどうすればよいですか?

UNIXカーネルと関係がありますか?もしそうなら、UNIXカーネル、または一般的なカーネルとは何ですか

OSはそれよりも複雑だと思いますが、どのように機能しますか?これを知ることは本当に素晴らしいでしょう!

ありがとう。

4

3 に答える 3

1

あなたは確かにOSなしでプログラムを書くことができます。実際、PCには、OSが起動する前にOSなしで実行されるプログラムがすでに存在します。実際には2つあります。1つ目はBIOSです。

IBM PCアーキテクチャーは、BIOSを使用してコンピューターを起動するアーキテクチャーのファミリーの1つです。すべてのアーキテクチャにBIOSがあるわけではありません。たとえば、iPhoneはブートローダーで直接起動します。実際、ほとんどの「最新の」アーキテクチャにはBIOSがありませんが、ブートローダーで直接起動します。この方法は、実際には概念的に単純です。

PCがBIOSを必要とするという事実は、単なる歴史的な遺産です。元のIBMBIOSは、実際にはDOSをロードするための基本的なブートローダーでした。最新のBIOSは、依然としてブートローダーです。ブートローダーをロードします。

ほとんどのPCBIOSは独自仕様です。これにより、メーカーは、ブートローダーに制御を渡す前に、カスタム/独自のハードウェアを初期化できます。これにより、OSイメージがフラッシュドライブ、USBサムドライブ、SDカード、磁気ディスク、DVDなどにある天候を気にせずにブートローダーを作成できます。ブートローダーは、によって初期化されたディスクを確認するだけです。 BIOS。

起動の次の段階はブートローダーです。IBM PCアーキテクチャがブートローダーを必要とする理由は、BIOSが通常DOSを実行するようにCPUをセットアップするように設計されているためです。最近のOSでは、CPUを少し異なる方法で構成する必要があります。また、最新のOSカーネル(カーネルは、メモリやCPUなどの管理などを行うOSの実際のコア実行可能コード)は大きな獣になる傾向があり、多くの場合、サイズが4MBを超え、ほとんどのBIOSがロードするように設計されているものよりもはるかに大きくなります。 。そのため、BIOSは小さなブートローダーをロードし、それが実際のOSをロードします。繰り返しになりますが、これが必要になるのは、IBMが元のPCアーキテクチャーを設計した1980年代に決定したためです。iPhoneやPS3のような現代のアーキテクチャはこれを行いません。それらはブートローダーで直接起動します。

鶏が先か卵が先かという問題を解決するには、ブートローダーが必要です。OSをロードするには、ディスクから読み取る必要があります。ディスクから読み取るには、OSによってロードされるデバイスドライバーを使用する必要があります。この循環依存を解消するために、人々は基本的に1つのプログラム(OS)のみを実行し、ディスク(またはSDカード、ネットワークなど)から読み取る方法を理解するように設計された非常に単純なOSであるブートローダーを作成します。

それはあなたの質問に答える部分に私たちをもたらします。OSを作成した場合、どのようにロードしますか?ブートローダーを構成してロードします。Windowsには、柔軟性があまり高くないブートローダーが付属しています。Windowsをロードする方法を理解していますが、それだけです。他のOSのロード方法も理解しているGrubBurgなどのオープンソースブートローダーをインストールできます。

マシンの起動に関連する基本的な概念は、実際には単純です。怖いのは細部です。しかし、OSがどのように機能するかを学習することに本当に興味があるのであれば、最終的には非常にやりがいがあります。また、このようなものに興味がある場合は、従来のBIOSの代わりにEFIを使用するMacハードウェアやブートローダーまたは組み込みプラットフォームから直接Linuxを起動するLinksysルーターなどのIBMPC以外の他のアーキテクチャを検討することをお勧めします。 OSなしでCPU上で直接コンパイルする単一のプログラムを実行するArduino。

于 2012-10-24T06:04:18.407 に答える
0

メモリの仮想化やハードウェアへのアクセスの調停などを行うには、OSが必要です。OSはメモリやハードウェアなどに完全にアクセスできるため、実行するのにOSは必要ありません。ほとんどのプログラムがOSから取得するサービスは、OS自体が提供するか、ハードウェアから取得する必要があります。

于 2012-10-24T04:42:07.043 に答える
0

ソフトウェアを実行するのは、ある種のCPU、電子回路、ハードウェアです。

ソフトウェアがOSであろうと他の種類のプログラムであろうと、CPUは気にしません。可能な限り実行します(たとえば、上記のソフトウェアによって回復不能なエラーが発生し、CPUが奇妙な状態になるか、単にリセットされるまで)。

電源を入れると、CPUはメモリ内の特定の場所で見つかったコードの実行を開始します。その場所は、CPUに配線するか、CPU回路の外部で構成するか、ソフトウェアでプログラムすることができます。どちらであるかは、CPUとデバイス全体の設計方法によって異なります。

すべてのプログラムがCPU上で実行するためにOSを必要とするわけではありません。OSはそのようなプログラムの良い例です。すべてのOSに別のOSが必要な場合、この無限再帰をどのように止めますか?:)しかし、それだけではありません。

多くの電子機器、特にデジタル時計のような非常に単純な機器には、OSが搭載されていません。

OSが別のOSの上で実行されるのは、仮想化がある場合だけです。しかし、私はこの答えでそこに行くつもりはありません。

OSは、スケジューリング、スレッド/プロセスの同期、メモリ割り当てなどの基本機能、またはデバイスI / O自体のすべてまたはほとんどを実行し、OSで実行されているプログラム(IOW)からハードウェアの特性を隠して許可するためにのみ必要です。ポータブルプログラム。Pythonで作成print 123すると、表示、解像度、およびさまざまなコンピューターやさまざまなOSに存在する可能性のある他の多くの違いに関係なく、Pythonと互換性のある(=使用可能な)任意のOSで123が印刷されます。汎用OSが、コンソールおよびファイルI / Oやメモリ管理などの一般的な機能(および多かれ少なかれ一般的なAPI)を提供していなかった場合、Pythonは利用できず、それらのOSは一般的ではなかったでしょう。 -そもそも目的。

OSカーネルはOSのコアです。それは、以下を処理する、低レベルで汚い仕事のほとんどを行います。

  • 割り込み処理
  • スレッド/プロセスのスケジューリングと同期
  • メモリ管理
  • 同様のもの

OSの機能で十分な場合もありますが、そのような場合、OSとカーネルの間に違いはありません。ここでは同じです。

OTOHの場合、柔軟性、さまざまなデバイスのサポート、それらすべてを管理するためのコード、ファイルシステム、ネットワーク、TCP / IPスタックなどの特別なドライバーの束など、より多くのものが必要な場合は、単純です(おそらく、比較的単純なだけです)カーネルだけでは十分ではありません。その周りにもっと多くのものが必要です。そこで、OSとカーネルを区別し始め、OS=カーネル+エクストラに到達します。使用しているテキストエディタは、OSに付属している場合でも、それらの追加機能の1つではなく、通常のプログラムであり、OSにバンドルする必要はありませんが、便宜上、バンドルすることができます。

UNIXはOSの一例です。さらに多くの、特にLinuxとWindowsがあります。

コンピュータが一般的にどのように機能するかを学ぶために、コンピュータアーキテクチャと組織に関する本を手に入れる必要があります。そこに何があるのか​​、どのように組み立てられるのか、ボンネットの下で何が起こっているのかなど。

于 2012-10-24T05:19:32.643 に答える