サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2009-07-17 (金) 15:05:33 ソース
Line 1: Line 1:
 +* OSASKにおけるシステムコール(API-CALL)
 +-[[OsaTech]]より
 +-(by [[K]], 2009.07.17)
 +*** (1)
 +-既存のさまざまなOSは、それぞれにアプリケーションを書くことができて、アプリからOSを呼び出すことができる。ここではその呼び出し方について記述する。
 +-まず代表的な方法を記述しておくと、こんな感じだろうと思われる。
 +--ソフトウェア割り込み(INT命令):「はりぼてOS」やLinuxがこの方式
 +--near-CALL:win32がこの方式
 +--何らかの方法で例外を起こさせる:
 +--コールゲート:
 +--sysenter?(これはよく知らないのでコメントできない)
 +-第一世代OSASKを作るに当たっては、これらの方法を検討した。まずnear-CALL案はかなりはやく消えた。なぜなら、結局アプリからシステムコールした以上は、どこかのタイミングでCPL=0に入る必要があり、だからアプリからAPIを叩いたときにすぐにCPL=0に移行するのが一石二鳥でいいと思えたのだ。
 +-例外方式は遅そうなのでボツ。
 +-ソフトウェアINTは、APIブリッジが構築しにくいだろうということで捨てた。IDTはシステム全体に対して一つだけど、LDTはタスクの数だけある。そうすると、タスクごとに異なる設定にできるのはLDTのほうで、だからLDT上のコールゲートを使うのがいいと考えたのだ。APIブリッジとは、APIのリダイレクトというか、API-CALLを横取りしてエミュレーションするようなものである。このとき、タスクによって横取りするかしないか、もしくは横取り後の処理の仕方をタスクごとに変えたいなど、そういうことをするにはIDT上のベクタを使うわけには行かなかったのである。
 +-そんなわけで、第一世代OSASKでは、LDT上のコールゲートを呼ぶことがシステムコールだった。
 +*** (2)
 +-第二世代OSASKでは、全く別の観点からどうするかを考えた。第二世代OSASKのアプリケーションは、efg01等によって、ほぼ全てのx86のOS上で実行可能になることを最優先で設計した。さらにefg01はアプリケーションとして記述可能で、ドライバなどの支援は極力あてにしないことにした(そうでないとefg01の移植が困難になる恐れがある)。
 +-そうすると、win32やLinux上ではセグメンテーションを活用したプログラミングはほとんど期待できないし、ましてLDTなどをアプリケーションが設定できる期待も持てないので、第一世代OSASKのやり方は使えない。IDTの設定も期待できないので、ソフトウェア割り込みもボツ、例外もボツ。・・・こうしてnear-CALLだけが残った。
 +-そんなわけで、第二世代OSASKでは、起動時に教えられたアドレスへnear-CALLすることがシステムコールとなっている。
 +* こめんと欄
 +#comment

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。