-
ata_mem
-
ER ata_mem ( T_AMEM *pk_amem , ACVCT *p_acvct );
|
|
|
|
T_AMEM *pk_amem;
|
メモリ・オブジェクト登録情報を格納した領域へのポインタ
|
|
ACVCT *p_acvct;
|
|
【 メモリ・オブジェクト登録情報T_AMEMの構造 】
typedef struct t_amem {
ATR mematr; /*メモリ・オブジェクト属性*/
VP base; /*メモリ・オブジェクトの先頭アドレス*/
SIZE size; /*メモリ・オブジェクトのサイズ(バイト数)*/
} T_AMEM;
|
typedef struct acvct {
ACPTN acptn1; /*オペランド・リード・アクセス許可パターン*/
ACPTN acptn2; /*オペランド・ライト・アクセス許可パターン*/
ACPTN acptn3; /*実行アクセス許可パターン*/
} ACVCT;
|
baseで示されたアドレスから
sizeバイトの領域を,
p_acvctで指定されたアクセス許可ベクタを持つメモリ・オブジェクトとして登録します。
アクセス許可パターンは,ビットN-1がドメインID#Nに所属するタスクからのアクセス許可を示し,1が許可,0が禁止を示します。
指定するメモリ・オブジェクト領域は,以下を満たす必要があります。
A ) 先頭アドレス(
base)は16バイト境界であること。そうでない場合はE_PARエラーを返します。
B ) サイズ(
size)は16の整数倍であること。そうでない場合はE_PARエラーを返します。
C ) ユーザ・スタックおよびメモリ・オブジェクトと重なっていないこと。そうでない場合,エラーは検出されず,システムの正常な動作は保証されません。
備考1 アクセス許可ベクタを設定するマクロとして,以下が用意されています。
-
TACT_SRW
すべてのアクセスがすべてのドメインに許可されることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。
-
TACT_SRO
オペランド・ライト・アクセスはすべてのドメインに禁止され,オペランド・リードアクセスおよび実行アクセスはすべてのドメインに許可されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。
-
ACVCT TACT_PRO( ID domid )
オペランド・リード・アクセスおよび実行アクセスが
domidで指定されたドメインにのみ許可され,オペランド・ライト・アクセスがすべてのドメインに禁止されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。
-
ACVCT TACT_SRPW( ID domid )
オペランド・リード・アクセスおよび実行アクセスがすべてのドメインにのみ許可され,オペランド・ライト・アクセスが
domidで指定されたドメインにのみ許可されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。
備考2 アクセス許可パターンを設定するマクロとして,以下が用意されています。
備考3 メモリ・オブジェクト属性(
mematr)は,単に無視されます。
|
|
|
|
|
|
|
|
- acptn1 == acptn2 == acptn3 == 0
- acptn1, acptn2,または acptn3の最大ドメインID( VTMAX_DOMAIN)より大きなドメインIDに対応するビットが1。
- base + size > 0x100000000
|
|
|
- CPUロック状態から本サービス・コールを発行した。
- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。
|
|
|
- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。
- 呼び出しタスクからの pk_amemが示す領域に対するオペランド・リード・アクセス許可がない。
- 呼び出しタスクからの p_acvctが示す領域に対するオペランド・リード・アクセス許可がない。
|
|
|
- 呼出しタスクは,信頼されたドメインに所属していない。
- あるドメインにアクセス許可されるメモリ・オブジェクトが7個を超える。
|
|
|
- 既に baseが同じメモリ・オブジェクトが登録されている。
|