2012-10-07 7 views

답변

4

syscalls는 사용자 랜드 (프로그램이 실행되는 곳)에서 커널 랜드까지의 인터페이스와 다소 비슷합니다. 하드웨어와의 통신 (예 : 네트워크 카드에서 바이트 읽기, 프로세스 시작, malloc (brk 사용) 등을 통한 메모리 할당 등)과 같이 커널 만 수행 할 수있는 작업을 수행 할 때 필요합니다.

반면에 사용자 영역 기능은 strcpy과 같이 들여 쓰이지 않아 syscalls을 수행합니다. 그들은 자신이하는 일을하는 데 특별한 특권이 필요 없으며 단지 사용자 영역에서 프로세스의 메모리에서 작동합니다.

syscalls은 사용자가 커널 토지로 돌아갈 때 비용이 많이 들기 때문에 성능이 크게 저하되므로 strcpy과 같이 자주 호출되는 기능을 가진 사용자는 설계의 관점에서 이해가되지 않을 가능성이 높습니다. 보이다.

4

시스템 호출은 컨텍스트 전환을 커널에 암시하기 때문에 성능면에서 매우 중요합니다. 따라서 strcpy (그 기능은 실질적으로 while(*d++ = *s++)과 동일하지만 잠재적으로 아키텍처에 최적화 됨)과 같은 간단한 라이브러리 함수의 경우 시스템 호출이 의미가 없습니다.

복사 중 페이지 오류로 인해 커널 컨텍스트 전환과 시스템 호출이 발생할 수 있지만 시스템 호출을 직접 호출 한 결과는 strcpy이 아닙니다.

+0

strcpy는 가상 메모리에 쓰기가 필요하므로 운영 체제 계층 구조에서 가상 메모리는 어디에 상주합니까? 커널 공간 또는 사용자 공간에서? – Richard

+1

가상 메모리는 커널에 의해 관리됩니다. 사용자 프로그램은 가상 메모리 만 봅니다. – nneonneo