Capabilities
1
Capabilities
什
么
是
capability
?
按
照
教
程
定
义
,
可
以
理
解
为
capability
是
访
问
系
统
中⼀
切
实
体
或
对
象
的
令
牌
,
这
个
令
牌
包
含
了
某
些
访
问
权
⼒
,
只
有
持
有
这
个
令
牌
,
才
能
按
照
特
定
的
⽅
式
访
问
系
统
中
的
某
个
对
象
。
可
以
将
capability
视
为⼀个
拥
有
访
问
权
限
的
指
针
,
⽽
在
C
语
⾔
中
,
指
针
常常
可
以
共
享
,
因
此
个
⼈
理
解
这
⾥
隐
含
着
⼀
层
capability
可
以传
递
和
分
享
的
意
思
。
在
seL4
中
有
三
种
能
⼒
:
能
够
控
制
对
内
核
对
象
(
如
线
程
控
制
块
)
的
访
问
。
能
够
控
制
对
抽
象
资
源
的
访
问
,
例
如
IRQControl
。
untyped capabilities
,
它
们
负责
内
存
范
围
和
分
配
。
seL4
不
⽀
持
动
态
内
存
分
配
,
在
内
核
加
载
阶
段
将
所
有
的
空
闲
内
存
绑
定
到
untyped capabilities
上
,
后
续
的
内
核
对
象
申
请
新
的
内
存
,
都
通过
系
统
调
⽤
和
untyped capability
来
申
请
。
在
seL4
内
核
初
始
化
时
,
指
向
内
核
控
制
资
源
的
所
有
的
capability
全
部
被
授
权
给
特
殊
的
任
务
root task
,
⽤
户
代
码
想
修
改
某
个
资
源
的
状
态
,
必
须
使
⽤
kernel API
在
指
定
的
capability
上
请
求
操
作
。
要
更
改
任
何
资
源
的
状
态
,
⽤
户
代
码
可
以
使
⽤
libsel4
中
提
供
的
内
核
API
来
请
求
对
特
定
功
能
指
向
的
资
源
的
操
作
。
例
如
,
root task
拥
有
控
制
它
⾃
⼰
的
进
程
控
制
块
(
TCB
)
的
capability
,
这
个
capability
被
定
义为⼀个
常
量
seL4_CapInitThreadTCB
。
下
⾯
的
⼀个
例
⼦
就
是
通过这
个
capability
来
改
变
当
前
当
前
进
程
任
务
的
栈
顶
指
针
(
当
需
要
⼀个
很
⼤
的
⽤
户
栈
时
,
这
个
操
作
⾮
常
有
⽤
):
seL4_UserContext registers;
seL4_Word num_registers = sizeof(seL4_UserContext)/sizeof
(seL4_Word);
/* Read the registers of the TCB that the capability
in seL4_CapInitThreadTCB grants access to. */
seL4_Error error = seL4_TCB_ReadRegisters(seL4_CapIni