JavaScript is required to for searching.
跳过导航链接
退出打印视图
编程接口指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  内存和 CPU 管理

2.  用于 Solaris Cluster 的远程共享内存 API

3.  会话描述协议 API

4.  进程调度程序

5.  地址组 API

6.  输入/输出接口

7.  进程间通信

8.  套接字接口

9.  使用 XTI 和 TLI 编程

10.  包过滤钩子

11.  传输选择和名称到地址映射

12.  实时编程和管理

实时应用程序的基本规则

延长响应时间的因素

同步 I/O 调用

中断服务

共享库

优先级倒置

粘滞锁

失控实时进程

异步 I/O 行为

实时文件

实时调度程序

分发延迟

调度类

分发队列

分发进程

进程抢占

内核优先级倒置

用户优先级倒置

控制调度的接口调用

使用 priocntl

其他接口调用

控制调度的实用程序

priocntl(1)

dispadmin(1M)

配置调度

分发程序参数表

重新配置 config_rt_dptbl

内存锁定

锁定页面

解除页面锁定

锁定所有页面

恢复粘滞锁

高性能 I/O

POSIX 异步 I/O

Solaris 异步 I/O

通知 (SIGIO)

使用 aioread

使用 aiowrite

使用 aiocancel

使用 aiowait

使用 poll()

使用 poll 驱动程序

使用 close

同步的 I/O

同步模式

同步文件

进程间通信

处理信号

管道、命名管道和消息队列

使用信号量

共享内存

异步网络通信

联网模式

计时功能

时间戳接口

间隔计时器接口

13.  Solaris ABI 和 ABI 工具

A.  UNIX 域套接字

索引

内存锁定

锁定内存是实时应用程序的最重要问题之一。在实时环境中,进程必须能够保证连续的内存驻留,以减少延迟并阻止分页和交换。

本节介绍可用于 SunOS 中实时应用程序的内存锁定机制。

在 SunOS 中,进程的内存驻留由其当前状态、可用的总物理内存、活动进程的数量和进程的内存需求决定。此驻留适用于分时环境。实时进程通常不接受此驻留。在实时环境中,进程必须保证内存驻留以减少进程的内存访问和分发延迟。

SunOS 中的实时内存锁定由一组库例程提供。这些例程允许使用超级用户特权运行的进程将其虚拟地址空间的指定部分锁入物理内存。通过此方式锁定的页面会从分页中排除,直到页面解除锁定或进程退出。

操作系统对于可以在任何时间锁定的页面数量具有系统范围的限制。此限制是一个可调参数,其缺省值在引导时计算。缺省值基于页面框架的数量减去另一个百分比(当前设置为 10%)。

锁定页面

mlock(3C) 调用会请求将一个内存段锁入系统的物理内存。组成指定段的页面会出错。每个页面的锁定计数会递增。任何锁定计数值大于零的页面都会从分页活动中排除。

特定页面可以由多个进程通过不同的映射锁定多次。如果两个不同的进程锁定同一页面,则该页面将保持锁定状态直到两个进程都删除其锁定。但是,在一个指定的映射中,页面锁定不嵌套。相同进程对于相同地址的锁定接口的多次调用通过单个解除锁定请求即可删除。

如果删除通过其执行锁定的映射,则将隐式解除内存段锁定。通过关闭或截断文件删除页面时,也会隐式解除页面锁定。

调用 fork(2) 之后,子进程无法继承锁定。如果具有某些锁定内存的进程派生了子进程,则此子进程必须代表自己执行内存锁定操作才能锁定自己的页面。否则,此子进程会导致写复制页面错误,这些错误通常是与派生进程关联的不利结果。

解除页面锁定

为了解除内存页面的锁定,进程通过调用 munlock(3C) 请求释放锁定虚拟页面的段。munlock 会递减指定物理页面的锁定计数。将页面的锁定计数递减到 0 之后,页面便可正常交换。

锁定所有页面

超级用户进程可以通过调用 mlockall(3C) 请求锁定其地址空间内的所有映射。如果设置了 MCL_CURRENT 标志,则锁定现有的所有内存映射。如果设置了 MCL_FUTURE 标志,则将添加到现有映射或替换现有映射的所有映射锁入内存。

恢复粘滞锁

页面在其锁定计数达到 65535 (0xFFFF) 时会永久锁入内存。值 0xFFFF 通过实施定义。在将来的发行版本中,该值可能会更改。以此方式锁定的页面无法解除锁定。重新引导要恢复的系统。