운영체제에서 구분되는 두가지 모드 ( Mode Of Operation )
。보안위협 또는 프로세스의 부적절한 작업실행으로 인한 오작동을 방지하기 위한 용도로 2가지 모드 ( User Mode / Kernel Mode )를 구분
▶ 커널에서는 중요한 자원을 관리하므로 사용자가 자원에 쉽게 접근하지 못하도록 Kernel Mode로 따로 구분
。프로세스가 실행되는 동안 System Call을 통해 유저 모드와 커널 모드를 반복적으로 넘나든다.
▶ 프로세스가 입출력명령어 실행 시 System Call을 호출하여 OS가 대리로 커널모드로 진입하여 작업을 수행


사용자 모드 ( User Mode )
。사용자가 일반 응용프로그램들을 사용하기 위해 접근하는 영역
▶ 코드작성 , 프로세스 실행 명령등의 한정된 행위만 수행 가능
。 제한된 권한으로 작동하여 시스템 자원에 접근이 불가능
▶ HW( HDD , RAM 등 )에 직접 접근 불가능
。오류가 발생해도 OS 전체에 영향을 주지 않는다.
。System Call을 호출하여 Kernel Mode로 진입가능
커널 모드 ( Kernel Mode )
。Kernel을 통해 모든 메모리와 명령어에 접근이 가능하며 시스템을 제어하는 용도의 실행모드
▶ CPU Schedulling , Memory Management 등의 업무를 수행
。모든 시스템 자원에 접근이 가능하는 높은 권한으로 동작
▶ HW( HDD , RAM 등 )에 직접 접근이 가능하며 입출력 작업 시 커널모드로 진입
。User Mode에서 System Call을 호출하여 접근 및 System Call을 처리할 경우 User Mode로 복귀
특권 명령 ( = System Call )

。User Mode의 일반 프로그램이 커널 모드에서만 사용가능한 시스템 기능을 안전하게 사용할 수 있도록 OS에게 요청하는 역할의 인터페이스
。 User Mode의 일반 프로그램이 Kernel의 함수를 System Call을 통해 호출
▶ System Call은 API와 유사한 역할을 수행
- 각
OS의 System Call 종류

- 기존
System Call 호출 방식

。User Mode에서 Application이 작업처리를 위해 System Call : Open()을 System Call Interface에 전달하여 Kernel Mode에 진입 후 Kernel Mode에서 제공하는 데이터와 기능을 활용해 코드에 명기된 작업을 처리 후 System Call이 처리 된 경우 User Mode로 복귀
▶ 일일이 프로그램의 작업처리할때마다 Kernel Mode로 진입 후 처리하고 User Mode로 복귀하는 과정을 코드로 기입하기에는 복잡하므로 보통 라이브러리를 사용한다.
ex ) 파일을 READ하는 경우 open()을 통해 Kernel Mode로 진입 및 코드에 의한 작업을 수행하고 close()를 통해 User Mode로 복귀
standard C Library를 이용한 System Call 처리

。기능을 구현하기위해 User Mode와 Kernel Mode를 진입 시 System Call Interface를 통한 시스템 콜을 일일이 코드를 작성하기보다, standard C Library의 함수를 사용하여 손쉽게 처리 가능
standard C Library
。ANSI C Standard에 의해 정의된 함수 모음
。기본적인 입출력, 문자열처리, 수학계산, 메모리관리, 에러처리 등 다양한 기능을 수행하는 함수를 제공
▶ 표준 라이브러리를 활용하는 경우 User Mode와 Kernel Mode에 진입하기위해System Call Interface를 통한 복잡한 시스템 콜을 일일이 구현하지 않고도 standard C Library 함수를 통해 프로그램 개발이 가능
。라이브러리의 이미 구현된 함수를 사용하여 개발시간 단축 및 코드품질을 증진
API ( Application Programming Interface )
。개발자가 프로그래밍에 필요한 사용가능한 매개변수와 반환값을 포함한 함수들의 집합을 명시
▶ 개발자는 OS에서 제공하는 코드라이브러리를 통해 API를 활용
。API를 구성하는 함수들은 개발자를 대신하여 실제 System Call을 호출
▶ API 함수호출과 System call을 호출하는 것은 강한 상관관계가 존재
▶ System Call을 호출하는 것 보다 API로 작업하는 것이 더 간단.
ex ) Windows API , Java API 등