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用のクロスコンパイラを利用することが多くなります。
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であった場合、直接ハードウェアをドライブするプログラムはデバイスドライバとして実現し、駄馬椅子ドライバに対するインターフェースとしてのシステムコールも自前で作成することになります。
大変お詳しいお答えありがとうございます。
あと少しだけよろしいでしょうか?
>Free Standing Environmentでは「必ず○○がある」という保証が一切ありませ>ん。
最低でC言語の決まり(制御文やプリプロセッサ)などは存在し、関数は存在しない。関数は自分でアセンブラで書くという解釈は間違いですか?
また、Free Standing EnvironmentとHosted Environmentの物としての違いはコンパイラが違うということですか?
No.6
- 回答日時:
コンピュータ草分け時代から40年ほどコンピュータと付き合ってきました。
初期のコンピュータは主記憶8KB(8MBではありません)、OSなんてもの
はありませんでした。補助記憶装置もありませんでした。
アセンブラもコンパイラもなく、1010の機械語でプログラムを組んで、
スイッチでプログラムやデータを設定するのです。これでも?億円位する代物でした。
そのうち、段々、共通部分が集約されOSと言う名が付いて進化を始めました。
人類の原始時代の自給自足から職業と言う専門化が芽生えてきたのと同じです。
今ではOSが巨大化し、OSなしではどうしようもない状況ですね。
前置きが長くなりましたが、OSと言う形で独立させるかどうかは別として、
OSの持つ機能のうち必要なものは必ず組み込む必要があります。
ところで、誤解があるようですが、C言語は本来UNIXというOSを書く
ために作られた言語です。だから、既に述べられている通り、OSの持って
いる機能をC言語で自分で書くことは充分可能です。
アセンブラーであれば、何でもできるのは当然の話です。C言語もコンパイル
すればアセンブラー(というか機械語)になるわけですから。
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の母国」と言えます。
ありがとうございます。
実はまだよくわかっておりません。
”OSを書く”とありますがC言語でOSを書くときの環境はどのようなものなんでしょう?ご回答の中にある”Free Standing Environment”なんでしょうか?
”Free Standing Environment”で提供されているライブラリ関数というのは ”Hosted Environment”のシステムコールにあたるものがCPUを直接操作するアセンブラ(機械語)に置き換えられたものと解釈していいのでしょうか?
すいませんがお暇な時にでもお願いします。
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検索すると記事が出てきます。業界標準はこれから出てくる戦国時代のようですが。
ありがとうございます。
OSというとWindows,UNIX・・・ぐらいしか思い当たりませんでしたが僕の知らない世界がいろいろあるのですね。勉強になりました。
No.3
- 回答日時:
例に挙げられてるものにはOSのってますよ。
携帯とかだと、アドレス帳やメールなどのファイルを操作しなければいけないし
メール書いてるときでも着信があったらとか
考えなきゃいけないことが多すぎるので、だいたいOSがのっています。
もちろんOSののっていないものをあります。
DVDプレイヤーだと半々くらいじゃないんでしょうかね。
そういうものでも開発するためにC言語は使われています。
で、ご質問のシステムコールについてですが、
開発環境&開発対象次第です。
システムコールが存在しないものもあります。
何番地から何番地にはこういうデータが入ってるはずだから
ということをソフトウェア開発者が意識しながらコーディングしています。
それでもアセンブラで書くより数倍楽ですよ。
No.2
- 回答日時:
100%ある、とは言い切れませんがほとんどありますよ。
複雑化している現状で自社OS(あるいはそれに準じたもの)を開発するメリットはほとんどありません。
ATMの内部には疎いのでよく分かりませんが、少なくとも携帯にはTRONという
リアルタイムOSがよく使われます。結果的にコンパイラがあれば開発可能です。
C言語のランタイムライブラリは自力で書くこともできますのでそうすればOS
なしでも開発することは可能です。ランタイムライブラリをアプリに抱え込め
ばいいでしょう。システムコールはNo.1の方がおっしゃっているように一般的
なC言語の使用にあわせやすくするための機能を提供しているだけに過ぎません。
No.1
- 回答日時:
そもそもシステムコールはCPU等とのやり取りにおいて一連の作業を
OS側が吸収するだけのものです。
ライブラリ関数に関してもそういうやり取りをするための特別なOS
(というより、ユーザーインターフェースではないOS)が制御チップ
メーカー等から出ているので、その上でプログラムを組みます。
そういう意味でライブラリは多少扱いが変化しますね。
printf()ですらATMのパネル上なのか、開発端末上なのかを
意識することになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- デスクトップパソコン Macのインストールについて 3 2023/05/23 15:02
- Windows 10 Windows11についての質問ー3。 2 2022/12/13 14:58
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- ドライブ・ストレージ SSDからHDDへのOSを含んだ換装 12 2023/01/19 03:30
- フリーソフト 編集ソフトのムービーメーカーについて教えてください 3 2023/02/25 16:20
- CPU・メモリ・マザーボード デスクトップPCのOS(C:)の空き領域がどんどん減ります。 9 2022/12/12 09:24
- フリーソフト HyperCam2 1 2023/08/05 22:59
- Windows 10 Corei 7-12700(Alder Lake) と Windows11の不具合? 5 2023/01/14 12:06
- BTOパソコン テレビのネット接続について 2 2023/05/05 23:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
システムコールと標準ライブラ...
-
本格的なGUIを作るのにおすすめ...
-
python urlopen error について...
-
ATLとSTLの違いは何でしょうか?
-
Google ColaboでGUI作成
-
32768以上の乱数を作りたいので...
-
C++ 標準ライブラリの実際の中...
-
LIBCMT.LIBをリンクしてコンパ...
-
プログラマーで「使えない人」...
-
横スクロールアクションのステ...
-
Ps+のフリープレイでDestiny2の...
-
関数ライブラリ一覧
-
設定ファイルを扱うライブラリ...
-
unix-c と linux-c の違いは?
-
強化学習の環境作成、AI。自動...
-
Dreamweaver ライブラリ機能に...
-
VC++を使って「ストリートファ...
-
C# EXCELセルの入力規則設定に...
-
c言語でntpdateコマンドにあた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ps+のフリープレイでDestiny2の...
-
Windows Media Playerを開くと...
-
本格的なGUIを作るのにおすすめ...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
scipy っていうのをいれようと...
-
強化学習の環境作成、AI。自動...
-
C言語について。
-
マウスのクリックを自動で
-
LIBCMT.LIBをリンクしてコンパ...
-
Dreamweaverのライブラリが反映...
-
【iTunes】CDをiPhoneに取り込...
-
shaderを書かないで、GPUレンダ...
-
declaration of 'index' shadow...
-
MFC/C++ sprintf の代わりに <<
-
ライブラリ作成時のグローバル...
-
静的ライブラリから静的ライブ...
-
boostのアンインストールについて
-
統計解析ソフト「R」と「SA...
-
c言語でntpdateコマンドにあた...
おすすめ情報