search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

BitVisor Advent Calendar 2020 Day 9

posted at

Process (保護ドメイン)のシステムコールとライブラリ

ここではVMX root modeのring3 で動作する process (保護ドメイン)で使えるシステムコールとライブラリを簡単に紹介したいと思います.

システムコール

保護ドメインはいわゆるユーザランドですので,システムコールがあります.ユーザから使えるインタフェースとしてはprocess/lib/lib_syscalls.cで定義されています.以下の14種類があります,

#define SYS_NOP                 1
#define SYS_MSGSETFUNC          3
#define SYS_MSGREGISTER         4
#define SYS_MSGOPEN             5
#define SYS_MSGCLOSE            6
#define SYS_MSGSENDINT          7
#define SYS_MSGRET              8
#define SYS_MSGSENDDESC         9
#define SYS_NEWPROCESS          10
#define SYS_MSGSENDBUF          11
#define SYS_MSGUNREGISTER       12
#define SYS_EXITPROCESS         13
#define SYS_SETLIMIT            14

なんだか数が少なくて,また大部分をSYS_MSG_* というものが占めていてこれでいいの? と思う方がいるかもしれません.しかしBitVisorの本体 (ring0で動作する部分) は別に一般のOSとして機能しているわけではなく,process自体はあくまで本体と独立して動作することが一つの目的であるのでこれでいいのです.

といってもBitVisor本体とやりとりしなければ入出力などはできません.そこで登場するのが SYS_MSG_* で定義されるシステムコールを利用したメッセージパッシングです.メッセージパッシングの仕組みを利用すると,threadやprocess間でコールバック関数を利用したデータのやりとり及び処理ができるようになります.これによってprocessからBitVisor本体を呼び出して入出力をおこなったり,また逆にBitVisor本体からメッセージパッシングによってprocessの処理を実行することができます.process/以下にあるいくつかのプログラムを見てみると,どのように利用するのかのイメージがつくと思います.

メッセージパッシングの実装に関しては以下に記事があります.

ライブラリ

process/lib 以下にはシステムコール意外にも,processを作成する際に利用できるライブラリがいくつかあります. printf() 系の関数や,簡単なメモリアロケータ,文字列処理の関数などがあるのでprocessを作成する際は一度確認してみるといいでしょう.

もしこれ以外のライブラリを利用したい場合は,process側に移植するか,あるいはBitVisor本体側に移植してメッセージパッシングで利用することになります.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0
Help us understand the problem. What are the problem?