質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • C

    3344questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C言語を使ってOSを作りたい

解決済

回答 6

投稿

  • 評価
  • クリップ 4
  • VIEW 491

naokun

score 5

一からなんて贅沢は言わないのでC言語(苦しんで覚えるC言語というサイトに書いてある事は大体使いこなせる.....はずです)を使ってOSを作ってみたいです。
最終的な目標としては
「OS上でCソースコードをコンパイルし実行する」
ということを掲げています。コンパイラを自作するなんて知識はないので、OSを作ってからオープンソースのCコンパイラ(clangとかgcc)を使えるようにして実行できる環境を構築したいと考えているのですが何処を調べても〇〇という書籍に〜としか書かれていません。
学生ですが経済的な事情はそこまで問題ないです。しかし、今までお金をかけて書籍を何冊も買って失敗したことが何回もあるので(Cを全てネット上で学習したのもこの為)本当に、極力、お金はかけたくないです。
これらを踏まえて、C以外に身に付けるべき知識(カーネルの基礎、CPUやメモリについては大体理解しています)を教えてください。一回アセンブリというものに挑戦してみたのですが、理解できなくて挫折してしまいました。必要だとしたら、何か勉強する上でのアドバイスはありますか?努力は惜しまないつもりです。何方か教えてください、お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+5

Linuxのソース読みましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/29 21:33

    Linux......というよりは1から作りたいんです。どうにかならないでしょうか?

    キャンセル

  • 2018/04/29 21:36

    https://www.amazon.co.jp/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B-OS%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80-%E5%B7%9D%E5%90%88-%E7%A7%80%E5%AE%9F/dp/4839919844
    この本を以前買ったのですが、アセンブリの部分で挫折してしまいました。

    キャンセル

  • 2018/04/29 21:36

    まず、PDP-11を用意します。

    キャンセル

  • 2018/04/29 21:38

    PDP-11というのは、コンピューターの一種の様ですが購入する、ということでしょうか?

    キャンセル

  • 2018/04/29 21:41

    見本がそこにあるんだから、それ読まないともったいない

    キャンセル

  • 2018/04/29 21:43

    わかりました、オープンソースのLinuxのコードを読んでみます。

    キャンセル

  • 2018/04/29 21:44

    Linuxの歴史を読まれる事を勧めます。(他でも良いですが、、)
    カーネルだけでは何もできない事を知っていますか? 或いはワンボード程度の小規模のものを考えているのでしょうか?

    キャンセル

  • 2018/04/29 21:45

    カーネルとシステムアプリケーションでOSは構築されている、と解釈しているのですが、間違っているんでしょうか?

    キャンセル

  • 2018/04/29 21:56

    OSの定義にもよりますが、システムアプリケーションが無いと何もできません。。。。と思ったが、組込み系だと、タスク管理程度でもOSでした。その程度のOSだと上記の本の言うように、30日でもできるかも。ただし、アセンブラ or ハードウェアの知識も必須です。どの辺を目標とするか?
    PDP-11 .. Unixの開発されたミニコンです。博物館にあると思います。

    キャンセル

+1

"OSを作ってみたい"、と言うのはなかなか豪気ですね。
からかっている訳では無く、正直一寸うれしいです。

学生さんと言う事ですから、現時点で"最終的な目標"とは言っても、その辺りは今後もいろいろ変遷する事かとは思います。

逆に言えば、定期的に状況を振り返って、目標を見直す行為は実施した方が良いです。スケジューリングの見直しを習慣化させる事は、先々役にたちます。

また、仮にエンジニアを目指されているのであれば、OS部分に興味を持たれるのも悪くは無いと思います。基礎部分の知識は後々他の技術情報の習得にもそれなりに役立ちます。
但し、かけた手間に対しメリットが割にあうか否かはそれぞれですが。

ただ、残念ながらアセンブラを避けるのは難しいと思います。

アセンブラも CPU 依存でいろいろありますが、C言語が習得出来ているならアセンブラも何とかなると思います。
逆にアセンブラを理解していると、C言語の理解はかなりスムーズです。
経験則ですが、複数のアセンブラを経験した後 C言語に着手した時は、C言語 がアセンブラにどう翻訳されるかほとんどイメージ出来ましたので、習得はかなり楽でした。例えば、スタックの具体的な挙動をイメージ出来た等は大きかったと思います。

尚、いきなり本格的な OS に向き合ってしまうと、多分、(裏方な部分ばかりで実感が湧きにくいので)根気が続かないと思います。

で、ここから本題に対する個人見解です。

他で linux との意見が出ていましたが、まずは既存のコードを参考にされた方が良いです。いきなり巨大なものに向かうのは無茶ですから、最初はワンボード程度の小規模のものから始めた方が得策かと思います。

"イテレーション"と言えるものに該当しますが、反復しながら経験を積まれた方が、実感も得られますので継続すると思います。

いきなり巨大なものを相手にすると、間違いなく挫折するでしょう。

ショップやその他有識者から意見を頂きながら、比較的短期間で回せる課題をこなしながら、少しずつ大きな課題にトライして見ては如何でしょうか。

OSと言っても、昨今はその範囲に対する定義が曖昧です。
いろいろ試してみて、興味を持たれる部分を探られる方が現実的かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

他の方もおっしゃっていますが、まずは既存のコードを参考にして、OSにはどんな機能が必要なのか、どうやって実現するのか、といったことを学ぶことをおすすめします。そして、そのOSに機能を追加する、あるいは、セキュリティホールを見つけるなど、徹底的にいじり回して理解を深めていってください。そうしているうちに、Cだけでなくアセンブラの知識もつくでしょう。そしてなにより、自分で一からOSを作るにはどうしたらよいのかイメージが湧くようになるはずです。

教材としてxv6という教育用のOSをおすすめします。これは(PDP-11で動いていた)Unix V6を参考に開発された、x86プロセッサ向けのシンプルなCLIベースのOSです。ソースコードが公開されており、QEMU x86エミュレータで動作します(実機でも動作すると思います) 100ページにわたる英語の解説書があり、理解を助けるための練習問題(Exercises)もあります。

解説書の内容を大雑把に日本語に翻訳された方もいらっしゃいますので、とっつきやすいと思います。翻訳のベースとなった内容は少し古く2012年のものになりますが、ざっと見た感じ、いまでも十分通用しそうです。

xv6のソースコードや解説書の原本などはこちらから入手できます。

はりぼてOSの本をすでにお持ちのようですので、それを参考にウィンドウシステムを追加するのも面白いかもしれませんね。

追記
こんな改造も面白そうですね。

公開されているコードは、1万行弱。仮想記憶を実装したり、スケジューラを改造したり、ARMに移植したりしている人もいる。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

努力は惜しまないつもりです。

努力は惜しみましょう。実らない努力は単なるコストです。

極力、お金はかけたくないです。

お金はかけましょう。挫折しないように教えてくれる人と個人契約したり、サポートしてくれるサービスを利用しましょう。その為のお金がないなら先に稼ぎましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/29 21:40

    具体的に何が必要なんでしょうか?自分のイメージとしては大雑把にコンピューターとインストール用の空DVDしか思いつかないのですが......もちろんコンパイラやバイナリエディタなどを別として

    キャンセル

  • 2018/04/29 21:41

    日本語勉強した方が良いかもね

    キャンセル

  • 2018/04/29 21:44

    サービス等に必要......と言っていますが、今までの開発スタイルなどからしても、やはり独学で全てやりたいと考えています。それが無謀だとしても。先に稼ぎましょうと言われておりますが、学生がそんな簡単にお金稼げないでしょう........

    キャンセル

  • 2018/05/02 11:25

    機材としては、開発に使うPC,自作OSを動かす対象の機械(開発PCで原理的には兼用可能だし、仮想マシンでもOK)、OSブートメディア、OSブートメディアの書き込み手段。これだけ必要ですね。あとは知識技能と時間。コンパイラは無料のコンパイラで足りるはず。ただ、書籍だけの独学ではどうせ無理、と多くの人が思うくらい難しいこと(OSを自作しようと思い立つ人は多いがたいていの人は途中であきらめて投げ出す)だということはまずは覚悟しておくことが必要でしょう。たとえばファイルシステムは独自のは作らずに既存の方式を採用するとか、難易度を下げる手法はいくつかあります。

    キャンセル

0

まずは計算機アーキテクチャとCPUの機械語命令の知識が無いとOSは書けません。この辺りは、具体的なところはCPUメーカーの出しているデータシートなどを読めばいいので無料ですが、データシートが読めるまでになるための初歩のところは本を買わないとどうしようもないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/01 22:13

    機械語命令を知らなくても、既存OS上に仮想OSなら、OK。
    練習用なら、そっちの方が簡便かも。

    キャンセル

0

BAがでてますが^^;
私が初めて触れたOSはCP/Mでした。
今から考えるとおもちゃみたいなOSですが、アセンブラもPascalもCP/Mで覚えました。今の私があるのはそのおかげだと思っています。いまだにソースがダウンロード(8080 and z80 アセンブラ:4000行程度Digital Research Source Code)できるので見てみるのもいいかも?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    CentOS6系列のインストールしたばかりの状態でcソースをコンパイルしたい

    CentOS6系列においてインストールしたばかりの状態でC言語のソースファイルをコンパイルしたいです. 現状としてGCCは入っていないようですがglibcがあるのは確認できました.

  • 解決済

    C++の規格によってコードを変える方法

    C++11で使えるようになったunsorted_mapを使いたいと思うのですが、もしそれが定義されていないならmapで代用したいです。 ポータブルな解決方法はありませんか? //

  • 解決済

    [CUDA] "<<<" のエラーについて

    前提 Windows 10  Cuda Toolkit 7.5  Visual Studio 2013 追加インクルード:Toolkit内Cuda Samples の in

  • 解決済

    Cygwin の ✗ Failure (retv = 10)

    現在コンパイラ:Cygwin テキストエディタ:emacsを使いC言語のプログラミングを行っているのですが、 出力後に ”✗ Failure (retv = 10)” と

  • 解決済

    C言語 空白、タブ、改行を数えるプログラムについて

    C言語に関する質問です。 自分がいま使っているプログラミング言語Cという参考書の問題に 空白、タブ、改行を数えるプログラムをかけというものがあります。 一応作ってみた

  • 解決済

    gccがソースでインストールできない

    CentOSにgccをインストールすると以下エラーで、コンパイラがないと怒られました。 コンパイラのインストールがしたいのに、コンパイラが無いとはどうしたらいいか分かりません。

  • 解決済

    【Qt】QSystemTrayIcon::showMessageの文字化け

    Qt Creatorで以下のようなコードを書くとタイトルが文字化けしたデスクトップ通知が出てきます。 if (i == 0) {

  • 解決済

    コンパイラのコンパイラ

    一番最初にC言語の開発をした人はどうやってコンパイラを用意したのでしょうか?? gccはC言語でできていると思います。 makeによってコンパイラであるgccをコンパイルするこ

同じタグがついた質問を見る

  • C

    3344questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。