운영체제란?
- 운영체제(Operating System)이란 실행할 프로그램에 필요한 시스템 자원(CPU, 메모리, 입출력 장치 등)을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램.
- 운영체제 또한 어쨌든 프로그램이기 때문에 메모리에 적재되어야 함
- 다만, 매우 특별한 프로그램이기 때문에 메모리 내 커널 영역(Kernel Space)라는 공간에 따로 적재 후 실행
- 커널 영역 외 나머지 공간은 사용자 영역(User Space)라고 하며 일반적인 응용 프로그램들이 적재됨
- 일반 응용 프로그램들이 실행될 때 어떤 자원을 얼마나 할당할지(ex. CPU 자원 할당), 메모리에 적재, 삭제하는 행위 모두 운영체제가 수행
운영체제의 심장, 커널
커널이란 운영체제의 가장 핵심적인 서비스를 담당하는 부분임. 책에서도 운영체제를 지칭할 때는 보통 커널을 지칭할정도로 매우 핵심적.
이중 모드와 시스템 호출
운영체제는 시스템 자원과 응용 프로그램 사이에서 일종의 중개자 혹은 문지기 역할을 수행. 즉, 오직 운영체제를 통해야지만 응용 프로그램이 자원에 접근할 수 있도록 제한. 예를 들어 응용 프로그램이 하드웨어를 사용해야 하는 상황이라면 응용 프로그램이 운영체제에 하드디스크 접근을 요청하고, 운영체제에서 하드디스크에 대한 코드가 실행되는 프로세스.
이런 중개자 혹은 문지기 역할을 이중 모드(Dual Mode)로써 구현
- 이중 모드: CPU가 명령어를 실행하는 모드를 두 가지로 구분하는 것
- 사용자 모드(User mode): 커널 영역의 코드를 실행할 수 없는 모드
- 기본적으로 응용 프로그램은 사용자 모드로 실행됨. 따라서, 응용 프로그램은 보통 시스템 자원에 접근 불가능
- 커널 모드(Kernel mode): 커널 영역의 코드를 실행할 수 있는 모드
- CPU가 커널 모드로 명령어를 실행하면 시스템 자원에 접근 가능
- 운영체제는 커널 모드로 실행됨
- CPU가 어떤 모드로 실행되는지는 플래그 레지스터 속 슈퍼바이저 플래그를 보면 알 수 있음
- 사용자 모드(User mode): 커널 영역의 코드를 실행할 수 없는 모드
즉, 응용 프로그램이 자원에 접근하기 위해서는 운영체제에 요청을 보내 커널 모드로 전환되어야 하는 것.
CPU가 사용자 모드에서 커널 모드로 전환되도록 요청하는 것을 시스템 호출(System Call)이라고 부름
시스템콜은 일종의 인터럽트이기 때문에 CPU가 시스템콜을 처리하는 순서는 인터럽트 처리 순서와 유사함. (CPU가 지금까지 작업을 백업 -> 커널 영역 내에 시스템콜을 수행하는 코드 실행 -> 다시 기존 응용 프로그램 실행)
운영체제의 핵심 서비스
- 프로세스 관리
- CPU는 한 번에 하나의 프로세스만 실행할 수 있음. 여러 개의 프로세스의 실행을 잘 관리해주는 서비스 제공
- 자원 접근 및 할당
- 프로세스들이 필요한 자원에 접근하고 조작하여 각 프로세스들에 할당해줌
- CPU
- 메모리
- 입출력장치
- 프로세스들이 필요한 자원에 접근하고 조작하여 각 프로세스들에 할당해줌
- 파일 시스템 관리
- 보조기억장치 속에 데이터를 파일과 디렉토리로 관리할 수 있도록 도움
+ 가상 머신과 이중 모드의 발전
VirtualBox, VMWare 등의 가상 머신 위에 OS를 깔아쓰는 등의 작업을 많이 했을 것이다. 그런데 생각해보면 이들 자체는 응용 프로그램(=사용자 모드)이지만 그 위에 올라가는 운영체제는 커널 모드일텐데..? 모순인 것처럼 느껴진다.
가상화를 지원하는 CPU의 경우 커널 모드와 사용자 모드 외에 하이퍼바이즈 모드를 따로 지원. 가상 머신 위에서 돌아가는 응용 프로그램들은 이 하이퍼바이저 모드로써 가상 머신에 깔린 OS의 서비스를 이용 가능하게 된다. 하이퍼바이저에 대한 구체적인 설명은 여기
그리고 가상머신과 컨테이너의 차이에 대해서는 아래 링크에서
https://born-dev.tistory.com/39
'CS' 카테고리의 다른 글
[혼공컴운] 명령어 사이클과 인터럽트 (0) | 2023.03.31 |
---|---|
[혼공컴운] 프로세스 개요 (0) | 2023.03.30 |
[혼공컴운] 레지스터 (0) | 2023.03.28 |
[혼공컴운] ALU와 제어장치 (0) | 2023.03.15 |
[혼공컴운] 명령어의 구조 (0) | 2023.03.14 |