내가 이해한 바로는 시스템 호출은 예외나 인터럽트를 통해 실행되는 커널 코드 집합입니다. 시스템 호출이 프로세스인지 알아야 합니까?
답변1
프로세스는 시스템 호출을 할 수 있습니다. 원래 x86 시스템에서는 어떤 호출이 필요한지 나타내기 위해 레지스터를 로드한 다음 "int 0x80" 명령을 실행하는 작업이 포함되었습니다. 이 소프트웨어 인터럽트 명령어는 x86 프로세서가 커널로 전환하여 레지스터의 값을 확인한 다음 열기, 읽기, 쓰기, 닫기, 탐색 또는 필요한 모든 시스템 호출을 수행합니다.
시스템 호출이 프로세스인지 묻는 것은 "새가 여행 계획인가?"라고 묻는 것과 같습니다. 정답은아니요. 새를 보기 위해 여행을 계획할 수도 있습니다. 유용한 작업을 수행하기 위해 프로세스는 시스템 호출을 수행합니다(이론적으로 다른 프로세스는 공유 메모리를 모니터링하거나 ptrace를 사용할 수 있으므로 프로세스는 시스템 호출을 수행할 필요가 없으며 100% 응답은 없습니다). 같은 종류의 것이 아닙니다.
답변2
프로세스는 일부 코드의 실행 중인 인스턴스입니다. 바이너리 /bin/bash를 예로 들어 보겠습니다. 코드가 디스크에 존재합니다. /bin/bash가 실행될 때마다 새로운 프로세스가 생성됩니다.
주어진 순간에 각 CPU는 사용자 모드나 커널 모드에서 실행됩니다. 사용자 모드는 사용자 공간 코드의 실행을 나타내고, 커널 모드는 커널 코드의 실행을 나타냅니다.
시스템 호출은 일부 사용자 코드가 커널 모드로 들어가는 수단입니다. 시스템 호출은 프로세스 컨텍스트 내에서 이루어집니다. 시스템 호출이 실행되면 동일한 프로세스가 커널 모드로 들어갑니다. 이 시스템 호출을 실행하기 위해 새 프로세스가 생성되지 않습니다.