Linux에서 익명 프로세스란 무엇입니까?

Linux에서 익명 프로세스란 무엇입니까?

task_struct의 mm 필드와 active_mm 필드의 차이점을 이해하려고 노력 중입니다.리누스 토발즈가 20년 전에 보낸 이메일"익명 프로세스"라는 개념이 인용되었습니다.


 - we have "real address spaces" and "anonymous address spaces". The
   difference is that an anonymous address space doesn't care about the
   user-level page tables at all, so when we do a context switch into an
   anonymous address space we just leave the previous address space
   active.

   [...]

 - "tsk->mm" points to the "real address space". For an **anonymous process**,
   tsk->mm will be NULL, for the logical reason that an **anonymous process**
   really doesn't _have_ a real address space at all.

 - however, we obviously need to keep track of which address space we
   "stole" for such an anonymous user. For that, we have "tsk->active_mm",
   which shows what the currently active address space is.

   The rule is that for a process with a real address space (ie tsk->mm is
   non-NULL) the active_mm obviously always has to be the same as the real
   one.

   For a **anonymous process**, tsk->mm == NULL, and tsk->active_mm is the
   "borrowed" mm while the **anonymous process** is running. When the
   **anonymous process** gets scheduled away, the borrowed address space is
   returned and cleared.

답변1

이 부분은 어느 정도 설명합니다.이메일당신은 그것을 생략했습니다.

"익명 주소 공간"의 명백한 용도는 사용자 매핑이 필요하지 않은 모든 스레드입니다. 모든 커널 스레드는 기본적으로 이 범주에 속하지만 "실제" 스레드라도 일시적으로 사용자에게 실행되지 않을 것이라고 말할 수 있습니다. 공간이 중요하므로 스케줄러는 가상 머신 상태를 전환하는 데 시간을 낭비하지 않으려고 노력할 수 있습니다. 현재는 이전 스타일의 bdflush sync만 이 작업을 수행할 수 있습니다.

커널 스레드는 커널 메모리에만 액세스하므로 사용자 공간 메모리의 내용에는 관심이 없습니다. "익명 프로세스"는 이를 최적화한 것입니다.

스케줄러가 커널 스레드 작업으로 전환하면 상대적으로 시간이 많이 걸리는 메모리 매핑 설정을 건너뛰고 이전 프로세스의 주소 공간만 유지할 수 있습니다. 주소 공간의 커널 부분은 모든 프로세스에 대해 동일한 방식으로 매핑되므로 이러한 작업에 어떤 매핑이 사용되는지는 차이가 없습니다.

이 최적화는 작업이 커널 공간 코드를 실행하는 동안(예: 시스템 호출이 sync완료되기를 기다리는 동안) 사용자 공간 작업에 일시적으로 적용될 수도 있습니다. 실제 주소 공간은 사용자 공간으로 돌아가기 전에 복원하기만 하면 되기 때문입니다. 암호. 이메일에서 언급했듯이 적어도 그 이후로는 이 작업이 더 이상 수행되지 않는 것 같습니다.bdflush커널 스레드로 대체되었습니다 pdflush.

답변2

파일이나 장치를 지원하지 않는 메모리 맵으로 익명 메모리를 나타냅니다. 이는 프로그램이 힙 및 스택 등에서 사용하기 위해 운영 체제에서 메모리를 할당하는 방법입니다. 첫째, 익명 매핑은 가상 메모리만 할당합니다. 새 지도는 지도의 중복 복사본에 기록된 0페이지로 시작됩니다.

관련 정보