47

OS の作成は大規模なプロジェクトのように思えます。誰でもどのように始めますか?

たとえば、Ubuntu をドライブに挿入した場合、コンピューターでそれを実行するにはどうすればよいでしょうか? (これは、私が本当に知りたいことだと思います。)

または、別の角度から見ると、ディスク上に存在し、OS として「実行」できる最小のバイト数はどれくらいですか?

(あいまいで申し訳ありません。私はこのテーマについて何も知らないだけなので、具体的には言えません。コンピューターの仕組みについてかなりの知識を持っているふりをしていますが、このテーマについてはまったく無知です。 )

4

25 に答える 25

36

ええと、答えは本にあります。最新のオペレーティング システム- アンドリュー S. タネンバウムは非常に優れたものです。以下表紙イラスト。

学習や単なる好奇心に適した、最も単純で完全なオペレーティング システム カーネルはMinixです。
ここでソースコードを閲覧できます。

最新のオペレーティング システム
(ソース: cs.vu.nl )

于 2008-12-31T21:17:07.927 に答える
19

オペレーティング システムは非常に大きなトピックです。オペレーティング システムがどのように設計および構築されているかを深く掘り下げたい場合は、次のような優れた本をお勧めします。

オペレーティング システムの概念

オペレーティング システムの概念

于 2008-12-31T18:52:58.967 に答える
12

本当に興味のある方は、オペレーティング システムの完全な内外と、すべての要素がどのように組み合わされるかを学ぶのに適した場所として、ゼロからLinux をご案内します。それがあなたが探しているよりも多くの情報である場合は、このウィキペディアのオペレーティング システムに関する記事から始めるのがよいでしょう。

于 2008-12-31T18:50:43.057 に答える
11

PC は、起動命令についてディスクの特定のセクターを調べることを知っています。これらの命令は、特定のプロセッサ割り込みで特定のコードが呼び出されることをプロセッサに伝えます。たとえば、定期的なティックで、スケジューラ コードを呼び出します。デバイスから何かを取得したら、デバイス ドライバー コードを呼び出します。

では、OS はどのようにしてシステムですべてをセットアップするのでしょうか? ハードウェアにも API があります。これらは、システム プログラマを念頭に置いて書かれています。

私は多くのベアボーン OS を見てきましたが、これは本当に絶対的なコアです。多くの自作の組込み OS があり、それがすべてであり、他には何もありません。

アプリケーションがオペレーティング システムにメモリを要求することを要求したり、特定のアクションに対して特別な特権を要求したり、プロセスやスレッド自体でさえも、ほとんどの PC アーキテクチャに実装されているものの、実際にはオプションです。

于 2008-12-31T18:49:44.947 に答える
10

オペレーティング システムは、ソフトウェアがハードウェアを管理できるようにするものです。明らかに、一部の OS は他の OS よりも洗練されています。

つまり、コンピューターの起動時に、プログラム カウンターを事前に定義されたアドレスに設定し、マシン コードの実行を開始します。

ほとんどのコンピュータでは、この「ブートストラップ」プロセスにより、既知の周辺機器 (ディスク ドライブなど) が即座に初期化されます。初期化されると、ブートストラップ プロセスは事前定義されたシーケンスを使用して、これらの周辺機器を活用します。ディスク ドライバを再び使用すると、プロセスはハード ドライブの最初のセクタからコードを読み取り、それを RAM 内の既知の領域に配置してから、そのアドレスにジャンプします。

これらの事前定義されたシーケンス (CPU の開始、ディスクのロード) により、プログラマーは CPU 起動の初期段階でコードをどんどん追加することができ、時間が経つにつれて、最終的には非常に洗練されたプログラムを起動することができます。

現代の世界では、洗練された周辺機器、高度な CPU アーキテクチャ、および非常に膨大なリソース (GB または RAM、TB のディスク、および非常に高速な CPU) を使用して、オペレーティング システムは開発者向けの非常に強力な抽象化 (複数のプロセス、仮想メモリ) をサポートできます。 、ロード可能なドライバーなど)。

ただし、リソースが制限された単純なシステムの場合、「OS」にそれほど多くは必要ありません。

簡単な例として、多くの小型コントローラ コンピュータは非常に小さな「OS」を備えており、シリアル ポート (または端末、または LCD ディスプレイ) への簡単なアクセスを提供するだけの「モニタ」と見なされるものもあります。確かに、このような状況では大規模な OS の必要性はあまりありません。

しかし、古典的な Forth システムのようなものも考えてみてください。ここでは、ディスク I/O、コンソール I/O、メモリ管理、および実際のプログラミング言語とアセンブラを提供する「OS」を備えたシステムがあり、これは 8K 未満のメモリに収まります。 8ビットマシン。

または、BIOS と BDOS を備えた CP/M の昔の時代。

CP/M は、単純な OS が抽象化レイヤーとしてうまく機能し、移植可能なプログラムを膨大な数のハードウェア上で実行できるようにする良い例ですが、それでもシステムの起動と実行に 8K 未満の RAM しか必要としませんでした。

最新の OS で使用されるメモリの MB とはかけ離れています。しかし、公平を期すために言えば、私たちは数 MB のメモリを持っており、そのおかげで私たちの生活は (ほとんどの場合) はるかにシンプルになり、はるかに機能的になっています。

OS を書くのは楽しいです。HARDWARE に "Hello World" と出力させて、不明瞭な I/O ポートから一度に 1 バイトずつデータを押し込んだり、魔法のメモリ アドレスにデータを詰め込んだりするのは興味深いからです。

x86 エミュレーターを手に入れて、ブート セクターに自分の名前を言ってもらいましょう。それは笑いの御馳走です。

于 2008-12-31T19:03:18.897 に答える
4

基本的に...コンピュータはディスクを実行できます。理由は次のとおりです。

BIOS は、そのディスク デバイスを起動順序に含めます。

起動時に、BIOS は、フロッピー ドライブ、ハードドライブ、CD ROM など、すべての起動可能なデバイスを順番にスキャンします。各デバイスはメディアにアクセスし、ハードコードされた場所 (通常はディスクまたは CD デバイス上のセクター) をチェックして、メディアを識別するフィンガープリントを探し、指示が​​開始されるディスク (またはメディア) 上のジャンプ先の場所を一覧表示します。BIOS はデバイスに、そのヘッド (または何でも) をメディア上の指定された場所に移動し、大量の命令を読み取るように指示します。BIOS はこれらの命令を CPU に渡します。

CPU はこれらの命令を実行します。あなたの場合、これらの手順はUbuntu OSを起動します。それらは、停止する命令や、10 + 20 を追加する命令などでもかまいません。

通常、OS は大きなメモリ チャンクを取得することから始めます (再び、CPU から直接、「GlobalAlloc」などのライブラリ コマンドはまだロードされていない OS によって提供されるため利用できないため)。 )、OS 自体の構造体の作成を開始します。

OS は、メモリ管理、ファイル システム、入出力、タスク スケジューリング、ネットワーク、グラフィックス管理、プリンタへのアクセスなど、アプリケーションに一連の「機能」を提供します。それが、「制御を得る」前に行われていることです。すべてのサービスを作成/開始して、後のアプリケーションが互いにメモリを踏みつけずに一緒に実行できるようにし、OS が提供するサービスに適切な API を提供できるようにします。

OS が提供する各「機能」は大きなトピックです。OS はそれらすべてを提供するので、アプリケーションは適切な OS ライブラリを呼び出すことを心配するだけでよく、OS は 2 つのプログラムが同時に印刷しようとした場合などの状況を管理します。

たとえば、OS がなければ、各アプリケーションは別のプログラムが印刷しようとしている状況に対処する必要があり、とにかく印刷のような「何かを行う」か、他のジョブをキャンセルするなどです。代わりに、OS だけが対処する必要があります。つまり、アプリケーションは OS に「これを印刷する」と言うだけで、OS は 1 つのアプリが確実に印刷されるようにし、他のすべてのアプリは最初のアプリが終了するか、ユーザーがキャンセルするまで待つ必要があります。

「OS」は多くの機能または非常に少ない機能を意味する可能性があるため、OS である最小のバイト数は実際には意味がありません。CD からプログラムを実行することだけが必要な場合、それは非常に数バイトになります。ただし、それはOSではありません。OS の仕事は、サービス (私は機能と呼んでいます) を提供して、他の多くのプログラムを実行できるようにし、プログラムのそれらのサービスへのアクセスを管理することです。これは難しいことであり、共有リソース (ネットワーク、wifi、CD バーナー、ジョイスティック、iSight ビデオ、デュアル モニターなど) を追加すればするほど、難しくなります。

于 2008-12-31T20:24:09.733 に答える
3

http://en.wikipedia.org/wiki/Linux_startup_processおそらくこれを探しているでしょう。 http://en.wikipedia.org/wiki/Windows_NT_startup_processまたはこれ。

于 2008-12-31T18:52:37.157 に答える
3

私が目にした最新のオペレーティング システム プロジェクトの 1 つは、Singularityと呼ばれる MS Research プロジェクトで、ゼロから完全に C#.NET で作成されています。

どのくらいの作業が必要かを把握するために、2 人のコア開発者がいますが、常に最大 12 人のインターンがいます。OS が起動して起動できるようになるまでに 2 年かかりました。 BMP 画像を表示します (これは、彼らがプレゼンテーションを行うために使用する方法です)。コマンド ラインが存在するようになるまでには、さらに多くの作業が必要でした (約 4 年間)。

于 2008-12-31T18:57:56.163 に答える
2

コンピュータの起動方法カーネル起動プロセス、および同じブログの他の関連記事を試して、コンピュータの起動時の動作の概要を確認してください。

コンピュータの起動がCPU設計やその他の「低レベルのもの」に大きく依存している場合(おそらく明らかですか?)、コンピュータは何をしますか。したがって、コンピュータが起動したときに何が行われるかを予測するのは難しいです。

于 2008-12-31T19:53:09.377 に答える
2

基本的に、OS が実際に何であるかについては多くの議論があります。OS が具体的に何であるかについて全員が同意した場合 (それは単なるカーネルですか? カーネル モードで実行されるすべてのものですか? OS のシェル部分ですか? X は OS の一部ですか? Web ブラウザーは OS の一部ですか?)、あなたの質問答えられます!そうでなければ、あなたの質問に対する具体的な答えはありません。

于 2008-12-31T18:46:18.370 に答える
2

ああ、これは楽しいものです。私はある時点ですべてを行い、進化の大部分を通してそこにいました.

一般に、新しい OS の作成は小規模なものから始めます。最も単純なものはブートストラップ ローダーです。これは、コードのチャンクを取得して実行する小さなコードのチャンクです。昔々、Nova または PDP コンピュータでは、フロント パネルからブートストラップ ローダーに入ることができました。16 進数ごとに命令を入力していました。次に、ブートローダーはメディアをメモリに読み込み、プログラムカウンターをそのコードの開始アドレスに設定します。

通常、そのコードのチャンクは何か他のものをロードしますが、ロードする必要はありません。ベア メタル上で実行することを意図したプログラムを作成できます。その種のプログラムは、それ自体で何か有用なことを行います。

実際のオペレーティング システムはより大きく、より多くの要素を備えています。プログラムをロードし、メモリに入れ、実行する必要があります。IO デバイスを実行するためのコードを提供する必要があります。大きくなるにつれて、メモリを管理する必要があります。

それがどのように機能するかを本当に知りたい場合は、Doug Comer の Xinu の本と Andy TannenbaumのMinixに関する最新のオペレーティング システムの本を見つけてください。

于 2008-12-31T18:52:33.740 に答える
2

これが言及されていないなんて信じられません... しかし、オペレーティング システムの設計の概要に関する古典的な本は、MINIX の作成者である Andrew S Tanenbaum によって書かれたオペレーティング システム - 設計と実装です。この本の多くの例は、MINIX にも直接向けられています。

もう少し詳しく知りたい場合は、OS Devから始めるのが最適です。特にウィキ。このサイトには、情報だけでなく、小さなプロジェクトや趣味のために個人のオペレーティング システムを作成する開発者もいます。OSDev には、OS の内容を学びたいと思っているあなたと同じ船に乗っている人がたくさんいるので、これは素晴らしい学習リソースでもあります。最終的には自分で試してみることになるかもしれません。

于 2009-01-01T09:26:12.790 に答える
2

非常に詳細な回答については、The Design and Implementation of the FreeBSD Operating systemという本を入手することをお勧めします。Amazon から入手できます。または、FreeBSD.org のサイトへのこのリンクは、私が覚えている限りでは本のように見えます:リンク テキスト

于 2008-12-31T19:19:14.437 に答える
1

オペレーティング システム (OS) は、ハードウェアを制御するソフトウェアのレイヤーです。ハードウェアが単純であるほど、OS も単純であり、その逆も同様です ;-)

マイクロコンピュータの初期の時代であれば、OS を 16K ROM に収め、マザーボードを配線して、ROM アドレス空間の先頭でマシン コード命令の実行を開始することができました。この「ブートストラップ」プロセスは、キーボード、モニター、フロッピー ドライブなどの他のデバイス用のドライバーのコードをロードし、数秒以内にマシンを起動して使用できるようにします。

最近では...同じ原理ですが、ハードウェアはますます複雑になっています;-)

于 2008-12-31T18:51:02.650 に答える
0

ディスクに何バイト入れて、OS として実行できるかを尋ねます。答えは OS に何を期待するかによって異なりますが、私が知っている最小の有用なOS は 1.7 メガバイトに収まります。これはTom のルート ブートディスクであり、フロッピー ディスク 1 枚に収まる「レスキュー」アプリケーションを備えた小さな OS としては非常に優れています。すべてのマシンにフロッピー ドライブがあり、すべてのマシンに CD-ROM ドライブがあるわけではなかった時代に、私はそれを頻繁に使用していました。

于 2008-12-31T22:54:50.507 に答える
0

実際、4年制大学を訪れて大まかなアイデアを得る人もいます.

于 2009-10-08T15:02:11.133 に答える
0

OS は、作成する他のアプリケーションと同様にプログラムです。このプログラムの主な目的は、他のプログラムを実行できるようにすることです。最新の OS は最新のハードウェアを利用して、プログラムが互いに衝突しないようにします。

独自の OS を作成することに興味がある場合は、ここで私自身の質問を確認してください。

オペレーティング システムの開発を開始する方法

于 2008-12-31T20:28:39.273 に答える
0

基本的に、OS は非常にシンプルです。成功する OS の目的を説明する初心者向けガイドは次のとおりです。 1. スケジュールするプロセス (プログラムの実行中のインスタンス) を決定するスケジューラを使用して CPU を管理します。2. メモリを管理して、命令 (コード) とデータ (変数) の格納に使用するすべてのプロセスを決定します。3. ディスク ドライブ、アラーム、キーボード、マウスなどの I/O インターフェイスを管理します。さて、上記の 3 つの要件により、通信する (そして戦うのではなく!)、外界と対話する、アプリケーションがやりたいことを実行できるようにするプロセスの必要性が生じます。それがどのように行われるかをより深く掘り下げるには、恐竜の本を読んでください:)

したがって、すべてのハードウェア リソースを処理できる限り、OS を必要なだけ小さくすることができます。ブートアップすると、BIOS は CPU にブートローダーの読み取りを開始するように指示します (メモリ内の固定アドレスにある OS の最初の関数をロードします。小さな C プログラムの main() のようなものです)。次に、これにより関数とプロセスとスレッドが作成され、ビッグバンが始まります!

于 2014-05-02T17:55:04.800 に答える
0

チップの起動を「BIOS」にリンクし、次に OS にリンクする何かがありますが、これは通常、多くのコード サービスによって実行される非常に複雑なタスクです。

これについて本当に知りたい場合は、本を読むことをお勧めします...マイクロコントローラー、特に8051などのcで小さなOSを作成するもの..またはx86アセンブリを学び、非常に小さな"ブートローダー OS」。

于 2008-12-31T18:52:04.273 に答える
0

1 つのディスクに収まるもう 1 つの非常に小さなオペレーティング システムは QNX です (私がずっと前に見たときは、GUI インターフェイス、Web ブラウザ、ディスク アクセス、組み込みの Web サーバーを備えた OS 全体が 1 つのフロッピー ドライブに収まっていました)。 .

それ以来、あまり聞いていませんが、リアルタイム OS であるため、非常に高速に設計されています。

于 2009-03-18T19:19:55.673 に答える
0

ここを読むと、Linux https://netfiles.uiuc.edu/rhasan/linux/を作成するのに何が必要かが わかります。

于 2009-01-01T09:17:43.073 に答える
0

私の見解は、それはあなた自身の人生のようなものだということです。AT 最初は、あなたはほとんど何も知りません - 仲良くなるには十分です。これは、BIOS が提供するものと似ています。BIOS は、ディスク ドライブを探してそこから情報を読み取るのに十分な知識を持っています。それから小学校に行くとき、あなたはもう少し学びます。これは、ブート セクタがメモリに読み込まれ、制御が与えられるようなものです。それから高校に進学しますが、これは OS カーネルのロードのようなものです。その後、大学 (ドライバーやその他のアプリケーション) に進みます。 もちろん、これはクラッシュする可能性があるポイントです。 へへへ。

肝心なのは、ますます多くの機能のレイヤーがゆっくりとロードされるということです。OS に魔法はありません。

于 2009-01-01T03:56:24.110 に答える
0

まず、読んで読んで読んで、OSとは何か。次に、さまざまなOSの用途/タイプ/性質/目的/ニーズ/は何ですか。リンクの一部は次のとおりです。初心者はこれらのリンクを楽しむことができます:

最新の OS - これにより、一般的な OS についてのアイデアが得られます。

OS の開始- これは、OS を作成するために実際に必要なこと、それを作成する方法、および OS の現在のオープン ソース コードを自分で変更する方法の基本を提供します。

Wiki OS - さまざまな分野で使用されているさまざまな Os とその用途 (オブジェクト / OS の機能) についてのアイデアを提供します。

一般的にどのような OS が含まれているか見てみましょう(洗練された Linux や Windows ではありません)。

OS には CPU が必要であり、その中にコードをダンプするにはbootloader. Kernel OS には達成する目的が必要であり、それらの目的は、内部と呼ばれるラッパーで定義する必要がscheduling timeありISR's ます (作成する必要がある目的と OS によって異なります)。

于 2016-12-15T16:23:16.190 に答える
0

この質問をチェックしてみてください。

于 2008-12-31T19:33:29.977 に答える
0

OS開発は複雑です。osdev や lowlevel.eu (ドイツ語) など、このトピックに特化した Web サイトがいくつかあります。他の人がすでに言及したいくつかの本もあります。

YouTube の「独自のオペレーティング システムを作成する」ビデオ シリーズを参照せずにはいられません。これを作成したのは私です :-)

https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6Mを参照してください。

于 2017-03-13T11:51:06.210 に答える