Skip to content

Latest commit

 

History

History
72 lines (46 loc) · 4.64 KB

File metadata and controls

72 lines (46 loc) · 4.64 KB

4. 사용자 프로그램이 사용하는 함수

사용자 정의함수

프로그래머 본인이 직접 작성한 함수를 뜻한다.

라이브러리 함수

프로그래머 본인이 직접 작성하지는 않았지만 이미 누군가 작성해놓은 함수를 호출만 하여 사용하는 경우를 뜻한다.

사용자 정의함수라이브러리 함수는 모두 그 프로그램의 코드 영역에 기계어 명령 형태로 존재한다. 따라서 이 두 함수는 프로그램이 실행될 때에 해당 프로세스의 주소 공간에 포함되며, 또한 함수호출 시에도 자신의 주소 공간에 있는 스택을 사용하게 된다.

커널 함수

운영체제 커널의 코드에 정의된 함수를 뜻한다.

커널 함수의 종류

  • 시스템 콜 함수 : 사용자 프로그램이 운영체제의 서비스를 요청하기 위해 호출하는 것

  • 인터럽트 처리 함수 : 각종 하드웨어 및 소프트웨어가 CPU의 서비스를 요청하기 위해 발생시키는 것

커널 함수는 사용자 프로그램의 주소 공간에 그 코드가 존재하는 것이 아니라 운영체제 커널의 주소 공간에 코드가 정의된다.


5. 인터럽트

  • CPU는 매번 프로그램 카운터가 가리키는 곳에 있는 명령을 수행하는 일밖에 하지 못함.

  • 그래서 현재 수행 중인 프로세스로부터 CPU를 회수해 CPU가 다른 일을 수행하도록 하기 위해서는 인터럽트 메커니즘이 필요하다.

인터럽트 처리 중 다른 인터럽트 발생

원칙적으로는 인터럽트 처리 중에 또 다른 인터럽트가 발생하는 것을 허용하지 않는다.

  • 인터럽트 처리 중에 다른 인터럽트를 처리하면 데이터의 일관성이 유지되지 않는 문제가 발생할 수 있기 때문.

인터럽트마다 중요도가 다르기 때문에 상대적으로 낮은 중요도를 가진 인터럽트를 처리하는 도중에 중요도가 더 높은 인터럽트가 발생하는 것을 허락할 필요가 있는 예외가 존재한다.


6. 시스템 콜

  • 시스템 콜은 함수호출이다.

    • 하지만 자신의 주소공간을 거스르는 영역에 존재하는 함수를 호출하는 것을 말한다.

자신의 프로그램이 아닌, 커널이라는 다른 프로그램의 주소 공간에 존재하는 함수를 호출하는 것이다.

  • 일반적인 함수호출이 자신의 스택에 복귀 주소를 저장한 후 호출된 함수 위치로 점프하는 것이라면,

    • 시스템 콜은 주소 공간 자체가 다른 곳으로 이동해야 하므로 일반 함수호출과는 상이한 방법을 사용.
      • 그 방법은 프로그램 자신이 인터럽트 라인인터럽트를 세팅하는 명령을 통해 이루어진다.

프로그램이 CPU를 할당받고 명령을 수행하다가 중간에 CPU를 다시 뻿기는 경우

  • 타이머에 의해 인터럽트가 발생하는 경우

    • 타이머는 특정 프로그램에 의해 CPU가 독점되는 것을 방지하기 위한 하드웨어로, CPU 할당 시간이 만료되면 인터럽트를 발생시킨다.
    • 이러한 타이머는 여러 프로세스가 CPU를 나누어 사용하는 시분할 시스템의 구현을 위한 필수적인 요소라 할 수 있다.
  • 입출력 요청을 위해 시스템 콜을 하는 경우

    • CPU를 다른 프로세스에게 이양하게 된다.
    • 입출력을 요청했던 프로세스는 입출력 요청이 완료된 후 컨트롤러가 인터럽트를 발생시킨 시점부터 다시 CPU를 얻을 수 있는 자격을 부여받게 된다.

7. 프로세스의 두 가지 실행 상태

프로그램이 시작되어 종료될 때까지 사용자모드커널모드 상태로 함수 호출을 하며 실행한다.

  • 프로그램이 사용자정의 함수라이브러리 함수를 호출할 때에는 모드의 변경 없이 사용자모드에서의 실행을 지속
  • 시스템 콜을 하는 경우에는 커널모드로 진입해 커널의 주소 공간에 정의된 함수를 실행하게 된다.

시스템 콜의 실행이 끝나면 다시 사용자 모드로 복귀해서 시스템 콜 이후의 명령들을 계속 실행한다. 프로그램의 실행이 끝날 때에는 커널모드로 진입해 프로그램을 종료한다.