주어진 자원으로 최대한의 성능을 내면서 특정 사용자 혹은 프로그램이 지나친 불이익을 받지 않도록 한다.
주요 역할
사용자에게는 편리한 인터페이스와 환경을 제공하는 역할을 한다.
운영체제 자신을 보호하는 역할을 가진다. (보안적인 측면)
운영체제의 분류
시분할 시스템
여러 작업을 수행할 때 컴퓨터의 처리 능력을 일정한 시간 단위로 분할해 사용하는 방식이다.
현대의 범용 컴퓨터는 대부분 시분할 방식을 사용한다.
다중 프로그래밍 방식과 결합하여 모든 작업이 동시에 진행되는 것처럼 대화식 처리가 가능하다.
다중 프로그래밍 시스템(multi-programming system)
하나의 CPU와 주기억장치를 이용하여 여러개의 프로그램을 동시에 처리하는 방식이다.
입출력 장치가 일을 하는 동안 cpu가 쉬는 것(일괄 처리 시스템)이 아니라 다른 프로그램에 대해서 일을 계속 하기 때문에 cpu 사용 효율이 증가한다.
대화형 시스템(interactive system)
여러 프로그램들을 같이 수행 중 각 프로그램에 대한 키보드 입력의 결과를 곧바로 화면에 보여 주는 시스템이다.
다중 처리기 시스템(multi-processor system)
하나의 시스템에 여러 개의 프로세서를 두어 하나의 작업을 각 처리기에게 할당하여 수행하도록 하는 시스템이다.
여러 작업을 동시에 처리하여 실행 시간이 감소되고 전체 효율을 향상된다.
하나가 고장 나도 다른 프로세서들에 의해 고장난 프로세서의 작업을 대신 수행하며 장애극복이 가능하다.
커널과 시스템 콜
시스템 콜
운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다.
운영체제에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많으 부분이 커널 모드를 사용한다. 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다.
OS가 제공하는 이러한 인터페이스를 '시스템 콜 (system call)' 이라고 한다.
커널
운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간이 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다.
메모리에 상주하는 운영체제의 부분을 kernel(커널)이라고 한다.
커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다.
커널모드
운영체제(OS)가 CPU를 사용하는 모드이다.
시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행한다.
Privileged Instructions는 사용자 모드에서 실행되면 exception이 발생한다.
유저모드
사용자 모드에서 사용자 애플리케이션 코드가 실행된다.
사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 접근할 수 없다. 접근을 위해서는 '시스템 콜(System Call)'을 사용해야 한다.
폴링과 인터럽트
폴링
CPU가 다른 프로세스를 실행하는 동안 디바이스로 부터 발생하는 이벤트들을 처리하는 두 가지 방법중 하나이다.
Polling은 CPU가 현재 하던 일을 멈추고 중요한 일에 반응하도록 멈추게 한다.
자원이 폴링 신호를 받으면 자신의 상태를 적어놓을 수 있는 곳에 저장시키고, CPU는 폴링 때 그것을 읽어보는 방식이다.
아무 일이 없어도 CPU는 폴링에 일정 시간을 들여야 한다. 각 자원은 직전 폴링 이후 변화된 자신의 상태를 다음 폴링 때까지는 알릴 수 없다. 이러한 이유로 잘 사용되지 않는다.
인터럽트
각 자원들이 능동적으로 자신의 상태 변화를 CPU에 알리는 방식이다.
CPU는 따로 시간을 들이지 않아도 되고, 자원들은 변화가 발생하면 즉시 알려 처리할 수 있다.
인터럽트의 종류
하드웨어 인터럽트
하드웨어 자원 즉, 장치 또는 주변 장치들로부터의 인터럽트이다.
소프트웨어 인터럽트
트랩
CPU 스스로 자신에게 인터럽트하는 경우이다.
실행 중인 명령어 때문에 생기는 일이므로 소프트웨어 인터럽트이다. 예를 들어 0으로 나누는 등의 명령어 오류가 있다.
시스템 호출
입출력 명령어를 커널 모드에서 진행하는 경우. 즉, 사용자 모드에서 커널 모드로 전환하는 경우이다.
Direct Memory Access
DMA
CPU 이외에 메모리 접근이 가능한 장치이다.
빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다.
DMA는 일종의 컨트롤러로서, CPU가 주변 장치들의 메모리 접근 요청에 의해 자주 인터럽트당하는 것을 막아준다. (인터럽트를 통한 오버헤드가 줄어든다.)
DMA를 사용하게 되면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는 것이 아니라, DMA가 대행함으로써 CPU는 원래 하던 작업을 멈추고 인터럽트를 처리할 필요가 없어진다.
I/O 방식의 분류
동기식 I/O
입력이나 출력을 요청한 후에 그 작업이 완료될 때까지 기다리는 방식이다.
동기식 I/O를 사용하면 작업이 끝날 때까지 다른 작업을 수행할 수 없다.
구현이 간단하지만, 성능이 저하된다.
비동기식 I/O
입력이나 출력을 요청한 후에 바로 다른 작업을 수행하는 방식이다.
I/O 작업을 별도의 스레드나 프로세스에 위임하고, 메인 스레드나 프로세스는 다른 작업을 계속한다. 이때 비동기식 I/O를 사용하면 파일 작업이 완료되면 콜백 함수나 이벤트를 통해 결과를 받아온다.