18

私は、独学のプログラマーが持つべき能力のさまざまなリストをまとめています。

すべての科目の中で、オペレーティング システムは最も難しい科目です。おもちゃのオペレーティング システムを作成することさえ、かなり簡単な作業ではないからです。ただし、同時に、アプリケーション開発者 (CS を正式に学んでいない可能性があります) は、OS がどのように機能するかを理解し、より優れた開発者になるために、少なくともいくつかの重要な概念を認識し、できれば実装しておく必要があります。

具体的な質問がいくつかあります。

  • 独学のプログラマーがより優れたソフトウェア開発者になるために理解することが重要なオペレーティング システムの重要な概念は何ですか?
  • そのような主題をバイトサイズの実用的な部分で学ぶことはリモートでも可能ですか? (コンパイラの構築のような主題でさえ、かなり低いレベルの複雑さで、実践的な方法で学ぶことができます)
4

8 に答える 8

6

Andrew S. Tanenbaum ( http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum ) のモダン オペレーティング システムに関する本(ISBN 978-0-13-600663-3) を読むことをお勧めします。

ただし、本の索引から、最小限の重要なトピックを特定できます。

  • プロセス
  • メモリ管理
  • ファイルシステム
  • 入出力

このトピックを試す最も簡単な方法は、MINIXをダウンロードすることです。

http://www.minix3.org/

そしてコードを勉強してください。このオペレーティング システムの古いバージョンの方が理解しやすい場合があります。

もう 1 つの役立つリソースは、Mike Saunders How to write a simple operating systemで、x86 アセンブリ言語で最初のオペレーティング システムを作成してビルドする方法を示しています。

http://mikeos.sourceforge.net/write-your-own-os.html

于 2012-11-03T10:30:38.103 に答える
5

すべての OS 設計者は、 Multicsの背後にある概念を理解する必要があります。最も素晴らしいアイデアの 1 つは、巨大な仮想メモリを直接読み書き可能なセグメントに分割し、完全な保護とマルチプロセッサの起動サポートを提供するという概念です。64 ビットのポインターを使用すると、地球上のすべてのものを直接アドレス指定するのに十分なビットが得られます。これらのアイデアは 1960 年代のものですが、不朽の私見です。

そのような知識の明らかな喪失により、私たちの「宦官」は現在、Unix、次に Linux としてインスタンス化され、Microsoft からも同様に貧弱な設計になりました。どちらも世界をフラットなプロセス空間とファイルとして編成しています。歴史を知らない人は、もっと愚かなことをする運命にある。

Multics に関する Organick の本を手に入れるためにできる限りのことをして、最初から最後まで読んでください。(Elliott I. Organick、The Multics System: An Examination of its Structure)。

ウィキペディアのサイトには良い情報があります。Corbato の論文は素晴らしいです。

于 2012-11-03T17:04:10.460 に答える
3

開発しているアプリケーションの種類と、開発している OS プラットフォームに依存すると思います。たとえば、Web サイトを開発している場合、OS についてあまり詳しく知る必要はありません。この例では、Web サーバーについて詳しく知る必要があります。Windows、Linux、Android、または組み込みシステムで作業しているときに知っておく必要があるさまざまなことがあります。また、API が提供するもの以外に何も知る必要がない場合もあります。一般に、開発者または CS 担当者が次のことを知っていることは常に良いことです。

  1. アプリケーション、ツールチェーン、そして OS の責任にあるもの。
  2. プロセス間通信と、OS システム コールが提供するさまざまな IPC メカニズム。

OS は非常に興味深いテーマですが、ほとんどが理論で構成されていますが、この理論は、組み込みシステムに取り組むときに実行に移されます。平均すると、デスクトップ アプリケーションでは、そのすべての理論がどこに当てはまるかわかりません。

于 2012-07-20T13:04:13.297 に答える
2

まあ、それは次のような開発者の必要性に依存します:-

点。

Web ブラウザや電子メール ツールなどのアプリケーションは、最近のデスクトップ コンピュータ システムでますます重要な役割を果たしています。この役割を果たすには、オペレーティング システムの一部として組み込む必要があります。そうすることで、パフォーマンスが向上し、システムの他の部分との統合が向上します。さらに、これらの重要なアプリケーションは、オペレーティング システム ソフトウェアと同じルック アンド フィールを持つことができます。

カウンターポイント。

オペレーティング システムの基本的な役割は、CPU、メモリ、I/O デバイスなどのシステム リソースを管理することです。さらに、その役割は、Web ブラウザーや電子メール アプリケーションなどのソフトウェア アプリケーションを実行することです。このようなアプリケーションをオペレーティング システムに組み込むことで、オペレーティング システムに追加の機能を負担させます。このような負荷は、オペレーティング システムがシステム リソースを管理する際に十分とは言えない仕事を実行する結果となる可能性があります。さらに、オペレーティング システムのサイズが大きくなるため、システム クラッシュやセキュリティ違反の可能性が高くなります。

ここに画像の説明を入力

また、マルチスレッド、マルチタスク、仮想メモリ、デマンド ページング、メモリ管理、プロセッサ管理など、オペレーティング システムをよりよく理解するために理解しなければならない重要なポイントが他にもたくさんあります。

于 2012-11-02T19:20:09.063 に答える
2

さて、優れたプログラマーが知っておくべきオペレーティング システムの概念です。実際に言えば。パフォーマンスを気にしない限り。クロスOS言語で書いている場合。なし。

性能重視なら。

  1. ユーザー/システム移行のコスト
  2. OS がロック/スレッド/デッドロックを処理する方法と、それらを最適に使用する方法。
  3. 仮想メモリ/ページング/スラッシングとそのコスト。
  4. メモリの割り当て、os がどのようにそれを行うか、それを利用して OS アロケータを使用する方法 (1 を参照)、および os から割り当ててサブを割り当てるタイミング。
  5. 前述のように、プロセスの作成/およびプロセス間通信。
  6. 最適な読み取り/書き込みを行うために、OS がデフォルトでディスクに書き込み/読み取りを行う方法 (データベースが B ツリーを使用する理由を参照)
  7. ボーナス、サブ OS、パフォーマンスに関してどのようなキャッシュ サイズとキャッシュ ラインが意味するか。

しかし、一般的には、OS が提供する一般的ではないもの、コストがかかる理由、およびコストがかかりすぎるもの (CPU が多すぎる、ディスク使用量が多すぎる、io が多すぎる、ネットワークが多すぎる) に要約されます。など)。

于 2012-11-01T17:34:28.603 に答える
2

私は、すべてのプログラマーがメモリについて知っておくべきことから始めます。(完全なOSではありませんが、すべて有用な情報です。また、第4章では、質問を読んで最初に頭に浮かんだ仮想メモリについて説明しています。)

残りの断片を学ぶには、任意のシステム コールを選び、それが何をするかを正確に学びます。これは、多くの場合、それが操作するカーネル オブジェクトについて学習することを意味します。

もちろん、詳細はOSごとに異なります...しかし、あなたの質問に対する答えもそうです。

于 2012-11-03T16:51:10.643 に答える
1

簡単に言えば:

スレッドとプロセス。

カーネル空間/スレッドとユーザー空間/スレッド (おそらくカーネル レベルのプログラミング)

プロセスのデッドロックの非常に基本的な概念が続きます。

その後、モニター対セマフォ対ミューテックス

メモリがどのように機能し、プロセスやデバイスと対話するか。

于 2012-11-03T18:22:48.313 に答える
0

独学のプログラマーもコンピューター科学者も、OSI モデルをよく知っている必要があります。問題がどこにあるのか、問題が発生した場合の連絡先を特定するのに役立ちます。スコープはここで定義され、多くの問題はここで除外できます。これは、単純にすべてを学習するにはオペレーティング システムが多すぎるためです。Web 開発者として、私は通常、問題がこの範囲外になるとアプリケーション レベルで作業し、いつ助けが必要かを知っています。また、多くの人は、できるだけ早く作成したい特定のコンポーネントを単に気にしません。OSI モデルは、コンピュータのホット スポットを見つけることができる場所です。 http://en.wikipedia.org/wiki/OSI_model

于 2012-11-03T15:24:52.567 に答える