vm_write 커널 서비스

용도

주소 공간의 페이지 범위에 대한 페이지 아웃을 시작합니다.

구문

#include <sys/types.h>
#include <sys/errno.h>
#include  <sys/vmuser.h>
int vm_write (vaddr, nbytes, force)
int  vaddr;
int  nbytes;
int  force;

설명

그만큼 vm_write 커널 서비스는 주소 범위와 교차하는 페이지에 대해 페이지 아웃을 시작합니다. (바드르 , vaddr + nbytes ).

만약 매개변수가 0이 아닌 경우 수정된 페이지는 최근에 기록되었는지에 관계없이 디스크에 기록됩니다.

수정된 각 페이지에 대해 페이지 아웃이 시작됩니다. 변경되지 않은 페이지는 참조 비트가 0으로 설정된 상태로 메모리에 남습니다. 이는 변경되지 않은 페이지를 페이지 교체 알고리즘의 후보로 만듭니다.

호출자에게는 지정된 페이지에 대한 쓰기 액세스 권한이 있어야 합니다.

시작된 I/O는 비동기식입니다. 그만큼 vms_iowait I/O 완료를 기다리기 위해 커널 서비스를 호출할 수 있습니다.

메모: 그만큼 vm_write 대형 페이지에서는 서브루틴을 사용할 수 없습니다.

매개변수

항목 설명
vaddr 페이지 아웃이 필요한 페이지 범위의 첫 번째 바이트 주소를 지정합니다.
n바이트 지정된 바이트에서 시작하는 바이트 수를 지정합니다. vaddr 매개변수. 이 매개변수는 음수가 아니어야 합니다. 모든 바이트는 동일한 가상 메모리 개체에 있어야 합니다.
force 수정된 페이지가 마지막으로 기록된 시점에 관계없이 기록될 것임을 나타내는 플래그를 지정합니다.

실행 환경

그만큼 vm_write 커널 서비스는 다음에서 호출될 수 있습니다. 프로세스 환경 오직.

리턴 값

항목 설명
0 성공적인 완료를 표시합니다.
EINVAL 다음 네 가지 오류 중 하나를 나타냅니다.
  • 지역이 정의되지 않았습니다.
  • 영역은 I/O 영역입니다.
  • 에서 지정한 길이 n바이트 매개변수가 음수입니다.
  • 주소 범위가 가상 메모리 개체 경계를 넘습니다.
  • 하나 이상의 큰 페이지가 대상 페이지 범위에 있습니다.
EACCES 액세스가 쓰기를 허용하지 않음을 나타냅니다.
EIO 영구 I/O 오류를 나타냅니다.