들어가며
본 포스팅에서는 운영체제의 개념과 필요성, 운영체제의 기능, Kernel에 대해 소개합니다.
📌 운영체제(OS)
운영체제란 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서, 사용자가 하드웨어를 쉽고 효율적으로 사용할 수 있는 프로그램의 모임이자, 시스템 소프트웨어이다. 추상화(abstraction)을 제공하는 프로그램이라고도 정리해볼 수 있다.
어떻게 하드웨어를 쉽고 효율적으로 사용할 수 있도록 하는가에 대해 이야기 해보자면, 추상화라는 개념을 알아야 한다.
❔ 추상화
추상화(Abstraction)란, 복잡한 시스템 및 개념을 단순화하는 것이다. 소프트웨어를 설계할 때에도 추상화하여 미리 포괄적인 개념을 설계한 후에 구체화하여 진행한다. 따라서, 복잡한 시스템이더라도 사용자가 보다 쉽고 직관적인 방식으로 시스템과 상호 작용할 수 있도록 하며, 프로그램 관리 및 재사용에 용이하다.
즉, 세부 기능에 대해 알지 못하더라도 하드웨어와 쉽게 상호작용할 수 있도록 추상화를 제공하는 프로그램을 운영체제라 한다.
운영체제는 컴퓨터 시스템의 자원들을 관리 및 제어하는 소프트웨어 프로그램이다.
어떤 시스템은 고성능을 우선시하고, 또 다른 시스템은 신뢰성, 안정성, 저비용 등을 우선순위로 들 수 있다. 따라서 이처럼 각각 시스템이 고려하는 우선순위에 맞춰 운영체제는 자원을 관리하고 제어한다.
자원을 관리하는 정책에는 FIFO, LRU, RR, EDF 등이 존재하며, 우선순위에 알맞은 정책을 결정하여 사용하여야 한다.
예시로는 Windows, UNIX, LINUX, MacOS 등이 있다.
📌 추상화(Abstraction)
운영체제에서의 다양한 형태의 추상화의 예시를 함께 살펴보도록 하자면,
🔶 CPU - Process
❔ Program
프로그램(Program)이란, 특정 기능을 수행하기 위해 프로그래밍 언어로 작성된 명령의 모음이다.
디스크와 같은 저장소에 이진 형식으로 저장되어 있다가 프로세서에 의해 실행된다.
❔ Process
프로세스(Process)란, 실행 중인 프로그램의 추상화이다.
프로그램 실행에 필요한 Program Counter, Stack, Code and Data Segment가 포함되어 있다.
- Program Counter : 다음 명령어의 위치를 추적하는 역할
- Stack : 임시 데이터 저장소
- Code and Data Segment : 프로그램의 실행 코드, 변수
프로그램을 실행하면, 운영체제에서는 프로세스를 생성하여, 프로그램에 필요한 자원을 프로세스를 통해 관리하며 프로그램을 실행할 수 있도록 한다. CPU는 Process로 추상화되어 사용자가 프로그램을 쉽게 실행 및 관리할 수 있도록 한다.
🔶 Memory - Address Space
❔ Address Space
Address Space란, 프로세스가 사용할 수 있는 메모리 주소의 범위를 가리킨다.
메모리는 일시적으로 데이터가 저장되는 공간이다. Address Space는 프로세스가 사용할 수 있는 메모리 주소의 범위를 가리킨다. 각각의 프로세스마다 메모리의 추상화인 Address Space를 부여하여 서로의 메모리에 접근하지 못하도록 한다. (Protection Domain)
🔶 Disk - FIle
❔ File
File이란, 디스크의 추상화로 프로세스가 저장 장치로부터 데이터를 읽고 쓸 수 있는 저장소이다.
디스크는 데이터를 영구적으로 보관하는 저장 장치이다. 파일은 디스크의 추상화로, 사용자가 파일이 어떻게 디스크에 저장되는 지에 대해서는 알지 못하더라도 파일을 쉽게 관리할 수 있도록 한다.
- Uniform access : 저장 장치 또는 메모리에 저장된 데이터가 어느 위치에 저장되어 있는지 알지 못하더라도, 통일된 방식으로 접근이 가능하다.
- Data Portability : 따라서, 서로 다른 시스템, 프로세스 간에 데이터를 쉽게 공유하며 이동시킬 수 있다.
- Easy-to-use by name : 파일은 이름을 통해서 접근이 가능하므로, 저장 위치를 모르더라도 이름을 통해 접근하여 관리할 수 있다.
- Protection : 파일에 대해 권한을 할당하여 파일을 보호할 수 있다.
- I/O transparency(투명성) : 사용자는 파일에 대한 접근, 저장에 대한 세부적인 면을 알지 못해도, 즉 입력 및 출력 작업에 대해 알지 못해도 상호 작용이 가능하다.
🔶 Network - Port
❔ Port
Port란, 컴퓨터 시스템 간 통신을 위한 endpoint로, 네트워크를 통해 통신할 수 있도록 게이트와 같은 역할을 한다
네트워크는 연결 및 통신을 통해 자원을 공유하기 위한 것으로, 포트는 이런 네트워크의 추상화이다. 즉, 네트워크의 연결이 어떻게 이루어져 있는지에 대해 알지 못하더라도, 포트를 통해 쉽게 통신이 가능하다.
- Physical network complexity hiding : 물리적 네트워크 복잡성을 숨겨, 포트를 통해 쉽게 통신이 가능하다
- easy end - to - end communitcation : 종단간 통신이 쉬워진다.
📌 운영체제의 필요성
운영체제는 모든 컴퓨터 시스템의 자원을 관리하는 소프트웨어이므로, 하드웨어와 응용 소프트웨어 사이의 추상화를 제공하며, 상호 작용에 중요한 역할을 한다.
따라서, 프로그램을 실행하는 필요한 명령을 제공하는 역할을 가지고 있으며, 동시에 여러 프로그램을 실행 및 관리하는 멀티태스킹이 가능하다.
따라서, 사용자는 제공되는 추상화를 통해서 쉽고 직관적으로 컴퓨터를 사용할 수 있게 된다. 또한, 운영체제는 데이터를 안전하게 관리하며 보호해준다.
하드웨어와 소프트웨어 간의 상호작용 역할을 운영체제가 하기 때문에, 개발자의 경우에도 필요한 로직에만 집중할 수 있는 환경을 갖출 수 있게 된다.
- 하드웨어와 응용 소프트웨어 간의 상호 작용
- 프로그램 실행 및 멀티 태스킹
- 데이터 관리 및 보호
📌 운영체제의 기능
- 사용자와 시스템 간 편리한 인터페이스 제공
- 각종 하드웨어와 네트워크, 파일 관리
- 데이터 관리 및 공유 ( 사용자의 권한 검증으로 데이터 보호)
- 효율적인 자원 관리를 위한 스케줄링 기능
- 입력 / 출력 장치 관리
- 프로그램 실행 및 (오류에 의한) 중단 기능 + 다중 프로그램 실행
+)
운영체제가 자원을 관리하며 프로그램을 실행하므로, 운영체제가 동작하지 않는다면, 중단되거나 충돌이 발생할 수 있다.
컴퓨터 시스템 자원에 대해 접근 권한을 제어하고자, Kernel 모드와 User 모드로 접근 권한을 제공한다.
장치 드라이버(Device Driver)를 통해 특정 장치를 이용할 수 있도록 인터페이스, 구동 로직을 제공한다.
📌 Kernel
커널(Kernel)이란, 운영체제의 핵심으로, 대부분 운영체제의 기능이 실행되는 곳이다. 입출력을 관리하고, 컴퓨터 자원을 요청에 따라 할당하며, 하드웨어 인터페이스, 보안 등을 담당한다.