9.1 운영체제를 알아야 하는 이유
9.1.1 운영체제란
시스템 자원, 자원: 프로그램 실행에 마땅히 필요한 요소
- 모든 프로그램은 하드웨어를 필요
운영체제: 프로그램에 필요한 자원을 할당, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
운영체제 또한 메모리에 적재되어야 한다.
컴퓨터가 부팅될 때 메모리 내 ‘커널 영역’ 이라는 공간에 따로 적재됨
사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역이라 한다.
운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에 삭제하며, 지속적으로 메모리 자원 관리
응용 프로그램이 실행되려면 반드시 CPU가 필요
- 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원 할당
9.1.2 운영체제를 알아야 하는 이유
- 운영체제가 없다면 하드웨어를 조작하는 코드를 모두 개발자가 직접 작성해야 한다.
- 다행히, 운영체제의 도움을 받아 간편하게 개발 가능
- 하드웨어를 조작하는 프로그램인 운영체제는 하드웨어 상의 문제를 사용자에게 알려주고, 이것이 문제 해결의 실마리가 된다.
- 대다수의 오류 메시지의 근원은 운영체제이다.
9.2 운영체제의 큰 그림
9.2.1 운영체제의 심장, 커널
- 운영체제 서비스: 운영체제가 응용 프로그램(App SW)에 제공하는 기능들
- 운영체제 핵심 서비스
- 자원에 접근하고 조작하는 기능
- 프로그램이 올바르게 안전하게 실행되는 기능
- 커널: 운영체제의 핵심 서비스를 담당하는 부분
- 운영체제가 제공하는 서비스 중에 커널에 포함되지 않는 서비스 중 대표적으로 사용자 인터페이스(UI) 가 있다.
- UI는 운영체제가 제공하는 서비스이지만, 그저 컴퓨터와 상호작용하기 위한 통로일 뿐, 커널에 속한 기능은 아니다.
- UI의 종류
- GUI: Graohical User Interface, 마우스, 터치
- CLI, Command Line Interface, 명령어 입력
9.2.2 이중 모드와 시스템 호출
- 운영체제는 App SW가 자원에 접근하려 할 때, 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다.
- 운영체제에 도움을 요청 === 운영체제 코드를 실행
- App SW의 요청을 받은 운영체제는 App SW 대신 자원에 접근하여 요청한 작업을 수행
이러한 운영체제의 문지기 역할은 이중 모드(dual mode) 로 구현된다.
이중 모드: CPU가 명령어를 실행하는 모드를 크게 사용자 모드, 커널 모드로 구분하는 방식
사용자 모드(user mode): 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 모드
- App SW는 기본적으로 사용자 모드로 실행된다.
- 사용자 모드로 실행되는 일반적인 App SW는 자원에 접근할 수 없다.
커널 모드(kernel mode): 운영체제 서비스를 제공받을 수 있는 실행 모드
- 커널 영역의 코드를 실행할 수 있는 모드
- CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 비롯한 모든 명령어를 실행할 수 있다.
- 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다.
- 이때, 운영체제 서비스를 제공 받기 위한 요청을 시스템 호출, 콜(System Call) 이라 한다.
시스템 콜은 소프트웨어적인 인터럽트이다.
- 인터럽트는 입출력 장치(하드웨어) 에 의해 발생하기도 하지만
- 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 한다. 이를 소프트웨어 인터럽트 라 한다.
CPU가 시스템 호출을 처리하는 순서는 인터럽트 처리 순서와 유사하다.
- 시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업하고,
- 커널 영역 내에 시스템 호출을 수행하는 코드 (인터럽트 서비스 루틴) 를 실행한 뒤
- 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.
- App SW는 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용합니다.
- 빈번하게 시스템 콜을 발생시키고 사용자 모드와 커널 모드를 오가며 실행된다.
9.2.3 운영체제의 핵심 서비스
9.2.3.1 프로세스 관리
- 실행 중인 프로그램을 프로세스라 한다.
- 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다.
- CPU는 이 프로세스를 조금씩 번갈아 가며 실행
- 다시 말해 CPU는 한 프로세스를 실행하다가 다른 프로세스로 실행을 전환하고
- 그 프로세스를 실행하다가 또 다른 프로세스로 실행을 전환하는 것을 반복합니다.
- 이때 각 프로세스는 상태, 사용하고자 하는 자원도 다양하다.
- 운영체제는 다양한 프로세스를 일목요연하게 관리 및 실행할 수 있어야 한다.
- 추가로, 여러 프로세스가 동시에 실행되는 환경에서는 프로세스 동기화가 필수적
- 프로세스의 교착 상태를 해결해야 함
9.2.3.2 자원 접근 및 할당
모든 프로세스는 실행을 위해 자원(시스템 자원) 을 필요로 한다.
CPU 자원
- 일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한 번에 하나의 프로세스만 실행
- 그래서 하나의 프로세스가 CPU를 이용하고 있다면 다른 프로세스는 기다림
- 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야 한다.
- 이를 CPU 스케줄링이라 한다.
메모리 자원
- 메모리에 적재된 프로세스들은 크기, 주소 모두 가지각색
- 같은 프로세스라 할지라도 실행될 때마다 적재되는 주소가 달라짐
- 따라서, 프로세스가 적재될 때 마다, 어느 주소에 적재해야 할지를 결정해야 한다.
- 때로는 메모리가 이미 꽉 차 있어 꼭 실행해야 할 프로세스를 적재할 공간이 없는 경우도 있고,
- 메모리에 공간이 남았는 데도 불구하고 프로세스를 적재하지 못하는 상황도 발생
- 메모리에 적재된 프로세스들은 크기, 주소 모두 가지각색
입출력 장치 자원
- 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있다.
- 입출력 장치가 발생하는 하드웨어 인터럽트 도 마찬가지
- 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행
9.2.3.3 파일 시스템 관리
컴퓨터를 사용할 때는 여러 파일을 열고, 생성하고, 삭제한다
- 그리고 이 파일들을 한데 묶어 디렉터리(폴더)로 관리한다.
당연해 보이는 이런 파일 시스템(file system) 도 운영체제가 지원하는 핵심 서비스 이다.
9.3 가상 머신과 이중 모드의 발전
가상 머신이란 이름 그대로 소프트웨어적으로 만들어낸 가상 컴퓨터이다.
- 가상 머신을 통한 가상화를 지원하는 현대 CPU는 커널, 유저 모드 이상을 지원한다.
컴퓨터에 설치된 운영체제에서 가상 머신을 실행한다면, 그 가상 머신 또한 응용 프로그램이다.
그래서 사용자 모드로 작동한다. 마찬가지로 가상 머신상에 설치된 운영체제 또한 사용자 모드로 작동한다.
가상 머신에 설치된 운영체제도 사용자 모드로 작동한다면, 운영체제 서비스를 제공 받기 어렵다.
그래서 가상화를 지원하는 CPU는 가상 머신을 위한 모드인 하이퍼 바이저 모드를 따로 둔다.
- 이로써 가상 머신 상에서 작동하는 App SW들은 하이퍼 바이저 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있습니다.
9.4 시스템 콜, 호출의 종류
- 개발자가 작성하는 프로그래밍 언어들은 내부적으로 위와 같은 시스템 콜을 통해 실행된다.
Reference
- 혼자 공부하는 컴퓨터구조+운영체제 (강민철, 한빛미디어) https://product.kyobobook.co.kr/detail/S000061584886