
운영체제가 제공하는 서비스

- 사용자 인터페이스
- 프로그램 실행
- 입출력 연산
- 파일시스템 조작
- 통신
- 오류 탐지
- 자원 할당
- 회계
- 보안
명령어 해석기
CLI로 인터페이스를 제공할 때는 명령어 해석기가 필요하다.
명령어 해석기가 뭔데요
- 윈도우와 유닉스 같은 운영 체제는 명령어 해석기를 작업이 시작되거나 처음 로그인 할 때 실행하는 특수한 프로그램으로 취급한다.
- 선택할 수 있는 여러 명령어 해석기를 제공하는 시스템에서는 이러한 명령어 해석기를 셸이라고도 불린다.
명령어 해석기 역할
사용자가 지정한 명령을 가져와서, 메모리에 적재한 후, 그것을 실행한다.
ex) rm file.txt
- rm 이라고 불리는 파일(프로그램)을 찾는다.
- 그 파일(프로그램)을 메모리에 적재한다.
- 매개변수 file.txt를 전달한다.
- 실행한다.
명령어 해석기 구현
- 명령 해석기 자체가 명령을 실행할 코드를 가지는 경우
- 명령 해석기가 자신의 코드를 분기하면 된다.
- 명령어 개수만큼 명령어 해석기의 크기가 커진다.
- 시스템 프로그램에서 명령을 구현한 경우
- 명령 해석기는 명령을 알지 못해도 된다.
- 그냥 메모리에 명령어를 적재하고 실행시키면 된다.
시스템 콜
시스템 콜이 뭔데요
운영체제가 제공하는 서비스의 인터페이스
응용/시스템 프로그램은 운영체제가 제공하는 서비스를 사용하려면 시스템 콜을 호출해야 한다.
시스템콜 유형

- 프로세스 제어
- 파일 조작
- 장치 조작
- 정보 유지
- 통신
- 보호
표준 C 라이브러리
표준 C 라이브러리는 많은 버전의 유닉스, 리눅스를 위한 시스템콜 인터페이스를 제공한다.
여기에서 말하는 라이브러리는 시스템콜 인터페이스이다.
라이브러리에서 구현한 함수를 호출하면 내부에서 시스템콜을 호출한다.
아래와 같은 프로그램을 실행할 때
#include<stdio.h>
int main(){
print("Greetings");
}
- 라이브러리에서 제공하는
printf()
함수를 호출한다.
printf()
내부에서 시스템콜을 호출한다.
- 사용자 모드에서 커널 모드로 전환된다.
- 시스템콜이 실행된다.
라이브러리의 목적: 시스템콜 추상화
라이브러리의 구체적인 동작 방식

위 그림에서 handler, table 등 너무 자세한 내용은 제외하고 살펴보면
- 사용자 프로그램에서 라이브러리 함수를 호출한다.
- 함수 내부에서 시스템콜을 호출한다.
- 커널에서 관리하는 시스템콜 관련 테이블을 살펴본다.
- 테이블에는 각 시스템콜의 번호와 시스템콜 함수에 대한 포인터를 관리한다.
- 테이블에 매핑된 함수를 호출한다.
크게 보면 위와 같은 방식으로 동작한다.
시스템콜 파라미터를 전달하는 방식

- 파라미터를 레지스터 내에 전달
- 파라미터가 레지스터보다 더 많은 경우, 메모리 내의 블록이나 테이블에 파라미터를 저장하고, 블록의 주소가 레지스터 내에 매개변수로 전달됨
- 프로그램에서 스택에 매개변수를 넣고, 운영체제가 스택에서 매개변수를 꺼내는 방법
시스템 프로그램
시스템 프로그램은 프로그램 개발과 실행을 위해 보다 편리한 환경을 제공한다.
그들 중 몇몇은 단순히 시스템콜 인터페이스이다.
시스템 프로그램 분류
- 파일 관리 프로그램
- 상태 정보
- 날짜, 시간, 사용 가능 메모리 등 상태 정보를 제공하는 프로그램
- 파일 변경
- 프로그래밍 언어 지원
- 컴파일러, 어셈블러, 디버거 및 해석기와 같은 프로그램
- 프로그램 적재와 실행
- 통산 프로그램
- 백그라운드 서비스 프로그램