> 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_page_free.9.md).

# vm\_page\_free.9

`vm_page_free`, `vm_page_free_toq`, `vm_page_free_zero`, `vm_page_try_to_free` — 释放一个页面

## 名称

`vm_page_free`, `vm_page_free_toq`, `vm_page_free_zero`, `vm_page_try_to_free`

## 概要

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

void
vm_page_free(vm_page_t m)

void
vm_page_free_toq(vm_page_t m)

void
vm_page_free_zero(vm_page_t m)

int
vm_page_try_to_free(vm_page_t m)
```

## 描述

`vm_page_free_toq` 函数将页面移入空闲队列，并解除其与对象的关联。如果页面被持有、锁定、已空闲或其忙碌计数不为零，系统将产生恐慌。如果页面上设置了 `PG_ZERO` 标志，则将其放在空闲队列末尾；否则放在开头。

如果页面的对象类型为 `OBJT_VNODE` 且是与该对象关联的最后一个页面，则底层 vnode 可能被释放。

`vm_page_free` 和 `vm_page_free_zero` 函数都调用 `vm_page_free_toq` 来实际释放页面，但 `vm_page_free_zero` 设置 `PG_ZERO` 标志，而 `vm_page_free` 在调用 `vm_page_free_toq` 之前清除 `PG_ZERO` 标志。

`vm_page_try_to_free` 函数验证页面未被持有、锁定、忙碌或脏，如果是这样，则将页面标记为忙碌，丢弃页面上可能设置的任何保护，并释放它。

## 返回值

`vm_page_try_to_free` 如果能够释放页面则返回 1；否则返回 0。

## 参见

[vm\_page\_busy(9)](/man/man9/vm_page_busy.9.md), [vm\_page\_wire(9)](/man/man9/vm_page_wire.9.md)

## 作者

本手册页由 Chad David <davidc@acns.ab.ca> 编写。


---

# 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_page_free.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.
