> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man9/vm_map_wire.9.md).

# vm\_map\_wire.9

`vm_map_wire`, `vm_map_unwire` — 管理虚拟内存映射中的页锁定

## 名称

`vm_map_wire`, `vm_map_unwire`

## 概要

```c
#include <sys/param.h>
#include <vm/vm.h>
#include <vm/vm_map.h>

int
vm_map_wire(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)

int
vm_map_unwire(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)
```

## 描述

`vm_map_wire` 函数负责锁定映射 `map` 中 `start` 和 `end` 之间的页面。锁定的页面被固定在物理内存中，只要其锁定计数保持大于零，就不会被换出。

`vm_map_unwire` 函数执行相应的解锁操作。

`flags` 参数是一个位掩码，由以下标志组成：

如果设置了 `VM_MAP_WIRE_USER` 标志，函数在用户地址空间内操作。

如果设置了 `VM_MAP_WIRE_HOLESOK` 标志，可以在 `map` 地址空间内的任意范围上操作。

如果需要连续范围，调用者应通过指定 `VM_MAP_WIRE_NOHOLES` 标志明确表达其意图。

## 实现说明

两个函数都会尝试使用 [vm\_map\_lock(9)](/man/man9/vm_map_lock.9.md) 获取映射上的锁，并在调用期间持有该锁。如果检测到 `MAP_ENTRY_IN_TRANSITION`，将调用 `vm_map_unlock_and_wait` 直到映射再次可用。

映射在此期间可能已被其他消费者持有而发生变化，因此此接口的消费者应使用以下返回值检查此条件。

## 返回值

`vm_map_wire` 和 `vm_map_unwire` 函数具有相同的返回值。如果范围内的所有页面都成功\[解除]锁定，函数返回 `KERN_SUCCESS`。

否则，如果指定的范围无效，或在设置 `MAP_ENTRY_IN_TRANSITION` 标志时映射发生了变化，则返回 `KERN_INVALID_ADDRESS`。

## 参见

[mlockall(2)](https://github.com/FreeBSD-Ask/freebsd-man-sc/tree/main/man2/mlockall.2.md), [munlockall(2)](https://github.com/FreeBSD-Ask/freebsd-man-sc/tree/main/man2/munlockall.2.md), [vm\_map(9)](/man/man9/vm_map.9.md)

## 作者

本手册页由 Bruce M Simpson <bms@spc.org> 编写。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man9/vm_map_wire.9.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
