9. 운영체제 시작하기
1. 운영체제를 알아야 하는 이유
운영체제란?
하드웨어가 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
운영체제 또한 메모리에 적재되어야 하는데, 커널 영역(kerner space) 에 따로 저장되어 있다. -> 운영체제를 제외한 프로그램들이 메모리에 적재되는 공간을 사용자 영역(user space) 라고 부른다.
운영체제가 하는 일
운영체제는 다음과 같은 판단을 한다.
프로그램들을 메모리 어디에 적재해야 하는가? (메모리 사용 최적화)
CPU 가 어느 프로그램부터 실행시켜야 하는가? (실행 우선순위)
입출력장치(ex. 프린터, 모니터, 키보드, 마우스) 를 어떤 프로세스부터 사용해야 하는가? (선점 우선순위)
운영체제를 알아야 하는 이유
우리가 만든 프로그램은 결국 하드웨어가 실행하고, 그 하드웨어를 조작하는 프로그램이 운영체제이다. -> 운영체제는 프로그램이 하드웨어에서 어떻게 동작하는지 매우 자세히 알고 있다.
운영체제는 프로그램이기 때문에, 다음의 정보를 사용자에게 전달해줄 수 있다.
현재 하드웨어의 상태가 어떠한가?
사용자의 코드가 어떻게 실행 되었는가?
현재 하드웨어의 문제는 무엇인가?
결국, 위의 정보를 바탕으로 문제해결의 실마리를 잡을 수 있다.
2. 운영체제의 큰 그림
운영체제의 심장, 커널
운영체제의 핵심서비스(자원을 조작하고 접근하는 기능, 프로그램을 올바르고 안전하게 실행하는 기능 등..) 담당하는 프로그램을 커널이라고 한다. -> 커널을 운영체제의 전부라고 보아도 무방하기 때문에, 운영체제와 커널을 동의어로 보는 경우가 많다.
커널에 포함되지 않는 부분 중 대표적인 부분은 사용자 인터페이스(그래픽 유저 인터페이스, 커맨드 라인 인터페이스) 가 있다.
이중 모드와 시스템 호출
기본적으로 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. -> 만약 응용 프로그램이 하드웨어 자원에 직접 접근하게 된다면, 자원이 무질서하게 관리될 것이고 응용 프로그램이 조금만 실수해도 컴퓨터 전체에 악영향을 끼칠 수 밖에 없다.
때문에, 만약 데이터를 하드디스크에 저장해야 된다고 하면, 응용 프로그램은 운영체제에 저장을 요청한다. -> 이 역할은 이중 모드로써 구현된다.
이중 모드
사용자 모드(user mode) : 운영체제 서비스를 제공받을 수 없는 실행 모드
커널 영역의 코드를 실행할 수 없는 모드이다.
일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다.
커널 모드(kernel mode) : 운영체제 서비스를 제공받을 수 있는 실행 모드
운영체제는 커널 모드로 실행되기 때문에, 자원(하드웨어)에 접근이 가능하다.
시스템 콜
일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행 된다고 했다.
때문에, 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면, 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. -> 이를 시스템 콜(system call) 이라고 부른다.
시스템 콜은 일종의 인터럽트로, 정확히는 소프트웨어적 인터럽트이다. -> 인터럽트는 입출력장치에 의해서 발생하기도 하지만, 인터럽트를 발생하는 명령어(프로세스)에 의해서 발생하기도 한다.
일반적으로 응용 프로그램은 실행 과정에서 시스템 콜이 매우 빈번하게 발생한다. -> 그 과정에서 사용자 모드와 커널 모드를 오가며 실행된다.
운영체제의 핵심 서비스
프로세스 관리
실행 중인 프로그램을 프로세스라고 한다.
일반적으로 하나의 CPU 는 한번에 하나의 프로세스만 실행할 수 있기에 CPU 는 메모리 내 수 많은 프로세스 들을 조금씩 번갈아 가며 실행한다.
이때 각 프로세스의 상태, 사용하고자 하는 자원도 다양하다. 때문에, 운영체제는 다양한 프로세스를 일목요연하게 관리하고 실행할 수 있어야 한다.
자원 접근 및 할당 (운영체제는 아래 자원들을 어떻게 관리하고, 효과적으로 어떤 기능을 제공할까?)
CPU
하나의 CPU 는 한 번에 하나의 프로세스만 실행할 수 있다. -> 때문에, 하나의 프로세스가 CPU 를 사용하고 있다면 다른 프로세스는 기다려야 한다.
이에, 운영체제는 프로세스들이 공정하게 CPU 를 할당하기 위해서 어떤 프로세스부터 CPU 를 사용해야 할 것인지, 얼마나 오래 CPU 를 사용하게 할 것인지 결정할 수 있어야 한다. -> 이를 CPU 스케줄링 이라고 한다.
메모리
메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 가지각색이다. -> 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재해야 할지를 결정해야한다.
입출력장치
인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널이 실행한다.
파일 시스템 관리
우리가 당연하다고 생각하는, 파일 시스템 관리도 운영체제의 핵심 역할이다.
가상 머신과 이중 모드의 발전
가상 머신이란 이름 그대로 소프트웨어적으로 만들어낸 가상 컴퓨터이다.
이 때, 컴퓨터에 설치된 운영체제에서 가상 머신을 설치 및 실행한다면, 그 가상 머신 또한 응용 프로그램이다. -> 사용자 모드로 작동
가상 머신에 설치된 응용 프로그램이 운영체제 서비스를 제공받기 위해서 커널 모드로 전환되어야 하는데, 가상 머신에 설치된 운영체제도 사용자 모드로 작동하면 운영체제 서비스를 제공받기가 어렵다..
그래서 가상화를 지원하는 CPU 는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 모드인 하이퍼 바이저 모드를 따로 둔다. -> 이로써 가상 머신 상에서 작동하는 응용 프로그램들은 하이퍼바이저 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.
Last updated