オペレーティングシステムの開発を始めるためのリソースにはどのようなものがありますか?[閉まっている]


589

私が常にやりたかったことの1つは、独自のオペレーティングシステムを開発することです(LinuxやWindowsのように必ずしも派手ではありませんが、既に実行した単純なブートローダーより優れています)。

簡単な「Hello World」OSの作成を過去のものにするリソース/ガイドを見つけるのに苦労しています。

多くの人がおそらくLinuxやBSDを検討することを勧めるでしょう。しかし、そのようなシステムのコードベースは(おそらく)非常に大きいため、どこから始めればよいかわかりません。

助言がありますか?

更新:Googleを介してこの投稿にアクセスした人が簡単に利用できるように、ここにいくつかのOS開発リソースがあります。

その他のリソース:

MikeOSという素晴らしいリソースを見つけました。「MikeOSはシンプルなOSがどのように機能するかを示す学習ツールです。BIOSアクセスに16ビットのリアルモードを使用するため、複雑なドライバーを必要としません。」

2008年11月14日更新

Freebyteのガイド... OSKitやExOSライブラリなどのキットにリンクするフリーおよび非フリーのオペレーティングシステムにいくつかのリソースを見つけました。これらは、OS開発の開始に非常に役立つようです。

2009年2月23日更新

リック東京はこの質問でnanoosを推薦しました。NanoosはC ++で書かれたOSです。

2009年3月9日更新

Dinahは、意欲的なOS開発者に関するいくつかの有用なスタックオーバーフローの議論を提供しました。カスタムオペレーティングシステムの作成における障害はOSの開発中に遭遇する可能性のある落とし穴について議論し、OS開発はより一般的な議論です。

2009年7月9日更新

LBは、OS開発を学ぶ学生向けに設計された教育用OS 、Pintos Projectへのリンクを提供しました。

2009年7月27日更新(引き続き強力に!)

23の講義を取り上げたバークレーのオンラインOSコースに偶然出会いました。

TOMOSはのフォークですMikeOS少しメモリマネージャとマウスのサポートが含まれています。MikeOSとして、それは教育プロジェクトになるように設計されています。NASMアセンブラーで書かれています。

2009年8月4日更新

スライドとその他の資料が、上記のバークレーのオンライン講義に沿っているのがわかりました。

2009年8月23日更新

stackoverflowでosdevタグ付けされたすべての質問

OS / 161はcで記述されたアカデミックOSであり、シミュレートされたハードウェアで実行されます。このOSはナチョスで似ています。Novelocrat、ありがとう!

tangurenaは、組み込みシステム用に設計されたOSであるhttp://en.wikipedia.org/wiki/MicroC/OS-IIを推奨しています。あるコンパニオン本は良くて。

Robert LoveによるLinuxカーネル開発は、Andersによって提案されています。これは「Linuxカーネルについて広く評価されているインサイダーの見解」です。

2009年9月18日更新

完全にc#で記述されたOSであるCosmosについて話してくれたTim S. Van Harenに感謝します。

tgiphilは、マネージドオペレーティングシステムアライアンス(MOSA)フレームワーク、「共通中間言語に基づくマネージドオペレーティングシステムの開発を促進するためのツール、仕様、およびソースコードのセット」について教えてくれます。

2009年9月24日更新

スティーブは、Visual Studioを使用してWindowsで開発するためのリソースをいくつか見つけました。VS2005またはOSDevのVSセクションでのBrokenThornのガイドセットアップを確認してください。

2012年9月5日更新

kerneltrap.orgは使用できなくなりました。Linuxカーネルv0.01はkernel.orgから入手できます。

2012年12月21日更新学期のプロジェクトとして設計され た基本的なOS開発チュートリアル。基本的なコンポーネントを備えたOSを構築する手順を説明します。初心者にとって非常に良いスタートです。関連論文。スルジャン、ありがとう!

2013年11月15日更新

ゼロから簡単なオペレーティングシステムを作成する。ジェームズ・ムーアに感謝します!

2013年12月8日更新

コンピューターのオペレーティングシステムを作成する方法 ありがとうddtoni!

2014年3月18日更新

ToAruOS GUIを含む、ほとんどがゼロから構築されたOS

2016年9月12日更新

独自のおもちゃオペレーティングシステムの作成

2016年12月10日更新

簡単なオペレーティングシステムの記述—ゼロから(@Tyler Cに感謝)



15
なぜこれらの種類の優れた汎用質問は常にSOで閉じられているのですか?
Pratik Singhal 14

30
この質問には370回の賛成票、422回の賛成票があり、StackOverflowが最初にリリースされてからずっと続いています。コミュニティはそれを気に入っているようですが、何らかの理由で少数の人々がすべての人のためにそれを台無しにしなければなりません。これが私がSOを本当に嫌いになっている理由です
Giovanni Galbo

1
Unikernelには非常に興味深い傾向があり(1つだけを実行し、それをうまく実行します)、これらの取り組みは非常に関連しています。通常、仮想マシンでユニカーネルをコールドブートし、ユーザーコードを1秒未満で実行できます。このようなサービスのDNSルックアップだけでDNSサーバーが「ブート仮想マシン」をトリガーするソリューションを見たので、サービスの実際のリクエストが
届いた

回答:


95

X86プラットフォーム用のOSの作成に関係するもののこの概要の後には、多くのリンクがあります。

最も有望であると思われるリンク(www.nondot.org/sabre/os/articles)は使用できなくなったため、Archive.orgのバージョンを確認して読む必要があります。

1日の終わりに、ブートローダーはカーネルのマシンコードを取得してメモリに配置し、そこにジャンプします。必要なカーネルに任意のマシンコードを配置できますが、ほとんどのCプログラムはOSを想定しているため、コンパイラーにすべてを持たせないか、ブートローダーがその一部を作成する必要があることをコンパイラーに通知する必要があります。

カーネルはすべての重い作業を実行し、私はそれがあなたが望むカーネルの例だと思います。しかし、「Hello world」というカーネルの作成から、コマンドインタープリターの読み込み、ディスクサービスの提供、プログラムの読み込みと管理を行うカーネルまで、長い道のりがあります。

ACMに登録して古い文献にアクセスすることを検討することをお勧めします。80年代後半から90年代前半には、代替OSの作成方法に関する記事がたくさんあります。。この時代から絶版となった本もありそうです。それらの雑誌のインデックス(そのサイトで入手可能-雑誌名の近くにある[インデックス]をクリックしてください)を調べて、コピーを持っている人に尋ねると、同じ情報を無料で入手できる場合があります。

最後に、usenetが死んでいることはわかっています(インターネットの破滅の預言者たちのために)が、その時代のボロボロの古い専門家の多くがまだそこに住んでいることがわかります。あなたはグーグルグループ(彼らはdejanewsの古いリポジトリを持っています)を検索するべきです、そして私はあなたが今求めているのと同じ質問を10年か1。5年前に尋ねる多くの人々が見つかるでしょう。Linus Torvaldsが最初にLinuxを開発していたとき、助けを求めて多くのクエリに出くわすことさえあるかもしれません。検索で何も表示されない場合は、適切なニュースグループで質問してください(おそらくcomp.archで始まりますが、名前にOSが含まれているニュースグループを検索してください)。


COSMOSはオペレーティングシステムを開発するための優れたツールですか?
Vikas Verma

@VikasVerma使ったことがないのでわかりません。
アダムデイビス

@AdamDavis最初のリンクが壊れています(他のリンクも壊れているようです)。修正してください!
nbro 2016

35

Minixははるかに小さく、学習用に設計されており、それに合わせた本も良いものです。

更新:Minix 3は少し異なる目標だと思いますが、Minix 2(そしてもちろん最初のバージョン)は教育目的でした。


私は最新のタネンバウムの本を持っていますが、minix3のソースコードはかなり巨大に見えます!私はOPのような同様の目標を持っていますが、カーネルを最初から構築したくありませんが、カーネルのしくみと機能を理解したいと思っています。Tanenbaum book and minix3minix3に変更を加えるのに十分に従うことは、最終的に私がLinuxカーネルに貢献するのに役立ちますか?
ギデオン2013年

32

ゼロからリアルタイムマルチタスクオペレーティングシステムを作成した人として...

キーボードデバウンスルーチン、キーボードドライバー、ディスクドライバー、ビデオドライバー、ファイルシステム、そして最後にブートローダー-何もせずに初めて起動するだけです!

...ハードウェアに慣れることがいかに重要であるかを十分に強調することはできません。これは特に、他の誰かがすでにレイアウトしたプリミティブシステムを取得するのではなく、本当に自分ですべてを実行したい場合です。たとえば、Intelに連絡して、お使いのCPUのタイプに合ったCPUカードを要求してください!これはあなたのためにそれをレイアウトします-「ピンアウト」、割り込み、オペコード、あなたはそれに名前を付けます!

ハードウェアがすべてを可能にすることを忘れないでください。ハードウェアを調べます。後悔はしません。


18

マイクロコントローラOSを記述します。x86ベースのマイクロコントローラーをお勧めします。最近のOSは巨大です。最初に基本を学びます。


2
これからどこから始めればいいですか?私はとても興味がありますか?buy..booksにどのようなキットなどを離れて起動するには
フリオ・

@おじさん:私はこれまで一流の組み込みシステムの本に出会ったことはない。高レベルでOSを想定している、または電気技術者を対象としていてコードを無視している。キットに関しては、グーグルは「bifferos.bizhat.com」を見つけます。そこにもARMキットがあります。私はハーバードアーキテクチャが個人的に好きではないので、私はarduinoには興味がありません、最も人気があります。よりエキゾチックな作業には、XC-1Aも最適です。
ポールネイサン

@Paulは、あなたの答えを拡張していただければ幸いです。私はAVRとArduino を調べましたが、最近.NET microを見ました。私は高度に抽象化されたLOBの専門家ですが、スタックをたどり始めたいと思います。どこから始めましょうか。
ギデオン

@giddy:AVRは現在の流行です。小さくて安いですが、建築はあまり好きではありません。ARM開発キットを入手することをお勧めします(最大コストは100)。それらは商用アプリケーションで人気があります。
Paul Nathan

@Paulありがとう!ARMについてはあまり聞いていません。.net microはどうですか?私は何かを燃やすのが少し心配です。ほとんどのキットには、ある種の説明書が付属していますよね?再度、感謝します。
ギデオン2011年

16

自分のOSの開発に関するすべての情報を入手できる場所が1つあったらいいのにと思います。これに最も近いのは、OS Dev Wikiフォーラムです。セットアップ、開発、およびデバイスのハードウェア情報に関する豊富な情報を提供します。

また、でいくつかの素晴らしいチュートリアルがありBoneFideは、私がすることにより、入門チュートリアル使用していたブランを、そして今、彼と呼ばれるに基づいて、より最近のもので探していますロール独自のおもちゃUNIXクローンOS

2番目のチェックアウト:「オペレーティングシステム:設計と実装」

Windowsで開発したい場合は、jolsonのブログ投稿をご覧ください

編集:Visual Studioを使用したWindowsでの開発については、BrokenThornのガイドまたはOSDevのwikiを確認してください。


1
関連:SOのx86タグwikiには、Intel / AMDのマニュアルへのリンクと、多くの優れた機能があります。
Peter Cordes 2017年

15

優れたリソースは、MITコース6.828:オペレーティングシステムエンジニアリングの資料です。

XV6-ANSI C for x86 http://pdos.csail.mit.edu/6.828/2012/xv6.htmlで記述された単純なUnixのような教育用OS

XV6ソース-行番号http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdfの印刷された小冊子として

XV6ブック-OSデザインの主なアイデアについて説明しています http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

資料はコンパクトです:92ページのソースと96ページの解説。

Minixブックよりも気に入っています。本当の逸品です!


11

また、C#で作成しているオペレーティングシステムであるSharpOSを確認することもできます。


9

本には、オペレーティングシステムの基礎に関する優れたリソースがあります。新しいOSを最初から作成する必要はあまりないので、インターネット上でたくさんの趣味のタイプの情報を見つけることはできません。

私は、タネンバウムによる標準のテキストブック「Modern Operating Systems」をお勧めします。また、Calingaertの「オペレーティングシステムエレメント」も役立つかもしれません。これは、デザイナーの立場から見たOSの概要を示す本の概要です。

リアルタイムシステムに関心がある場合(少なくともリアルタイムOSの違いと理由を理解している必要がある場合)、Labrosseの「MicroC / OS-II」もお勧めします。

編集:

「より技術的」とはどういう意味ですか?これらの本には、疑似コードの実装の詳細が記載されていますが、OSの例、または特定のマシン/言語のコードスニペットを探していますか?

-アダム


7

ちょうど別の質問から来ています。ピントスについてお話ししたいのですが、ナチョスとピントスのOSコースは、x86で実行できるものと同じようなものだと思いました。


7

Robert LoveのLinuxカーネル開発は非常に興味深いものでした。Linuxカーネルのさまざまなサブシステムが非常に現実的な方法でどのように機能するかについて説明します。ソースが利用可能であるため、Linuxは何かをハックするための主要な候補です。



6

私の学部生のオペレーティングシステムコースでは、OS / 161の多数のサブシステムを構築しました。これは、高レベルのサービスを実装する際のさまざまな設計スペースの決定を自由に探索しながら、基本の一部を提供するシンプルなBSDのようなカーネルです。


6

Minixでハッキングを始めましょう。これはLinuxよりも明らかに小さく(明らかに)、教育目的を念頭に置いて設計されています(少なくともいくつかは)。Minix 3ではありませんが、それはまったく別の話です。


5

すでに回答ですが、私が大学でオペレーティングシステムを取ったとき、私たちは初期のLinuxカーネルから始めて、単純な最新機能(基本的なファイルシステム、仮想メモリ、マルチタスク、ミューテックス)を追加しました。楽しい。プロテクトモードとページテーブルをいじるための本当にクレイジーな低レベルアセンブリのみの一部をスキップしながら、いくつかの根性を学びます。

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2


4

あなたはlinuxfromscratchを見たいかもしれません。

Linux From Scratch(LFS)は、独自のカスタムLinuxシステムを完全にソースコードから構築するための段階的な手順を提供するプロジェクトです。


32
オペレーティングシステムのコンパイルは、オペレーティングシステムの作成とはかけ離れています。
duskwuff -inactive-

7
@duskwuffその通りですが、そこから多くのことを学びます。その後、先に進んで独自に書き込むことができます。
jfs 2009年

4

学期のプロジェクトになるように設計されたシンプルで基本的なOS開発チュートリアル。基本的なコンポーネントを備えたOSを構築する手順を説明します。初心者にとって非常に良いスタートです。関連論文はこちら


素晴らしいリソース。この論文では、Nachos(2500行のコード)、OS / 161(11000)、MINIX(30000)、GeekOSについて言及しています。各大学の公式ページにアクセスすると、ソースコード、シミュレーター、ツール、および年間の割り当てが表示されます。
limitcracker 2013



3

www.mosa-project.orgで、Managed Operating System Alliance(MOSA)プロジェクトを確認してください。彼らはC#でAOT / JITコンパイラと完全に管理されたオペレーティングシステムを設計しています。一部の開発者は、非アクティブなSharpOSプロジェクトに所属しています。


3

私がしてきたおもちゃにコスモスで、「オペレーティングシステムのプロジェクトはCIL準拠した言語で完全に実装されています。」それはC#で書かれているので、それは私の路地のすぐ上でした。私のように、オペレーティングシステムを構築したことがない人にとって、「Hello World」オペレーティングシステムをすぐに実行できるようになったことは、実際にはかなりクールでした。



3

上記のように、OSDev Wikiは(はるかに)OS開発の最良のソースです。ドイツ語を話すあなたにとって、lowlevel.eu Wikiも素晴らしいです。比較的未知のIncitatus OSで、ユーザースペースアプリの小さなセットを備えたシンプルなカーネル。OS開発の複雑なトピックを理解するのに最適です。


2

Movitzは、Common Lispで記述された「金属上」で実行されるLisp環境です。残念ながら、Movitzのメインページの一部のリンクはアクセスを拒否しますが、tracページからソースコードをダウンロードしてコンパイルする方法の説明を見つけることができます。また、このページのアーカイブに準備済みの画像があります

私見これは、現在利用可能なハードウェアでLispマシンの概念を復活させるので、最も興味深いものです。商業的に失敗したが、これはアイデアが悪いことを私に証明していない。

Unixの嫌いなハンドブックは、Unixとその派生物の概念を半真剣に否定する楽しい本です。多くのセクションでは、Lispマシンのコンセプトがいかに優れているかについて議論しています。


2

これは、「ゼロからシンプルなオペレーティングシステムを作成する」という論文です。ブートローダーの作成、x86-32プロテクトモードの開始、Cでの基本的なカーネルの作成について説明します。すべてを詳細に説明するのは良い仕事のようです。


私はこの本を読み、そのコードに基づいて開発しました。そのような本から始めるのは素晴らしいことです。
user3405291 2018年


1

プログラマーのための興味をそそる質問。WindowsやMacのようなOSを構築するには長い時間がかかるでしょうが、シンプルなOSを構築したい場合は、最善を尽くすことができます

  1. アセンブリ言語、CおよびC ++に集中する必要があります。これらの言語に精通している必要があります。
  2. 最初にOSの仕組みに関する優れた本を読んでください[Google it]、次にWiki OSからすべての情報を読んでください
  3. YouTubeで「アセンブリ言語で独自のOSを作成する方法」を検索してください。ビデオ
  4. Linux OSのソースコードをダウンロードして自分でコンパイルし、自分でコードを変更してみてください
  5. これで、経験豊富なOSエディターになりました。MinixQNXをダウンロードし、それらを使用して開発を開始して、こちらからMinix DocQNX Docからドキュメントを入手してください。

これで、OSの作成で修士号を取得しました(完全に少しだけではありません)。この知識を友人に配布し、Mac、Linux、またはWindowsと同じくらい強力なOSを作成しようとします。


編集者は私の回答を編集してhttp:とwwwの間にあるスペースを削除してください。私は新人なので、私はそれほど高いrepuを持っていないので、plzが私のためにそれを行います
BharatKhanna

1

基本的なオペレーティングシステムを作成すると、GUIの作成やライブラリの移植に関するリソースがあまりないため、実際に続行するのは困難です。しかし、ToAruOSを見てみると思いますをに役立つ!

そのOSの表面下にあるコードは非常に単純です!しかし同時に、cairo、python、(まだではありませんが)sdlなどを移植して共有メモリを作成し、独自のウィジェットツールキットも作成しました。すべてCで書かれています。

もう1つの興味深いOSはpedigreeOSです。JamesM(jamesMのカーネルチュートリアルの背後にいる人)によって作成されましたています。ToaruOSよりも多くの機能を備えていますが、サイズが大きく混乱します。

とにかく、これらの2つのOSは、特にToAruOSに大きく役立ちます。


1

基本的なオペレーティングシステムの開発を始めたとき、基本的なオペレーティングシステムの踏み台のような基本的なガイドが必要でした。頭がゆるまないようになりました。

まったく何もないところから作成したい場合(純粋なアセンブリコード)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.