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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

3回答

363閲覧

rubyなどのプログラミング言語はどうやってOSに解釈されているの?

domidomi

総合スコア34

OS

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/07/31 02:16

編集2022/01/12 10:55

##追記
以下の
>よくOSの中核であるカーネルに処理をさせるには絶対シェルを通す必要があると聞きます。
という文は間違いです。

もしこの質問を参考にされる方がいらっしゃいましたら、回答までご覧なる事をお勧めします。(間違えてしまい申し訳ないです)

##疑問

よくOSの中核であるカーネルに処理をさせるには絶対シェルを通す必要があると聞きます。

また、シェルスクリプトは言わばOSの受付嬢の口を乗っ取ってしゃべらせることによりOS内部のカーネルに命令しているようなものと思います。

そこで思ったのですがrubyなどのスクリプト言語達は、
人間が書いたruby文シェルスクリプト(bashみたいなやつ)カーネルサンダースが機械語に翻訳してもろもろ処理
という流れを辿っているのでしょうか?

もしかして、rubyを実行する時に指定するbin/rubyというやつがbashと並列なシェルの事をさしていてルビー語を話せる受付嬢の役割を担っている?

なんとなく色々疑問に思うのですがお詳しい方がいらっしゃいましたらご教示いただけると幸いです。

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

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

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

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

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

guest

回答3

0

rubyも含めてインタプリタ言語は、言語の実行ユニットがあって、そこでプログラムコードを解釈して、コードのとおりに結果を出すように動かしていく、というふうに動かしていきます

プログラムコードが機械語になって実行される、ということはありません。

ファイル入出力やら通信やら表示やらは、実行ユニットからカーネルにシステムコールという形で実行させてますねー

投稿2018/07/31 02:45

y_waiwai

総合スコア87715

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

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

domidomi

2018/08/02 03:12

回答ありがとうございます。 つまりシェルは通しておらず、ruby言語解釈プログラムがカーネルに色々お願いするという形で処理が動いているという認識であっていますか?
y_waiwai

2018/08/02 03:26

そういうことですねー シェルも、いわば言語の一つと考えていいです。 こいつも実行ユニットがあって、そこで解釈し、システムコールを呼び出してます まあ、シェルはいつでも存在するので、システムコール代わりにシェルを呼び出すって使い方もできますねー
domidomi

2018/08/02 03:30

ありがとうございます。なるほどです。 質問が被ってしまって申し訳ないのですが ruby文→(ruby解釈プログラムがシステムコールに変換)⇒システムコール文⇒(カーネルがアセンブラへ依頼)⇒アセンブリ文⇒物理的な電気信号のやり取り開始 の流れは合っているでしょうか? お時間ある時にでも気にかけて頂いたら幸いです。
domidomi

2018/08/02 03:31

連投すみません、補足です システムコール文が出来上がってから、実際に物理的な信号のやりとりが開始されるまでの具体的な流れがしりたいという意味です
y_waiwai

2018/08/02 04:02

ちと思い違いがあるようですが、今まで言っている実行ユニットというのは機械語で動いてます。 あなたが書いたソースを解釈して、機械語が実行してます。 ソースが機械語に変換されるわけではありません。 あなたが機械語を書きたい、というばあいは、アセンブラ言語というのを使えば、機械語を直接生成できるようになります。 アセンブラではどーにもならん、もちょっとましにはできんのか!という場合は、 C言語、あるいはC++言語を使いましょう。これらはコンパイラといって、ソースを機械語(もちろんアセンブラ言語にも)変換して実行してくれます。 #そのかわり、茨の道ですがw
domidomi

2018/08/09 10:03

回答ありがとうございます。遅くなりすみません。考えてみたのですがこの解釈はあっているでしょうか? ーーー 「CPUに直接命令を出せる能力」及び「OSに対し命令を出せる能力」(システムコール文を発行する能力)を持っている「ruby言語解釈プログラム(bin/ruby)」を起動して「ruby言語」を読み取ると「ruby言語解釈プログラム(bin/ruby)」がCPUに計算をお願いして、CPUは言われた通りに動く。 また、ファイルシステムやハードウェア系の制御に関してはしっかりとした手続きを踏む必要がある為、OS君にやってもらう必要があり、「ruby言語解釈プログラム(bin/ruby)」がOSに対しシステムコール文を発行する。 OSはOSでCPUに直接命令してファイルシステムやハードウェア系の制御を「ruby言語解釈プログラム(bin/ruby)」に言われた通り実行する ーーー シェルやruby言語解釈プログラム(bin/ruby)は機械語で動いており、全ての命令を一回OSに通すわけではないという解釈です。 なるべく省略がおきないように書きましたが分かりずらかったら申し訳ありません。
guest

0

よくOSの中核であるカーネルに処理をさせるには絶対シェルを通す必要があると聞きます。

間違いです。
質問の前提が間違っています。

どんなプログラムからでも、カーネルに対して、システムコールという一種の関数呼び出しをすればいいです。

投稿2018/07/31 02:27

otn

総合スコア84380

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

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

0

よくOSの中核であるカーネルに処理をさせるには絶対シェルを通す必要があると聞きます。

ありません。シェルも1プログラムで、他のプログラムと同様にシステムコールを呼んでいるだけです。

投稿2018/07/31 02:21

maisumakun

総合スコア145064

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

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

domidomi

2018/08/02 03:27

つまりruby解釈プログラムやシェル達はいわばシステムコールのライブラリという事でしょうか? また、アセンブラへ「これを機械語に翻訳してくれー!」と伝えているのはカーネルなのでしょうか? ruby文→(ruby解釈プログラムがシステムコールに変換)⇒システムコール文⇒(カーネルがアセンブラへ依頼)⇒アセンブリ文⇒物理的な電気信号のやり取り開始 という流れはあっているでしょうか? いくつもすみません、お時間あるときにお答えいただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問