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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Q&A

解決済

4回答

2408閲覧

OSとハードウェアについて

eggpol

総合スコア60

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

3グッド

3クリップ

投稿2016/11/11 05:40

少し大雑把な質問になるかもしれません....
ハードウェアからみたOSの構造が謎です。というのも、OSを入れる際ディスクを入れて入れますよね?あれでなぜOSが入るのかパソコンの内部構造がとても気になります。
自分は、プログラミング経験者で、もっと低いレイヤーを知りたいと思いアセンブリ言語を学びました。しかし、肝心の画面に出力したりするときはOSのシステムコールを読んでしまいハードウェアがなにをしているのかさっぱりわかりません。
また、CPUを作ると教本を読みアナログ回路でCPUの簡単な構造を把握しました。アセンブラのシステムコールを呼ばない基本的なpop pushなどの機能はハードウェアから理解しました。しかし、どうもOSの機能がハードウェアから理解できません。
少し質問がまとまっていないかもしれませんがよろしかお願いします。

tu_fukuda2, mit0223, sakana009👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

コンピュータの原理を知りたいという、とても良い方向からアプローチしていると思います。
しかし、かなり長い道のりであることも事実です。がんばってください。

ハードウェアからみたOSの構造が謎です。というのも、OSを入れる際ディスクを入れて入れますよね?あれでなぜOSが入るのかパソコンの内部構造がとても気になります。

パソコンが起動するときに最初に実行するプログラムは OS のカーネルのプログラムではなく、ROMやフラッシュメモリに格納されている BIOSです。BIOSには基本的にキーボード、画面出力、CD−ROM、ハードディスクなどのI/Oルーチンとブートローダを起動する機能が含まれています。最近のBIOSはもっと高度になっており、BIOS自身の設定画面を開く機能や、マウスやネットワークまでアクセスできるようになっています。

それで、BIOSがどのようにCD-ROMやハードディスクからOSのプログラムを読み出して実行するかについては、歴史的な経緯がありますが、基本的にはIBMがPC-ATというパソコンの仕様を公開したところから始まって、現在は標準化されています。

参考:ブートコードの実行
参考:OSのようなもの

しかし、肝心の画面に出力したりするときはOSのシステムコールを読んでしまいハードウェアがなにをしているのかさっぱりわかりません。

システムコールを呼ぶとソフトウェア割り込みという仕組みで、カーネルのコードにジャンプするので普通のサブルーチンと異なるように見えるかもしれませんが、基本的に機械語を読みながらCPUがプログラムを実行するという構造には変わりありません。

CPUとI/Oデバイスとの間のやり取りについては、デバイスドライバやBIOSのコードで実行されるので、そちら側で何をしているかを見れば良いと思います。

参考:デバイスドライバに関する知識
参考:入出力システム

投稿2016/11/11 06:54

mit0223

総合スコア3401

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

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

eggpol

2016/11/12 11:34 編集

少し前にバイナリエディタを使ってソフトウェアの根幹をしるということを試みました。しかしやっぱりOSのAPIのバイナリを知る必要があり、少し萎えてしまいました.... BIOS のコードということで、少し勉強してみようかと思いました....
mit0223

2016/11/12 23:25

コンピュータの電源投入時にCPUが最初に実行する命令がどんなものか知りたいということでしょうか?ちょっとわたしもググってみましたが、 http://park12.wakwak.com/~eslab/pcmemo/boot/boot2.html がかなり詳しいです。ここを参考にしながら BIOS のコードを逆アセンブルすることも可能かもしれませんが、さすがにそこまでは必要ないのではないかなとも思います。しかし、 http://www.exp.org/memorandum/memo03.html とかを参考にやればできるかもしれません。
mit0223

2016/11/12 23:32

あと、I/O の仕組みのほうは参考URLにあげたとおり、ポート マップド I/O か メモリ マップド I/O になるわけですが、それとハードウェアとの関係を知りたいということであれば、昔のワンボードマイコンを調べるというのも手かもしれません。現在のパソコンはチップセットと呼ばれるオールインワンの I/O モジュールでなんでもやってしまうので、わかりにくいですが、ワンボードマイコンの時代は小さな I/O 用のLSIがCPUに直結されていたので理解しやすいかもしれません。 https://ja.wikipedia.org/wiki/TK-80 https://www.amazon.co.jp/%E5%BE%A9%E6%B4%BB-TK%E2%80%9080-%E6%A6%8A-%E6%AD%A3%E6%86%B2/dp/4756134017
eggpol

2016/11/13 20:16

非常に有益な情報ありがとうございます 頑張ってみようと思います!
guest

0

’30日でできる! OS自作入門’という本が販売されています。
Amazon
まずはこんな本を読まれるのはどうですか?

投稿2016/11/11 05:46

MasahikoHirata

総合スコア3747

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

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

eggpol

2016/11/12 11:26

図書館でチラッと見たことがあるのですがc言語でOSを記述していたように思います。高級言語でOSを構築していると解釈しましたが違うのでしょうか?
guest

0

自分も勉強中ですが、
RaspberryPi
ベアメタル
で検索するといろいろ情報があります。

投稿2016/11/11 06:24

himakuma

総合スコア952

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

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

eggpol

2016/11/13 10:55 編集

私自身ラズパイといったマイコンを使ったことがあります。 arduinoを使って色々と制御したのですが、結局複雑なICや、コンデンサのインピーダンスの計算が入ってきたところでワケがわからなくなり今に至ります.....
guest

0

アセンブラのI/O命令で周辺デバイスの制御をするところは学ばれましたか。ディスクからプログラムを読み込み実行するイメージができると思います。
その前段としてブートストラップ=電源ONにしたとき、ROMからプログラムを読み込み最初になにをすべきか(ディスクを読む)などがわかれば、ご自分ですべてを作れるくらいのイメージができると思います。

投稿2016/11/11 06:11

katsuya141

総合スコア367

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

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

eggpol

2016/11/12 11:27

はい、IOに関しては学んだつもりですが抜けているかもしれません... 結局デバイスに組み込まれているcpuを理解しないとダメですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問