운영체제의 기능
- 프로세스 관리 - 여러 프로세스를 동시에 실행시키기 위해.. 컨텍스트 스위칭
- 메모리 관리 - 메모리 할당, 반환, 보호 등..
- 파일, 파일시스템 관리
- 장치(device) 관리
- 사용자 인터페이스 제공
- 네트워킹
- 보호 및 보안
운영체제와 커널
운영체제 = 도구프로그램(tool) + 커널(kernel) + 디바이스 드라이버들(device drivers) (+ 소프트웨어)
1. 툴 소프트웨어
사용자가 컴퓨터를 편리하게 사용할 수 있도록 운영체제 패키지에 포함된 프로그램들이다.
ex) 파일탐색기, 작업관리자, 제어판 등
2. 커널
운영체제의 핵심 기능을 처리하는 코드이자 프로그램이다. 컴퓨터의 자원을 직접 제어하고 관리하는 코드들의 집합이다.
응용프로그램은 커널 함수를 호출할 때 시스템 호출(system call)을 사용한다.
3. 디바이스 드라이버
장치를 직접 제어하는 프로그램 코드이다.
ex) 마우스의 움직임과 클릭을 인지하는 마우스 드라이버
운영체제 인터페이스 : 시스템 호출과 인터럽트
1. 시스템 호출(system call)
시스템 호출은 응용프로그램에서 커널 코드(커널에 작성된 함수)를 실행하는 기법이다. 응용프로그램이 직접 함수 호출(fuction call) 방법으로는 호출할 수 없다. 커널 함수 이름과 위치를 알 수 없고, 커널이 있는 메모리에 접근할 권한이 없기 때문이다.
그래서 운영체제는 커널 함수를 호출하는 라이브러리를 제공한다. 라이브러리에 들어있는 시스템 호출 함수를 호출하면 된다.
라이브러리 = 표준 라이브러리 함수 + 시스템 호출 함수
표준 라이브러리 함수 - printf(), abs() 등 커널 기능과 무관한 작업을 위해 제공.
시스템 호출 함수 - open(), read() 등 바로 커널 함수를 호출하기 위해 제공. 커널 코드가 존재하는 메모리 영역에 액세스할 수 있는 권한을 가짐.
2. 인터럽트(interrupt)
인터럽트는 하드웨어 장치들이 CPU에게 하드웨어 신호(인터럽트 신호)를 물리적으로 발생시켜, 작업이 끝났음을 CPU에게 알리는 방법이다. CPU가 인터럽트 신호를 받게 되면, 현재 하던 일을 멈추고 인터럽트 요청을 처리하는 코드를 실행한다. 이 코드는 커널이나 디바이스 드라이버 내에 작성된다.
ex) 사용자가 키보드 키를 누르는 순간 인터럽트가 발생한다. CPU는 하던 일을 멈추고 키보드 인터럽트 서비스 루틴을 실행하여 입력된 키 값을 읽어 버퍼로 전달한다. 실행을 마치면 CPU는 이전 코드로 돌아간다.