• ベストアンサー

OSのないプログラム?

例えば銀行のATMや携帯のアプリケーションなどは恐らくOSがないと思うのですが、ああいったソフトはC言語などので書けるのですか? また書けるとしてもシステムコールのようなものがOSがないなら使えない(ライブラリ関数等が使えない?)と思うのですがその辺はどうなっているのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.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用のクロスコンパイラを利用することが多くなります。

_yamamoto_
質問者

お礼

何度も非常にお詳しいお答えありがとうございました。 やっと頭のもやが取れた感じです。僕の知らない世界が見えてきた気がします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.7

> ”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であった場合、直接ハードウェアをドライブするプログラムはデバイスドライバとして実現し、駄馬椅子ドライバに対するインターフェースとしてのシステムコールも自前で作成することになります。

_yamamoto_
質問者

お礼

大変お詳しいお答えありがとうございます。 あと少しだけよろしいでしょうか? >Free Standing Environmentでは「必ず○○がある」という保証が一切ありませ>ん。 最低でC言語の決まり(制御文やプリプロセッサ)などは存在し、関数は存在しない。関数は自分でアセンブラで書くという解釈は間違いですか? また、Free Standing EnvironmentとHosted Environmentの物としての違いはコンパイラが違うということですか?

全文を見る
すると、全ての回答が全文表示されます。
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.6

コンピュータ草分け時代から40年ほどコンピュータと付き合ってきました。 初期のコンピュータは主記憶8KB(8MBではありません)、OSなんてもの はありませんでした。補助記憶装置もありませんでした。 アセンブラもコンパイラもなく、1010の機械語でプログラムを組んで、 スイッチでプログラムやデータを設定するのです。これでも?億円位する代物でした。 そのうち、段々、共通部分が集約されOSと言う名が付いて進化を始めました。 人類の原始時代の自給自足から職業と言う専門化が芽生えてきたのと同じです。 今ではOSが巨大化し、OSなしではどうしようもない状況ですね。 前置きが長くなりましたが、OSと言う形で独立させるかどうかは別として、 OSの持つ機能のうち必要なものは必ず組み込む必要があります。 ところで、誤解があるようですが、C言語は本来UNIXというOSを書く ために作られた言語です。だから、既に述べられている通り、OSの持って いる機能をC言語で自分で書くことは充分可能です。 アセンブラーであれば、何でもできるのは当然の話です。C言語もコンパイル すればアセンブラー(というか機械語)になるわけですから。

_yamamoto_
質問者

お礼

ありがとうございます。 いろいろ勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.5

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の母国」と言えます。

_yamamoto_
質問者

お礼

ありがとうございます。 実はまだよくわかっておりません。 ”OSを書く”とありますがC言語でOSを書くときの環境はどのようなものなんでしょう?ご回答の中にある”Free Standing Environment”なんでしょうか? ”Free Standing Environment”で提供されているライブラリ関数というのは  ”Hosted Environment”のシステムコールにあたるものがCPUを直接操作するアセンブラ(機械語)に置き換えられたものと解釈していいのでしょうか? すいませんがお暇な時にでもお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

いえいえどうして、ちゃんと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検索すると記事が出てきます。業界標準はこれから出てくる戦国時代のようですが。

_yamamoto_
質問者

お礼

ありがとうございます。 OSというとWindows,UNIX・・・ぐらいしか思い当たりませんでしたが僕の知らない世界がいろいろあるのですね。勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

例に挙げられてるものにはOSのってますよ。 携帯とかだと、アドレス帳やメールなどのファイルを操作しなければいけないし メール書いてるときでも着信があったらとか 考えなきゃいけないことが多すぎるので、だいたいOSがのっています。 もちろんOSののっていないものをあります。 DVDプレイヤーだと半々くらいじゃないんでしょうかね。 そういうものでも開発するためにC言語は使われています。 で、ご質問のシステムコールについてですが、 開発環境&開発対象次第です。 システムコールが存在しないものもあります。 何番地から何番地にはこういうデータが入ってるはずだから ということをソフトウェア開発者が意識しながらコーディングしています。 それでもアセンブラで書くより数倍楽ですよ。

_yamamoto_
質問者

お礼

ありがとうございます。 OSがのっていないのもあるということはOSがない環境用のコンパイラというものがあるのですか?

全文を見る
すると、全ての回答が全文表示されます。
noname#18951
noname#18951
回答No.2

100%ある、とは言い切れませんがほとんどありますよ。複雑化している現状で 自社OS(あるいはそれに準じたもの)を開発するメリットはほとんどありません。 ATMの内部には疎いのでよく分かりませんが、少なくとも携帯にはTRONという リアルタイムOSがよく使われます。結果的にコンパイラがあれば開発可能です。 C言語のランタイムライブラリは自力で書くこともできますのでそうすればOS なしでも開発することは可能です。ランタイムライブラリをアプリに抱え込め ばいいでしょう。システムコールはNo.1の方がおっしゃっているように一般的 なC言語の使用にあわせやすくするための機能を提供しているだけに過ぎません。

_yamamoto_
質問者

お礼

ありがとうがざいます。 ”TRON”ですか。初めて聞きました。

全文を見る
すると、全ての回答が全文表示されます。
  • mokonoko
  • ベストアンサー率33% (969/2859)
回答No.1

そもそもシステムコールはCPU等とのやり取りにおいて一連の作業を OS側が吸収するだけのものです。 ライブラリ関数に関してもそういうやり取りをするための特別なOS (というより、ユーザーインターフェースではないOS)が制御チップ メーカー等から出ているので、その上でプログラムを組みます。 そういう意味でライブラリは多少扱いが変化しますね。 printf()ですらATMのパネル上なのか、開発端末上なのかを 意識することになります。

_yamamoto_
質問者

お礼

どうもありがとうございます。 ATMなどにもOSがやはり存在するのですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • システムコールと標準ライブラリの正しい使い方を教えて下さい

    システムコールって何でしょうか。 C言語初心者なので、変な質問だったら、すみません。 システムコールと標準ライブラリにおける、関数の違いを教えて頂けませんでしょうか。 例えばファイル入出力で用いる openとfopenは何が違うのでしょうか? 私はそもそも、システムコールというものが判っていない状態です。 いつも標準ライブラリを参考にしていたものですから・・。 更に似た使い方をすると思いますが、使える範囲等どちらが広いのでしょうか。 よろしくお願いします。

  • OSについて。

    情報の宿題で 「OSを次の語を使って説明しなさい。アプリケーションソフト、ハードウェア、システムコール」 という問題があるのですが、うまく文章をまとめられません・・・。 とりあえず、次のように考えてみたのですがどうでしょうか? あと、もっと簡単に説明する方法はないでしょうか? アドバイスお願いします。 OSとはコンピュータにおいてハードウェアへのインターフェースを抽象化してアプリケーションソフトに提供するソフトウェア。各ソフトウェアが個別に対応していては非合理なため、システムコールという処理を利用する。

  • PASCALプログラムに関して

    PASCALでプログラムを書いていて 実行時間を計算したい状況です。 PASCALではC言語でのtime関数にあたるような ライブラリは存在していますか? またはこのような関数がなくても実現可能な方法はありますか? 回答お願いします。 ------------------------------------- OS:Windows Vista CPU:Core 2 duo 1.66GHz memory:1GB Editer:pcpad -------------------------------------

  • イベントドリブン(C言語)

    イベントドリブン(C言語) こんにちわ、質問があります。 とあるイベントドリブン型のプログラムについて説明をされました。 ソフトはOS(元はハード)からManagerと言われる管理タスクにイベントが 飛んでいき、Managerから各タスクの関数がコールされる仕組みだそうでです。 また、それだけでなくOSから各タスクのコールバック(?)関数がコールされる事も あるそうです。 ◆質問 ここでいうイベントとは何なんでしょうか? 結局C言語なので、イベントと呼ばれているモノは関数コールなんでしょうか? C言語でイベントドリブン型プログラムを作成した事がある方、 自分ならこう作るぞという方、教えてください。

  • Sun OS(WS)向けプログラムをPC-Linux環境に移植する手間について

    ワークステーション上のSun-OS向けに開発されたC言語で開発されたソフトウエアをPC-Linux上に移植したい場合、どのような改修が必要になるでしょうか? 基本的にはLinuxクローンなので、かなりそのままでも動きそうな気がするのですが。 システムコールなどでワークステーション特有とかSun-OS特有なものってあるのでしょうか? 両方とも多少開発経験があるのですが、あまりシステムコールを多用してなかったものでよくわかりません。(特にPC-Linux側) わかる方がいましたらご回答願います。

  • C++プログラムをCで呼び出したい

    こんにちは。質問させていただきます。 現在、Linux/GCC3.2.3系でC言語の開発をしています。 私自身のレベルとしては、C言語での実務は1年未満。C++はゼロ。本業はJavaプログラマを数年やっております。 さっそく本題です。 既にC++で作成されたある一連のプログラム群(20本程度)があり、これらC++の関数をC言語で作成されたプログラムから呼び出して使用したいと思っています。 C++プログラムは既にテスト済みなので、これらのソースは基本的には手を加えず、そのままライブラリ化などして使用したいと考えています。 そこで質問なのですが、C言語から呼び出せるような形式でC++ソースをライブラリ化する方法と、C言語からの呼び出し方を教えていただけないでしょうか?

  • 銀行システムについて

    銀行システムについて興味があっていろいろと 調べているのですが、秘密なのかインターネット で、それらしい記事を見つけることができなくて 困っています。仕事とは、全く無関係のことです。 聞きたいのは、次のようなことです。 (会社などの引っかからない程度か、それを破っ てまでご指導くださる方どちらも大歓迎です。) 銀行システムの概要 (大まかにどのようなことを行う物なのか、流れ) 装置について (どのような装置が必要で使われているか、使われている大型コンピュータ の詳細について何を使っていたか。どのような装置(機械)が必要か) ソフトについて ・銀行システムを実現するのにどのようなソフトを 作るか?必要なアプリケーションの種類、具体的にわかるとうれしいです。) ・大型コンピュータのOSの種類 ・データベースが使われていることが予想されますが ソフトは何を使っていたか? ・使われる言語 危機の回避 ・データのバックアップのしくみなど ATMについて ・ATMのしくみについて ・ATMの機械に使われている機械のOSの種類 ・ATMの装置自体どのようなコンピュータなのか? 普通のパソコンとかわらないのか? ・ATMの大型コンピュータとの通信のプロトコル の種類 ・前にATMにカードを詰らせてしまい電話で対応 してもらったら遠くからATMを操作しているようで カードが向こうの遠隔操作出てきた。 Telnetを使っているんですかね? お返事待ってます。

  • プログラムのループ1周に費やした時間

    OSとしてUbuntu9.10を使用しており, C++のプログラムを作成しています. 無限ループを使うプログラムなのですが 1周あたり何ms費やしているのかを知るには どのような関数,システムコールを使えばよいですか. できるならば,精度は1ms程度が良いです.

  • Windowsのシステムコール呼び出し

    アセンブラでシステムコールを呼び出したいのですが、 Linuxとかだとシステムコールの一覧みたいのが載ってるのですが、 Windowsのシステムコールの一覧みたいのが見つかりません。 一覧が載っているようなサイトってありませんか?? とりあえずLinuxの11番(C言語で言うexecv関数)みたいのが使いたいのですが。。。

  • プログラム・・・・

    プログラムには素人ですが、気になるので教えてください。 c言語 java visual Basic とかありますが、これはまったく違うものなんでしょうか? 例えば、c言語を極めた人が、javaとかはまったくの素人とかがあるのかが気になりました。 windows上のソフトを作る場合、何でも作れる言語とはなんなんでしょう? 例えば、それを完全に極めて、ゲームとかもすごく作れるようになったとして、その人に簡単なOSを作る課題を与えたとします、たった一人で、簡単なOSを作るのにどれだけの日数が掛かるのでしょう?

このQ&Aのポイント
  • 外資系や海外の企業での働き方について疑問に思ったので投稿しました。
  • 海外や外資系の企業では、個人の成果や上司次第で「明日から来なくていい」と即日解雇が珍しくないと聞きます。
  • 外資系や海外の企業では、担当者の辞める際の引継ぎはどのように行われているのか気になります。部署間での共通内容や各企業の進め方も異なることでしょう。
回答を見る