프로세스가 커널에 대한 시스템 호출을 통해 CPU와 메모리에 액세스합니까?

프로세스가 커널에 대한 시스템 호출을 통해 CPU와 메모리에 액세스합니까?

내 말이 맞다면 장치에 대한 액세스는 커널에 대한 시스템 호출을 통해 처리됩니다.

CPU와 메모리도 장치이다.

  1. 프로세스가 실행되기 시작하면 커널에 대한 시스템 호출을 통해 CPU와 메모리를 가져오나요?
  2. 프로세스가 다른 프로세스와 동시에 실행되면 커널은 인터리브 방식으로 실행을 예약합니다. 프로세스가 CPU와 메모리를 다른 프로세스에 넘겨주고 다시 획득할 때 프로세스가 커널에 대한 시스템 호출도 호출합니까?
  3. 프로세스 실행이 끝나면 커널에 대한 시스템 호출을 통해 CPU와 메모리도 해제됩니까?

답변1

단지 CPU에서만 실행되기 때문에 CPU를 많이 "얻지" 못합니다. 커널은 프로세스가 실행되는 코어, 실행 시기, 실행 기간을 결정합니다. 각 프로세스가 CPU에서 해당 시간 조각을 가져오도록 작업을 예약합니다. 잠시 동안 실행된 다음 시간 조각이 만료되거나 시스템 호출이 발생한 후 컨텍스트가 다른 프로세스로 전환됩니다. 프로그램의 상태는 스위치 이전에 저장되었다가 커널이 추가 시간이 필요하다고 판단하면 복원되므로 시간 차이조차 인식하지 못합니다. 스케줄링은 다양할 수 있습니다. 고정된 타이머(보통 밀리초)가 있거나 틱이 없을 수도 있습니다. 커널은 또한 nice프로세스의 우선순위( )에 따라 스케줄링을 관리합니다. 프로세스가 특정 코어( taskset)에 잠겨 있을 수 있습니다. 다중 스레드 프로그램의 경우 스레드는 독립적으로 슬라이스를 얻고 동시에 실행할 수 있습니다. 커널은 프로그램을 완전히 일시 중단했다가 나중에 다시 시작할 수 있습니다(SIGSTOP 및 SIGCONT에 의해 트리거됨).

메모리가 가상화되었습니다. 프로그래밍 언어에서 볼 수 있는 포인터는 물리적 메모리 블록이 아니라 물리적 계층에 다시 매핑되는 가상 주소입니다. 커널은 페이지 단위로 RAM을 제공하거나(예: 4kB) 약간 섞기도 합니다(페이지는 하드 디스크로 교체되고 액세스될 때만 RAM에 복원될 수 있음). mmap새 페이지를 주소에 매핑하는 방법입니다(페이지는 메모리에 매핑된 하드 드라이브의 파일을 참조할 수 있음). 그러나 메모리( malloc및 기타 할당자)를 동적으로 할당하는 경우 할당자가 수행하는 작업은 할당자에 따라 다릅니다. 일반적으로 메모리 풀이나 더 큰 블록을 sbrk위한 더 많은 공간을 요청하기 위해 시스템 호출을 호출합니다. 구현은 다를 수 있습니다.mmap

요약하면 프로세스 우선순위와 CPU 선호도를 설정할 수 있지만 스케줄러는 어떤 방식으로든 커널과 상호 작용하지 않고 프로그램이 실행되는 방법과 시기를 담당합니다. 메모리는 페이지 단위로 제공되며 시스템 호출을 통해 요청됩니다. 메모리가 할당되면 커널 개입 없이 가상 주소 공간을 통해 간단히 액세스할 수 있습니다.

답변2

CPU

프로세스는 CPU 우선순위를 낮출 수 있습니다(그러나 낮출 수는 없습니다 man 2 setpriority). 게다가 일정 시간 동안 잠들어 있을 수도 있습니다. 그러나 절약한 CPU 시간을 다른 프로세스에 할당하는 방법을 결정할 수는 없습니다.

스레딩 사례에 대해서는 psusi의 의견을 참조하세요.

메모리 새 프로세스는 초기 RAM 양을 얻습니다(그러나 이것이 커널 기본값인지 아니면 바이너리 헤더 데이터에 제공된 값인지는 알 수 없습니다). 더 많은 RAM이 필요한 경우 프로세스는 커널에 더 많은 RAM을 요청합니다(참고자료 참조 man 2 mmap).

CPU 시간과 마찬가지로 프로세스는 일부 메모리를 해제한 후 어떤 프로세스가 더 많은 메모리를 확보할지 결정할 수 없습니다.

프로세스 종료

프로세스가 종료되면(자체 결정 또는 종료로 인해) 커널은 자동으로 리소스를 해제합니다. 프로세스는 종료되기 전에 "모든" RAM을 해제할 수 있지만 그렇게 할 이유는 없습니다. 대신, _exit또는 으로 전화하세요 exit_group.

관련 정보