프로그래머 본인이 직접 작성한 함수
누군가 작성해놓은 함수를 호출만 하여 사용하는 함수
두 함수는 기계어 형태로 존재한다. 따라서 이 두 함수는 프로그램이 실행될 때에 해당 프로세스의 주소 공간에 포함되며, 또한 함수 호출 시에도 자신의 주소 공간에 있는 스택을 사용하게 된다.
OS 커널에 정의된 함수
- 시스템 콜 함수 사용자 프로그램이 OS의 서비스를 요청하기 위해 호출하는 함수
- 인터럽트 처리 함수 각종 H/W 및 S/W가 CPU의 서비스를 요청하기 위해 발생시키는 함수
이와 같은 커널함수는 OS의 커널 주소 공간에 코드가 정의된다. 즉 OS 내에 있는 함수를 호출해서 사용하는 것이다.
- read()
- write()
두 함수는 각각 I/O를 필요로 할 때 호출하는 함수
원칙적으로는 인터럽트 처리 중에 또 다른 인터럽트가 발생하는 것을 허용하지 않는다. (데이터의 일관성이 유지되지 않는 문제가 발생할 수 있다.) 하지만 인터럽트마다 중요도가 다르기 때문에 현재 처리 중인 인터럽트보다 더 높은 우선순위의 인터럽트가 발생한다면 현재 처리 중이던 인터럽트 코드의 수행 지점을 저장하고 우선순위가 높은 인터럽트를 처리하게 된다.
비록 함수 호출이기는 하지만 자신의 주소 공간을 거스르는 영역((커널의 주소 공간)에 존재하는 함수를 호출하는 것
일반적인 인터럽트 발생과 동일한 방법이나 시스템 콜은 스스로 인터럽트 라인을 세팅한다는 점이 다르다.
- 타이머에 의한 인터럽트가 발생하는 경우
- 입출력 요청을 위헤 시스템 콜을 하는 경우
자신의 주소 공간에 정의된 코드를 실행하는 것
시스템 콜 함수를 실행하는 것
※주의!
시스템 콜을 통해 실행되는 것이 프로세스 A의 코드가 아닌 OS 커널의 코드이지만, 시스템 콜이 수행되는 동안 커널이 실행 상태(running state)에 있다고 하지 않고프로세스 A가 실행 상테에 있다고 말한다는 것이다.
