- ベストアンサー
OSのないプログラム?
例えば銀行のATMや携帯のアプリケーションなどは恐らくOSがないと思うのですが、ああいったソフトはC言語などので書けるのですか? また書けるとしてもシステムコールのようなものがOSがないなら使えない(ライブラリ関数等が使えない?)と思うのですがその辺はどうなっているのでしょうか? よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
Free Standing Environmentについて。 プリプロセッサ構文については基本的な部分はサポートされますが、環境依存の#pragmaで多くの設定が行えるものが多いようです。 C言語の文法に関する部分はサポートされます。 多くの場合、機能拡張がなされており拡張の詳細は実行環境に依存します。 ROM化対応コンパイラでは定数はおろか関数まで配置指定できるものがあります。 例) void main(void) : 0x0000 { ..... } main関数を0x0000のアドレスに配置する。 また、リンカで配置指定するもの、コンパイラとリンカ以外にロケータ(配置だけを行うツール)が付属するものもあります。 関数に関しては「全く存在しないもの」、「低レベル制御ライブラリだけが存在するもの」、「OSの支援を期待しないライブラリは付属するもの」があります。 もちろん、無い機能は作ることになります。 一般的に低レベル制御ライブラリが存在しない場合はアセンブラで低レベル制御ライブラリを構築することになります。 Free Stranding EnvironmentとHosted Environment両方をサポートする汎用コンパイラは存在します。 特定CPUだけをターゲットとするFree Standing Environment専用のコンパイラも存在します。 一般的にFree Standing Environmentプログラミングはクロス開発です(実記環境にキーボードやディスプレイの存在が期待できないため)。 結果、実行環境のCPU用のクロスコンパイラを利用することが多くなります。
その他の回答 (7)
- toysmith
- ベストアンサー率37% (570/1525)
> ”OSを書く”とありますがC言語でOSを書くときの環境はどのようなものなんでしょう?ご回答の中にある”Free Standing Environment”なんでしょうか? そうです。 既存のOSによるプログラム実行支援が受けられない環境です。 > ”Free Standing Environment”で提供されているライブラリ関数というのは ”Hosted Environment”のシステムコールにあたるものがCPUを直接操作するアセンブラ(機械語)に置き換えられたものと解釈していいのでしょうか? Hosted EnvironmentとFree Standing Environmentの最大の違いは多様性です。 Hosted Environmentではstdio(printfやfopen)がサポートされます。 つまり、コンソールまたはそれに代わるようなユーザインタフェースが存在し、ファイルシステムがぞんざいします。 Free Standing Environmentでは「必ず○○がある」という保証が一切ありません。 結果、Free Standing Environmentにおけるライブラリは標準化されることがありえません。 入出力デバイスがが一切無いかもしれませんし、点滅可能なLEDが数個装備されているだけかもしれません。 今からOSを書くような場合だとハードウェア的にはHosted Environemntをサポート可能な環境と言うこともありえます。 よって、Free Standing Environemtのライブラリは > ”Hosted Environment”のシステムコールにあたるものがCPUを直接操作するアセンブラ(機械語)に置き換えられたもの というように一般化して考えることが出来ません。 環境(と作成するソフトウェア)によって違うのです。 ことによるとライブラリのサポートは一切無い場合があります。 この場合、直接ハードウェアをドライブするようなプログラムを作成することになります。 しかし、作成するプログラムがOSであった場合、直接ハードウェアをドライブするプログラムはデバイスドライバとして実現し、駄馬椅子ドライバに対するインターフェースとしてのシステムコールも自前で作成することになります。
お礼
大変お詳しいお答えありがとうございます。 あと少しだけよろしいでしょうか? >Free Standing Environmentでは「必ず○○がある」という保証が一切ありませ>ん。 最低でC言語の決まり(制御文やプリプロセッサ)などは存在し、関数は存在しない。関数は自分でアセンブラで書くという解釈は間違いですか? また、Free Standing EnvironmentとHosted Environmentの物としての違いはコンパイラが違うということですか?
- ymmasayan
- ベストアンサー率30% (2593/8599)
コンピュータ草分け時代から40年ほどコンピュータと付き合ってきました。 初期のコンピュータは主記憶8KB(8MBではありません)、OSなんてもの はありませんでした。補助記憶装置もありませんでした。 アセンブラもコンパイラもなく、1010の機械語でプログラムを組んで、 スイッチでプログラムやデータを設定するのです。これでも?億円位する代物でした。 そのうち、段々、共通部分が集約されOSと言う名が付いて進化を始めました。 人類の原始時代の自給自足から職業と言う専門化が芽生えてきたのと同じです。 今ではOSが巨大化し、OSなしではどうしようもない状況ですね。 前置きが長くなりましたが、OSと言う形で独立させるかどうかは別として、 OSの持つ機能のうち必要なものは必ず組み込む必要があります。 ところで、誤解があるようですが、C言語は本来UNIXというOSを書く ために作られた言語です。だから、既に述べられている通り、OSの持って いる機能をC言語で自分で書くことは充分可能です。 アセンブラーであれば、何でもできるのは当然の話です。C言語もコンパイル すればアセンブラー(というか機械語)になるわけですから。
お礼
ありがとうございます。 いろいろ勉強になりました。
- toysmith
- ベストアンサー率37% (570/1525)
ANSI-CではC言語の実行環境を2つ定義しています。 Hosted Environment: OSまたはモニター(機能の低いOSのようなものと思ってください)の支援を受けられる環境 Free Standing Environment: OSまたはモニターの支援を受けられない環境 C言語の仕様はOSの無い環境も考慮されています。 Free Standing Environmentにおいてプログラムは ・起動元が他のプログラムかハードウェアであるため、int main(int argc, char *argv[])という法則が通用しない ・標準ライブラリの支援を期待できない などの制約を受けます。 (ライブラリについては標準ライブラリでない特別なライブラリが提供されることが多い) もともとOSを書くために作られた言語なので「Hosted EnvironmentこそCの母国」と言えます。
お礼
ありがとうございます。 実はまだよくわかっておりません。 ”OSを書く”とありますがC言語でOSを書くときの環境はどのようなものなんでしょう?ご回答の中にある”Free Standing Environment”なんでしょうか? ”Free Standing Environment”で提供されているライブラリ関数というのは ”Hosted Environment”のシステムコールにあたるものがCPUを直接操作するアセンブラ(機械語)に置き換えられたものと解釈していいのでしょうか? すいませんがお暇な時にでもお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
いえいえどうして、ちゃんとOSはありますよ。 銀行ATMが動いているのは、中心に大型機(IBM,富士通、NEC、日本ユニシスなど)が今もあるはずで、OSがあります。MVS・VSとかVOSK/FSとか富士通のMSPとか。また各社多系統あります。こちらが歴史的には本家本元です。マイクロソフト社は顔を出さない世界です。またオフコンというのも行き渡っており、各社各OSを搭載しています。 C言語はUNIX系統のまたパソコン系統の言語で、大型機には徐々に採用されている分野が出てきていると言う状況でしょうか。銀行をはじめビジネス界ではUNIXはそんなに使われていなかった。アッセンブラとかコボルとか がPLIが優勢でした。 システムコールと同等の考えは大型機にも必ずありこれも 大型機で歴史的に先行しています。入出力割込みなど。 システムコールという言葉はパソコンDOSからうまれたことばです。 大型機システムにも関数ライブラリも必ずあります。 よっぽど限られた単機能か組みこみソフトでない限り 意外にほとんどOSのもとでソフトは動いていると言えます。知らないのが、体験できないのが当然なんですが、1993年WIN3.1が出るまでは中大企業のシステム部 の念頭にパソコンは無かったと言えます。palmコンピュターの世界もPalmOSがあります。携帯のOSも「携帯 OS」でWEB検索すると記事が出てきます。業界標準はこれから出てくる戦国時代のようですが。
お礼
ありがとうございます。 OSというとWindows,UNIX・・・ぐらいしか思い当たりませんでしたが僕の知らない世界がいろいろあるのですね。勉強になりました。
- cherry_moon
- ベストアンサー率36% (37/102)
例に挙げられてるものにはOSのってますよ。 携帯とかだと、アドレス帳やメールなどのファイルを操作しなければいけないし メール書いてるときでも着信があったらとか 考えなきゃいけないことが多すぎるので、だいたいOSがのっています。 もちろんOSののっていないものをあります。 DVDプレイヤーだと半々くらいじゃないんでしょうかね。 そういうものでも開発するためにC言語は使われています。 で、ご質問のシステムコールについてですが、 開発環境&開発対象次第です。 システムコールが存在しないものもあります。 何番地から何番地にはこういうデータが入ってるはずだから ということをソフトウェア開発者が意識しながらコーディングしています。 それでもアセンブラで書くより数倍楽ですよ。
お礼
ありがとうございます。 OSがのっていないのもあるということはOSがない環境用のコンパイラというものがあるのですか?
100%ある、とは言い切れませんがほとんどありますよ。複雑化している現状で 自社OS(あるいはそれに準じたもの)を開発するメリットはほとんどありません。 ATMの内部には疎いのでよく分かりませんが、少なくとも携帯にはTRONという リアルタイムOSがよく使われます。結果的にコンパイラがあれば開発可能です。 C言語のランタイムライブラリは自力で書くこともできますのでそうすればOS なしでも開発することは可能です。ランタイムライブラリをアプリに抱え込め ばいいでしょう。システムコールはNo.1の方がおっしゃっているように一般的 なC言語の使用にあわせやすくするための機能を提供しているだけに過ぎません。
お礼
ありがとうがざいます。 ”TRON”ですか。初めて聞きました。
- mokonoko
- ベストアンサー率33% (969/2859)
そもそもシステムコールはCPU等とのやり取りにおいて一連の作業を OS側が吸収するだけのものです。 ライブラリ関数に関してもそういうやり取りをするための特別なOS (というより、ユーザーインターフェースではないOS)が制御チップ メーカー等から出ているので、その上でプログラムを組みます。 そういう意味でライブラリは多少扱いが変化しますね。 printf()ですらATMのパネル上なのか、開発端末上なのかを 意識することになります。
お礼
どうもありがとうございます。 ATMなどにもOSがやはり存在するのですね。
お礼
何度も非常にお詳しいお答えありがとうございました。 やっと頭のもやが取れた感じです。僕の知らない世界が見えてきた気がします。