• 締切済み

OSの中身

tthe_mineの回答

  • tthe_mine
  • ベストアンサー率46% (19/41)
回答No.5

>ライブラリとAPIの関係とは全然違うんですか? カーネルが用意した機能を、シェルが定められた方法で使うという点で、ライブラリとAPIの関係と捉えることも出来ます。 が、カーネルにはユーザランドでのライブラリとは決定的に違う点があります。それは No2 の方が書かれている「特権モード」で動いているということです。 「特権モード」というのは CPU が複数持つモードの一つです。各モードによって実行できる命令が制限されます。特権モードは、なんでも出来ちゃうモードのことです。詳しくは参考URLをどうぞ。 カーネルは特権モードで動いているから何でもできちゃうのです。言い方を変えると、特権モードでやりたいことがあって、それに関するプログラムを一箇所にまとめたものがカーネルだということも出来ると思います。 ユーザランドプログラム(例えばシェル)は、そうではないので一部の処理を実行できません。この場合、カーネルに代理実行をお願いすることになります。 では、特権モードでしか実行できない処理とは何でしょうか。 一例をあげれば外部デバイス(ディスク,キーボード,ディスプレイ etc)へのアクセス、全メモリ領域へのアクセスなどは特権モードでしか実行できません。 このあたりに関連する処理は必然的にカーネルのお仕事になります。

参考URL:
http://ja.wikipedia.org/wiki/%E7%89%B9%E6%A8%A9%E3%83%A2%E3%83%BC%E3%83%89

関連するQ&A

  • シェルとカーネルの概念とプログラムの処理の流れ

    興味本位で「プログラミング」について、調べ学んでる内にひとつの壁にぶつかりましたので質問させていただきます。 質問内容は「シェルとカーネル。そしてアプリケーション」になります。 素人ながら現在持っている論理を下記に列挙します。誤認識などあれば指摘いただければ幸いであります。 狭義での論争は、避けたいので、広義として理解頂ければと思います。(狭義や曖昧な点においてもある程度学習済み) 1. プログラミング言語には、低級・高級言語があり、ハードよりのC言語(影響下のC++, Objective-C)で作られたプログラムの実行速度は速い。 2. プログラム処理系には、インタプリタ・コンパイラがあり、一般ユーザーが使用するアプリケーションのほとんど(.exeなど)がコンパイラアプリケーション。 3. JavaなどVM環境下動作するアプリケーションは、中間言語で実行される。 4. OSには中核であるカーネルがあり、カーネルは人工言語(コンピューター言語)を機械語に訳し、各リソース(CPU・RAMなど)に処理を実行させる。 5. カーネルはシェルに覆われており、実際のユーザー側の処理のリクエストは、シェルを介して行われる。 6. シェルには大別して、CLI(CUI)とGUIがあり、CLIシェルはプロンプトが表示されるコマンドラインインタプリタ。 7. GUIシェルは、OSがオペレーションの意から、OSの各種機能(Windows System, エクスプローラー等)。※ 私は理解を容易する為にOSそのものをシェルと捉えてます。 長くなりましたが、上記を踏まえた上での質問が下記になります。 Q. iTunes, Word, などの各種アプリケーションの各種操作(処理、実行)というのは、コンピューター言語でシェルを介し機械語でカーネルまで橋渡しされるのでしょうか? なぜこのような質問になるかといいますと... プログラミング言語は機械語にコンパイルして、はじめてコンピューターに理解してもらえる事は百も承知です。 プログラミング言語で制作されたアプリケーションの処理や実行は当然、コンパイル済みの機械語で行うものと認識しております。(ここでは中間言語は除く) ここで冒頭に述べた壁に当たりました。洒落ではなく、私の中で「殻」もとい「壁化」してしまったシェルの存在です。 現在、持ち合わせてる論理から考察すると、機械語で実行された処理をシェルを介す意味がどこにあるのか?それとも介さずカーネルにそのまま引き渡してるのか? 私が間違っており、そもそも制作されたアプリケーションの処理や実行は、コンピューター言語であり、それをシェルを介しカーネルという流れがあるのならば、コンパイラの存在意義が分かりません。 本来はもっと自分が思ってる事を言語化出来ればいいのですが、これが現時点で精一杯です。

  • PERLとシェルについて

    コマンドプロンプトで入力されたPERLコマンドはシェルのプログラムによってカーネルに引き渡されてカーネルがPERLのプログラムにそのコマンドを実行させて、その結果をカーネル→シェルへと引き渡されてコマンドプロンプトに表示されるのでしょうか?

  • シェルとは

     シェルとは【ユーザと対話する能力を持ち、カーネルに対して操作のお伺いを立てる仲介役のプログラム】と書かれていました。  また、シェルの機能として【コマンドとして入力された名前のプログラムを探し出して起動する。】ということも書かれていました。 そこで疑問を持ちました。前述では仲介役であると述べられてるのに対して、後述での機能ではプログラムを探し出し、起動する.と書かれていてCPUに指示・命令までしてるのか?と不思議に思いました。 下記のように解釈すればいいのでしょうか? プログラム探し出して起動するという命令をCPUに出すのはカーネルであり、あくまでもシェルとはユーザが打ったコマンドをOSが解釈できる形に翻訳してるプログラムにすぎないのですよね? 一般的なシェルの解釈は→仲介役 機能としてのシェルの解釈は→(カーネル+シェル) と考えればよろしいでしょうか?

  • シェルとカーネルについて。

    UNIX等ではシェルとカーネルの概念は有名ですが、Windowsにもシェルとカーネルの概念があると聞きましたが、具体的にはどの機能(?)がシェルに当たるのでしょうか? UNIXとかならシェルはコマンドラインの命令をカーネルに伝える、というのでなんとなく分かるのですが、Windowsでは基本的にはGUIで操作するのでどこがシェルなのかな?と疑問に思います。 (コマンドプロンプトで実行する際はWindowsでのシェルの役割が何となく認識できますが) どなたか分かる方、ご意見・ご回答お願いします。 (乱文ですいません)

  • POSTメソッドで取得したデータをシェルスクリプトCGI経由でJava

    POSTメソッドで取得したデータをシェルスクリプトCGI経由でJava実行時の引数に渡す方法 HTML中級、Java、Unix系のシェルスクリプトに関して初級程度の知識があります。 Javaで書かれたプログラムを用いた、ブラウザ上で動作する CGIによるサーバサイド・アプリケーションを作ろうとしています。  http://d.hatena.ne.jp/shin/20090118/p1  http://d.hatena.ne.jp/Bayside/20050915  http://www.cs.adfa.edu.au/~gfreeman/CGIRequest.html 等のサイトを参考に、シェルスクリプトを用いたCGIを経由して サーバ上でJavaを実行し、その出力結果(シェルのechoやJavaのSystem.out.printlnによる) をHTMLとして受け取り、ブラウザ上で表示する所までうまくいきました。 上記のCGIに宛てて、別のHTML上の入力フォームからPOSTメソッドで文字列のデータを送信し、 その値をJavaに引数として渡してやりたいと考えています。  http://ameblo.jp/new3bon/entry-10210338319.html  http://waitwg.org/~pc-qa/?CMD=DCNT&CID=8 等から、POSTで送られたデータはシェルスクリプト上の標準入力に格納されると分かり、 #!/bin/bash echo cat cat >> ./ttt.txt URLエンコードされたパラメータを上記コードで表示させることまではできました。 また、コマンドラインからJavaを実行する際の引数は  http://www.02.246.ne.jp/~torutk/javahow2/commandline.html Java側のmainメソッドの引数として受け取れることは分かりました。 これらの方法を組み合わせて、CGIとしてJavaプログラムが実行される際に HTML上のフォームからPOSTメソッドで送信されたデータを渡してやりたいと考えています。 その際、シェルの標準入力に与えられたデータをシェルの変数に格納してやるか、  http://www.atmarkit.co.jp/flinux/rensai/shell03/shellstio.html に示されている標準入出力のすり替えを用いる等の方法ができないかと考えているのですが、 シェルスクリプトやJava上のどの段階で、どのようなコードを書けばいいのか分からずにいます。 (下記コードでは、各種パスを通す際に標準入出力の中身が書き換えられる前らしいと見当はついているのですが……) 複数の要素が込み入って複雑なことになっていますが、 解決方法をご存知の方がおられましたら、ご教唆のほど願います。 下に書きかけのシェルスクリプトのコードを書いておきます。 #!/bin/sh JAVA_HOME=/usr/java/jdk1.6.0_20 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/mysql-connector-java-5.1.12-bin.jar export JAVA_HOME PATH CLASSPATH /usr/java/jdk1.6.0_20/bin/java \  (中略) Main

  • Linuxアプリケーション開発について

    Linuxで複数のプログラムを実行する場合の振る舞いについて教えてください。 現在、自前で作成したlinuxのコンソールプログラムを2つ起動させて実行をしています。 1つのプログラムは、指定したディレクトリの画像ファイルを順番に処理していくもので、 2つめのプログラムは、1つめのプログラムの進行状況と結果を監視して状況を表示するものです。 実行は、2つ目の監視用プログラムを"&"オプションで実行させた後に、1つ目のプログラムを実行させています。 前置きが長くなってしまいましたが、ここで、疑問なのですが、今、プログラムとしては2個実行していますが、プログラム開発ではカーネルで複数のタスク管理をすると言った内容の記述はソースにはありませんが、2つのプログラムがうまく同期して動作しているように見えます。 カーネルの本などに載っているタスク管理を実現するためにプログラム開発時に何かする必要はないのでしょうか。 それとも、カーネルがTCBとか使用してカーネルのタスク管理機能に必要なタスクに分割した上で切り替えを行ってくれるのでしょうか? また、1個のプログラムだけを実行させる場合も、プログラム自体、複数のタスクとして分割されてカーネルからタスク管理されながら順番にタスクを実行しているような気がするのですが、ソースでタスク分割の記述をしないといけないのか、それともやはりカーネルが実行前にタスクへの分割をしてくれるのでしょうか? 長文で読みにくい上、的外れなことを言っているかもしれませんが、ご回答よろしくお願い致します。

  • Mac OS X でバッチファイルのようなものは?

    Windows では、デフォルトの状態で *.bat というファイル名で保存し、ファイルを開くと、そのファイルに書かれた内容が順番に実行される仕組みがあります。 では、Macで同じようなことをしようとした場合どうすればよいですか。 bash シェルスクリプト、というものがあることは知っています。 より具体的に説明します。 アプリケーションを起動するためのテキストを、ファイルに書いておき、Finderからそれを開く事で、記述した通りにアプリケーションが起動するようにしたいです。 Windowsにおいて同じディレクトリに2つのファイルがあります 1) setdir.bat set dir1=C:\d1 1終わり) 2) exec.bat call setdir.bat set apppath=dir2\dir3\dir4 set execfile=app.exe set param=-foo -bar start "" "%dir1%\%apppath%\%execfile%" %param% 2終わり) これでエクスプローラで exec.bat を開くと、app.exe が実行されます。 MacのFinderでファイルをダブルクリックしたときに、同じように何かアプリケーションを実行するようにしたいです。Tarminalを起動してCUIでスクリプトを実行する方法ではありません。 ファイルは2つなければならず、一度変数に代入してから、変数を使って最終的に起動するという点は変えないでください。

    • 締切済み
    • Mac
  • Javaアプリケーション内でコンパイルはできますか?

    Javaアプリケーションから、シェルにアクセスして、Javaプログラムをコンパイルおよび実行したいのですが、できますか? 具体的には、例えば、JavaアプリケーションのメインフレームにJavaプログラムを記述するテキストエリアがあってユーザはそこにJavaプログラムを記述し、任意の名前で保存できるとします。また、メインフレームには、コマンドを実行するテキストフィールドがあり、ユーザは保存したプログラムをそこからコンパイルできる。つまり、そのテキストフィールドに、 javac xxxxx.java と入力するとコンパイルでき、 java xxxxx とすると実行できる。 このようなことをしてみたいのですが、JavaアプリケーションからWindowsもしくはUNIXのシェルと連携させることはできますでしょうか?ご存知の方よろしくお願いします。

    • ベストアンサー
    • Java
  • BIOSアップデートでOSが起動しない

    A8N-SLI DeluxeのBIOSを 1006から1011にアップデートしました 最初はWindowsが起動し 「新しいハードウェアが見つかりました」 の後、再起動を促され、再起動した所 起動しなくなりました。 BIOSを確認した所 RAIO 0構成のHDD2台が認識されていません CMOSクリアし再度BIOSを確認すると HDDは認識されていて、BIOSのNVRAIDの設定をし 保存して再起動すると OSの起動方法を選択画面が表示され 「前回正常起動時の構成」 を選択すると起動出来るのですが また最初と同じ様に 「新しいハードウェアが見つかりました」 の後、再起動で同じ現象の繰り返しです。 良い解決方法は有るでしょうか? 宜しくお願い致します。

  • プルグラムの起動について

    コンピュータのリカバリー後プログラムが起動できません。オペレーテングシステムは現在このアプリケーションを実行するように構成されておりませんとでてしまいます。