시스템 콜 [System Call] & OS 정의
운영체제 1번째 System Call posting 입니다.
시스템 콜에 대해서 공부하기 이전에 필요한 내용들을 먼저 공부하려고 합니다.
OS란 무엇인가?
컴퓨터 하드웨어를 관리하는 프로그램 입니다.
컴퓨터와 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행하는 프로그램입니다.
OS의 목적
사용자가 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공하는 것이다.
사용자 프로그램을 실행시켜 사용자 문제를 좀 더 쉽게 해결하고자 하는 것이다
컴퓨터 하드웨어를 효율적인 방법으로 사용하기 위함이다.
컴퓨터 시스템의 구조
컴퓨터 시스템의 구조는 위의 그림과 같이 4개의 컴포넌트로 구성됩니다.
- 하드웨어
- CPU, Memory, I/O Devices와 같이 기본적인 컴퓨팅 자원을 제공합니다.
- 운영체제
- 다양한 응용프로그램과 사용자들이 하드웨어를 사용하는 것을 중재하고 제어하는 역할을 수행합니다.
- 응용 프로그램
- 워드 프로세서, 컴파일러, 웹 브라우저 등과 같이 시스템 자원들이 사용자들의 컴퓨팅 문제를 해결하기 위해 사용되는 방법을 정의합니다.
- 사용자
- 사람, 기계, 다른 컴퓨터를 의미합니다.
운영 체제의 정의
운영체제의 정의는 공통적으로 받아들여지는 정의는 없지만, 운영체제를 주문했을 때 운영체제 판매 회사가 가져오는 모든 것들을 칭한다고 생각하면 됩니다.
운영체제는 자원 할당자이다.
모든 자원을 관리한다.
효율적이고 공정한 자원의 사용을 위하여 충돌하는 요구들에 대해 자원 할당을 결정합니다.
운영체제는 제어 프로그램이다.
- 컴퓨터의 잘못된 사용과 에러를 방지하기 위해 프로그램의 실행을 제어합니다.
커널이란?
커널은 컴퓨터에서 항상 수행되는 하나의 프로그램을 의미합니다.
컴퓨터의 전원을 키게 되면, 운영체제는 동시에 수행이 되게 됩니다. 프로그램이 컴퓨터 시스템에서 수행되려면 메모리에 상주해있어야합니다.
하지만, 운영체제의 경우 규모가 크기 때문에 모두 메모리에 상주하게 된다면 한정된 메모리의 공간의 낭비가 발생하게 됩니다. 따라서 운영체제 중 항상 필요한 부분만 전원이 켜짐과 동시에 메모리에 올려두고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 됩니다. 이 때 메모리에 상주하는 운영체제 부분을 커널이라고 합니다.
Dual-Mode 연산
CPU는 사용자 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 사용자 모드(User mode)와 커널 모드(Kernel mode)[감독자 모드, 시스템 모드, 특권 모드라고도 불립니다]를 제공합니다.
커널 모드의 구분은 모드 비트(Mode Bit)를 이용해서 구분하는데 아래와 같습니다.
Mode Bit
모드 비트는 하드웨어에 의해 제공됩니다. (일반적인 cpu의 경우, 레지스터에 저장되어 사용됩니다. 시스템 아키텍처와 구성에 따라서 달라질 수 있습니다.)
- 시스템이 사용자 코드와 커널 코드를 수행하는 때를 구분할 수 있는 능력을 제공합니다.
- 몇몇 명령어는 단지 커널 모드에서만 실행되도록 특권을 가지도록 지정되었습니다.
- 시스템 호출(System Call)은 모드를 커널로 바꾸었다가 호출로부터 리셋되면 다시 사용자 모드로 복귀합니다.
사용자에서 커널모드로 전환
시스템 부팅시, 하드웨어는 커널 모드로 시작합니다. 그리고 OS는 적재되고 사용자 모드의 사용자 응용 프로그램들이 시작합니다.
트랩이나 인터럽트가 발생할 때마다, 하드웨어는 사용자 모드에서 커널모드(mode bit = 0)으로 전환됩니다.
OS가 컴퓨터에 대한 제어권을 흭득하면, 그것은 커널 모드입니다.
시스템은 항상 사용자 프로그램에게 제어권을 넘겨주기 전에 사용자 모드로 전환됩니다.
System Call
프로세스가 운영체제와 통실하는 유일한 방법인 시스템 콜에 대해서 공부합니다.
운영체제가 지원하는 서비스에 대한 프로그래밍 인터페이스로 고급 언어로 많이 작성되어집니다.
대부분 프로그램에 의해 접근되는 방법은 직접적인 시스템 호출보다 고급 응용프로그램 인터페이스 (Application Program Interface : API)를 사용합니다.
API를 사용하는 이유는 시스템 호출보다 더 간단한 방법을 제공하고 구현에 대한 자세한 내용을 숨기기 위함에 있습니다.
시스템 호출의 예제
위의 그림과 같이 단순히 파일을 복사하는 과정에서 많은 시스템 콜이 발생합니다.
표준 C 라이브러리 예제
위의 그림과 같이 C 프로그램은 prinft() 라이브러리를 호출하고 이는 커널모드에서 write() 시스템 콜을 부르게 됩니다.
시스템 호출은 어떻게 구별할 수 있나요?
시스템 호출에는 번호가 할당되어 있습니다. 시스템 호출 인터페이스는 이 번호에 따라 색인되는 테이블을 유지하고, OS 커널내의 의도하는 시스템 호출을 부르고 반환값을 되돌려줍니다.
시스템 콜을 구별하는 방법은 운영 체제의 종류에 따라 달라질 수 있습니다. 그러나 모든 운영 체제에서는 각각의 시스템 콜에 대해 고유한 식별자를 할당하여 구별하며, 이를 통해 운영 체제는 각각의 시스템 콜을 올바르게 처리할 수 있습니다.
시스템 호출 매개변수 전송
단순히 원하는 시스템 호출이 무엇인지보다 더 많은 정보가 요구 되는 경우가 있습니다.
운영체제에 매개변수를 전달하기 위해서 세 가지 방법이 있습니다.
매개 변수를 레즈스터 내에 전달하는 것 - 이 경우, 레지스터의 제한으로 인해서 너무 많은 매개변수가 필요한 경우 다른 방법을 사용해야 합니다.
매개변수가 메모리 내의 블록이나 테이블에 저장되고, 블록의 주소가 레지스터 내에 매개변수로 전달됩니다.
매개변수가 프로그램에 의해 스택에 넣어지고, 운영체제에 의해 꺼내지는 방법이 있습니다.
시스템 호출의 유형
- 프로세스 제어
- 끝내기, 중지
- 적재, 실행
- 프로세스 생성, 프로세스 종료
- 프로세스 속성 흭득, 프로세서 속성 설정
- wait event, signal event, wait time
- 메모리 할당 및 자유화
- 파일 관리
- 파일 생성, 파일 삭제
- 열기, 닫기
- 읽기, 쓰기, 위치 변경
- 파일 속성 흭득 및 설정
- 장치 관리
- 장치 요청, 장치 방출
- 읽기, 쓰기, 위치 변경
- 장치 속성 흭득, 장치 속성 설정
- 장치의 논리적 부착 또는 분리
- 정보 유지
- 시간과 날짜의 설정과 흭득
- 시스템 자료의 설정과 흭득
- 프로세스, 파일, 장치 속성의 흭득
- 프로세스, 파일, 장치 속성의 설정
- 통신
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
<참고자료> 이미지 및 내용 : 강의자료 참고자료>