운영체제 시작하기
운영체제란
실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
커널 영역 / 사용자 영역
커널 영역 : 운영체제가 적재되는 메모리 공간
사용자 영역 : 사용자가 이용하는 응용 프로그램이 적재될 커널 영역 이외의 공간
운영체제의 핵심 서비스
프로세스 관리
실행 중인 프로그램을 프로세스라고 하는데, 일반적으로 CPU는 한번에 한 프로세스만 처리할 수 있으므로 운영체제가 프로세스들을 전환해가며 CPU를 사용하게 한다. 이 때 프로세스 동기화가 필수적이고, 교착 상태를 해결해야 한다.
자원 접근 및 할당
CPU
일반적으로 메모리에 여러 프로세스가 적재되고, 하나의 CPU에는 한번에 하나의 프로세스만 실행되므로, 다른 프로세스들은 CPU를 사용할 동안 기다려야 하는데, 운영체제에서 이를 관리하는 것을 CPU 스케쥴링이라고 한다.
메모리
메모리에 적재된 프로세스들은 크기도, 주소도 다 다르다. 운영체제는 새로운 프로세스가 적재될 때의 주소를 결정해야 하고, 메모리 공간도 관리해야 한다.
입출력장치
인터럽트 서비스 루틴은 운영체제의 기능으로 커널 영역에 있다. 입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지이다.
파일 시스템
파일 열기, 닫기, 생성, 삭제, 디렉터리 관리도 운영체제가 담당한다.
가상 머신은 응용 프로그램으로 사용자 모드로 실행된다. 하지만 가상 머신에 운영체제가 존재할 때, 이 운영체제는 어떻게 커널 영역의 서비스를 제공받을 수 있을까? -> 가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 하이퍼바이저 모드를 따로 둔다. 가상 머신 위에서 작동하는 응용 프로그램들은 하이퍼바이저모드로써 운영체제 서비스를 받을 수 있다.
커널
운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 하는데, 운영체제는 커널 이외에도 사용자 인터페이스 (GUI, CLI)도 제공한다.
이중모드
이중모드란, CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식이다.
사용 이유
운영체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하고, 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다.
이러한 운영체제의 문지기 역할은 이중 모드 를 사용하여 구현된다.
사용자 모드
운영체제의 서비스를 제공받을 수 없는 실행 모드 (슈퍼바이저 플래그 off)
커널 모드
운영체제 서비스를 제공받을 수 있는 실행 모드 (슈퍼바이저 플래그 on)
시스템 호출
사용자 모드에서 실행되는 프로그램이 자원에 접근하기 위해 운영체제 서비스를 제공받으려면 커널 모드로 전환되어야 하는데, 이 때 시스템 호출을 통해 커널 모드로 전환할 수 있다.
시스템 호출도 일종의 소프트웨어 인터럽트이다.
- 시스템 호출 실행 (사용자 모드 -> 커널 모드)
- 운영체제 코드 실행 (커널 모드)
- 시스템 호출로부터 복귀 (커널 모드 -> 사용자 모드)
응용 프로그램은 실행 도중 빈번하게 시스템 호출을 발생시키고, 사용자 모드와 커널 모드를 오가며 실행된다.