안녕하세요. dev_writer입니다.
이번에 좋은 기회로 JSCODE에서 운영하는 운영체제 스터디에 참가하게 되었는데요, 스터디를 하며 과제로 배운 점을 미리 블로그에 기록하는 것이 있어 CS 글도 정리할 겸 글을 작성해보고자 합니다.
중요하지만 상대적으로 덜 준비했던 CS를 다져보는 좋은 기회라고 생각해서, 앞으로 5주 간 꾸준히 작성해 보겠습니다.
🤖 운영체제란 무엇인가?
먼저, 운영체제의 정의를 위키백과에서 살펴보겠습니다.
운영체제(運營 體制, 문화어: 조작 체계) 또는 오퍼레이팅 시스템(operating system, 약칭: OS)은 사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어이다. 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공한다. 최근에는 가상화 기술의 발전에 힘입어 실제 하드웨어가 아닌 하이퍼바이저(가상 머신) 위에서 실행되기도 한다. - 위키백과
🎯 운영체제의 목적은 무엇인가?
운영체제의 목적 또한 위키백과에서 보실 수 있습니다.
- 사용자에게 컴퓨터의 프로그램을 쉽고 효율적으로 실행할 수 있는 환경을 제공한다.
- 컴퓨터 시스템 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적 할당, 관리, 보호하는 것
- 운영체제는 제어 프로그램으로서 사용자 프로그램의 오류나 잘못된 자원 사용을 감시하는 것과 입출력 장치 등의 자원에 대한 연산과 제어를 관리한다.
요약하자면, 운영체제는 하드웨어를 제어하고 프로그램을 실행할 수 있는 환경을 제공합니다.
하드웨어를 제어해야 하는 이유는?
하드웨어는 컴퓨터를 이루는 실제 물리적 부품을 뜻합니다. 컴퓨터 견적을 내거나, AWS 등 클라우드에서 사용할 서버 컴퓨터를 맞출 때 아래와 같이 메모리는 어느 정도로 할지, 용량은 어느 정도로 할지 등에 대한 고민을 하신 적이 있으실 겁니다.
이렇게 견적을 낸다는 것은, 컴퓨터가 가질 수 있는 각 하드웨어의 성능이 환경에 따라 제한된다는 것을 뜻합니다. 그리고 컴퓨터에서는 이들이 모두 자원에 해당됩니다.
그러므로 저희는 한정된 돈으로 예산을 짜듯이, 컴퓨터를 운영할 때에는 한정된 자원으로 최대한의 성능을 낼 수 있도록 고민해야 합니다. 그리고 그러한 역할을 바로 운영체제가 전담합니다.
프로그램을 실행할 수 있는 환경을 제공해야 하는 이유는?
컴퓨터와 프로그램은 서로 뗄 수 없는 관계입니다. 프로그램이란 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체이며, 이것이 바로 컴퓨터가 존재하는 이유이기 때문입니다.
컴퓨터(영어: computer, 문화어: 콤퓨터, 콤퓨타, 순화어: 전산기(電算機), 셈틀)는 방대한 정보(데이터)를 저장하고 검색하고 처리하며, 프로그래밍이 가능한 전자적 기계 장치 또는 자동으로 계산(연산)을 수행하고 다른 기계장치(machines)들을 제어하는 전자 기기다. 프로그램을 사용해 정보를 입 · 출력하고 계산(산술 또는 논리셈)을 자동으로 수행한다. 텍스트, 그래픽, 심벌(특수 문자나 부호), 사운드 등을 처리하도록 프로그래밍하는 범용장치(programmable machine)다. - 위키백과
이는 첫 번째 이유인, <하드웨어를 제어해야 하는 이유>와 관계있습니다. 프로그램이 실행되기 위해서는 컴퓨터 자원을 사용할 수 있어야 하기 때문입니다.
예시로 운영체제가 하드웨어를 제어하지 못한다면, 프로그램을 실행할 수 있는 환경 또한 마련될 수 없을 것입니다. 따라서 운영체제는 프로그램이 실행될 수 있도록 CPU를 쓸 수 있는 시간을 결정시켜 주거나 (+ CPU, 메모리 할당..), 프로그램이 실행될 때 적재될 메모리 주소 등을 지정해 줍니다.
👨⚖️ 운영체제는 나라의 정부와 같다.
정리하자면 운영체제는 나라의 정부와 같다고 할 수 있습니다. 국민들이 나라의 자원을 이용할 수 있도록 정부가 적절히 관리해 주는 것처럼, 프로그램들이 컴퓨터의 자원을 이용할 수 있도록 자원을 관리해 줍니다. 그렇기에 운영체제는 프로그램과 하드웨어 간의 매개체라고도 합니다.
📌 운영체제 내부 요소
이제 운영체제의 내부 요소 중 중요한 것에 대해 알아보겠습니다.
커널
커널 (kernel)이란, 운영체제의 핵심 서비스를 담당하는 부분을 뜻합니다.
- 컴퓨터 하드웨어와 프로세스의 보안을 책임집니다.
- 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 합니다.
- 운영체제의 복잡한 내부를 감추는 인터페이스를 가지고 있습니다.
그 외적으로 운영체제에는 속하는데 커널에는 속하지 않는 기능으로는 유저 인터페이스 (UI)가 있습니다. 이는 사용자-컴퓨터 간의 통로이며, 운영체제의 핵심 기능이라고 하기에는 어렵습니다.
이중 모드와 시스템 콜
운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호합니다.
이는 응용 프로그램의 실수로 컴퓨터 전체에 악영향을 끼치는 것을 방지하기 위함입니다.
그리고 이것을 위해 이중 모드가 구현되어 있습니다.
이중 모드
이중 모드는 CPU가 명령어를 크게 사용자 모드와 커널 모드로 구분하는 방식입니다. 이는 레지스터의 슈퍼바이저 플래그로 판단할 수 있습니다.
- 사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행 모드입니다.
- 커널 영역의 코드를 실행할 수 없는 실행 모드입니다.
- 자원 접근에 불가능합니다. 덕분에 실수로라도 자원에 접근할 수 없습니다.
- 커널 모드
- 운영체제의 서비스를 제공받을 수 있는 실행 모드입니다.
- 자원 접근을 비롯한, 모든 명령어를 실행할 수 있습니다.
즉, 이중 모드는 자원 접근 가능 여부에 따라 모드를 아예 나눠둔 것입니다.
시스템 콜
시스템 콜은 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법입니다.
운영체제도 결국 프로그램을 위한 "프로그램"이고, 프로그램이 실행되기 위해서는 컴퓨터의 메모리에 적재되어 있어야 합니다.
그런데 이때, 운영체제는 사용되는 응용 프로그램들과 별도의 공간에 적재되는데, 이를 커널 영역이라 합니다.
응용 프로그램 영역에 있는 응용 프로그램이 실행되기 위해서는 자원을 써야 하므로, 자원을 쓸 수 있는 커널 영역에 요청하게 되는데 이 과정이 바로 시스템 콜에 해당되는 것입니다.
- 사용자 모드에 있던 프로그램이 커널 영역에 시스템 콜을 합니다.
- 커널 모드로 전환되고, 운영체제 코드를 실행합니다.
- 시스템 콜이 종료되고 다시 사용자 모드로 복귀됩니다.
지금까지 운영체제의 기본 개념을 정리해 봤습니다. 다음 글에서는 운영체제 공부 시 도움이 되는 컴퓨터 구조에 대해 간략히 정리해 보겠습니다.
Reference
'JSCODE CS > 운영체제 스터디' 카테고리의 다른 글
[JSCODE 운영체제 5주차] 가상 메모리 (1) | 2024.11.28 |
---|---|
[JSCODE 운영체제 4주차] 프로세스 동기화 (0) | 2024.11.21 |
[JSCODE 운영체제 3주차] CPU 스케줄링 (1) | 2024.11.14 |
[JSCODE 운영체제 2주차] 프로세스와 스레드 (0) | 2024.11.07 |
[JSCODE 운영체제 1주차] 2. 컴퓨터 구조 기본 개념 (1) | 2024.11.01 |