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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C

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

Q&A

解決済

6回答

3011閲覧

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

naokun

総合スコア13

C

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

0グッド

4クリップ

投稿2018/04/29 12:30

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

Linuxのソース読みましょう

投稿2018/04/29 12:32

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naokun

2018/04/29 12:33

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

2018/04/29 12:36

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

2018/04/29 12:38

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

2018/04/29 12:41

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

2018/04/29 12:43

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

2018/04/29 12:44

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

2018/04/29 12:45

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

2018/04/29 12:56

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

0

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

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

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

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

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

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

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

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

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

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

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

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

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

投稿2018/05/01 04:24

sab

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2018/05/03 10:24

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

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

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

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

投稿2018/05/01 11:47

編集2018/05/01 13:05
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2018/05/01 03:11

a_saitoh

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/05/01 13:13

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

0

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

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

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

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

投稿2018/04/29 12:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naokun

2018/04/29 12:40

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

退会済みユーザー

2018/04/29 12:41

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

2018/04/29 12:44

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

2018/05/02 02:25

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問