- 사용자 정의 함수 : 프로그래머가 직접 작성한 함수, 프로그램의 코드영역에 기계어 명령 형태로 존재하며 프로그램 실행 시 해당 프로세스의 주소 공간에 포함되고 함수호출도 자신의 주소 공간에 있는 스택 사용
- 라이브러리 함수 : 프로그래머가 직접 작성하진 않지만 이미 누군가 작성한 함수를 호출하여 사용하는 함수, 프로그램의 코드영역에 기계어 명령 형태로 존재하며 프로그램 실행 시 해당 프로세스의 주소 공간에 포함되고 함수호출도 자신의 주소 공간에 있는 스택 사용
- 커널함수 : 운영체제의 커널의 코드에 정의된 함수, 시스템 콜 함수와 각종 하드웨어 및 소프트웨어의 인터럽트 처리 함수가 존재, 커널의 주소 공간에 코드가 정의되며 운영체제 내 함수를 사용자 프로그램이 호출해서 사용하는 것.
CPU는 매번 프로그램 카운터가 가리키고 있는 지점의 명령을 하나씩 수행하고 나서, 다음 명령을 수행하기 직전 인터럽트 라인 체크를 통해 인터럽트가 발생했으면 인터럽트를 처리함.
인터럽트 처리 중 또 다른 인터럽트가 발생하는 것은 테이더의 일관성이 유지 되지 않기 때문에 원칙적으로 허용하지 않음.
그러나 상대적으로 낮은 중요도를 가진 인터럽트를 처리하는 도중에 중요도가 높은 인터럽트가 발생하는 것을 허락할 필요가 있음.
더 높은 우선순위의 인터럽트가 발생 시 현재 처리 중인 언터럽트의 수행지점 저장 후 처리함.
시스템 콜은 함수 호출이지만 자신의 주소 공간을 거스르는 영역(커널)에 존재하는 함수를 호출하는 것.
일반적인 함수 호출은 자신의 스택에 복귀 주소를 저장한 후 호출된 함수 위치로 점프함.
시스템 콜은 주소 공간 자체가 다른 곳으로 이동해야 해 프로그램 자신이 인터럽트를 세팅하는 명령을 통해 실행함.
명령 수행 중 CPU를 빼앗기는 경우는 인터럽트와 시스템 콜의 겨우가 있음.
타이머는 특정 프로그램에 의해 CPU가 독점되는 것을 방지하기 위한 하드웨어로, CPU 할당시간이 만료되면 인터럽트를 발생시킴.(시분할 시스템의 필수 요소)
프로세스가 실행될 때 프로세스 자신의 주소 공간에 있는 코드(사용자 정의 함수, 라이브러리 함수)만 실행되는 것이 아니라 커널의 주소 공간에 있는 코드(커널 함수)도 실행된다. 전자를 **사용자모드의 실행 상태(user mode running)**라 하고, 후자를 **커널모드에서의 실행 상태(kernel mode running)**라 함.
→ 프로세스가 시스템 콜 등으로 실행되는 것이 커널의 코드이지만 커널의 실행 상태(running state)에 있다 하지 않고 프로세스가 실행 상태에 있다고 함.(프로세스가 커널 모드에서 실행 중 이라 함)