[OS] 운영체제란? 역할 및 구조 ( 커널, 시스템콜)
📝 운영체제란?
운영체제란 유저가 컴퓨터를 편하게 사용할 수 있게 모든 하드웨어 자원을 관리해주는 프로그램이다.
즉) 컴퓨터를 동작시키는 데 도움을 주는 소프트웨어이다. 모든 하드웨어 자원을 관리? 그 말은 다음과 같다.
하드웨어 자원에는 CPU, 메모리, I/O 디바이스 등이 있다. 묶어서 컴퓨터 자원(resource)이라고 한다.
유저들은 구글이나 카카오톡같은 프로그램을 사용하거나, 키보드를 입력하는 등의 작업을 할 때, 동작 원리가 어떻게 되는지 알지 못해도 프로그램이 알아서 연동되는 것처럼 이러한 것들을 OS가 다 관리해주는 것이다. OS는 중간자 역할을 한다고 말할 수 있다. 사용자 입장에서는 하드웨어의 이용과 성능을 편리하게 해주는 프로그램이고, 시스템 입장에서는 CPU, 메모리, I/O 디바이스 등의 자원을 총괄하는 프로그램인 것이다.
📝 운영체제 역할
운영체제의 역할은 크게 2가지로 나눌 수 있다. 사용자를 위한 역할, 하드웨어를 위한 역할이다.
1) 사용자를 위한 역할
: 운영체제는 사용자에게 컴퓨터 시스템을 편리하게 사용할 수 있는 인터페이스를 제공한다.
GUI와 CLI가 대표적인 예시이다.
2) 하드웨어를 위한 역할
: 운영체제의 가장 핵심적인 기능은 각종 하드웨어를 관리하는 일이다. 이에 운영체제를 resource manager라고 부르기도 한다. 즉) 운영체제는 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할을 한다.
🔖 프로세스 관리
: 컴퓨터를 사용할 때 브라우저를 쓰면서 노래를 듣고 게임까지 하는 경우를 생각해보자. 브라우저, 음악, 게임은 모두 프로세스에 해당된다. 컴퓨터의 CPU가 하나인 경우 CPU는 한 번에 한 프로세스만을 처리할 수 있는데도 불구하고 이를 동시에 하고 있다고 느낄 수 있는 이유는 운영체제에서 적절한 방식으로 포로세스들을 관리해주기 때문이다. 이와 관련된 내용으로는 시분할 방식, CPU 스케쥴링과 같은 개념이 있다.
🔖 메모리 관리
: 메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치이다. 모든 프로그램은 메모리에 올라와서 실행된다. 오늘날에는 여러 프로그램을 동시에 실행시키기 때문에 메모리를 관리하지 않으면 프로그램끼리 메모리 침범 이슈와 같은 문제들이 생기게 된다. 따라서 이러한 문제 해결을 위해 운영체제에서 메모리를 관리해준다. 또한 한정된 메모리 공간을 가지고 어떤 프로그램에 얼마만큼 메모리 할당해줄 것인지 역시 관리한다. 물리적 메모리 관리 방식으로는 고정 분할 방식, 가변 분할 방식, 가상 메모리 방식 등이 있다.
🔖 하드웨어 관리
: 운영체제는 사용자의 하드웨어에 대한 직접 접근을 막는다. 예를 들어 사용자가 하드디스크의 특정 영역에 데이터를 직접 저장하려는 경우 중요한 데이터를 덮어써버릴 위험이 있다. 또한, 누군가 악의적인 공격으로 컴퓨터 시스템에 문제를 일으킬 수 있다. 따라서 운영체제는 하드웨어 관리를 직접 하여 사용자의 실수를 방지하고 고의적인 공격에 대한 방어를 한다.
📝 운영체제의 구조
운영체제처럼 큰 규모의 프로그램이 메모리에 모두 올라간다면 한정된 메모리 공간의 낭비가 심하게 된다. 따라서 항상 필요한 부분만을 컴퓨터 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때만 메모리에 올리게 된다. 이에 메모리에 항상 상주하는 운영체제의 부분을 커널이라고 한다. 커널은 운영체제 코드 중에서도 가장 핵심적인 부분이고 커널 자체를 좁은 의미에서 운영체제라고 부르기도 한다. 반면 커널 뿐 아니라 각종 주변 시스템 유틸리티(파일 복사 기능 등)을 포함한 개념이 커다란 의미에서의 운영체제이다.
1) 인터페이스(Interface)
: 사용자는 커널에 직접 접근할 수 없기 때문에 운영체제가 제공하는 인터페이스를 사용해 커널에 명령을 내려야한다. 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 인터페이스를 통해 실행결과를 전달받는다. 대표적인 인터페이스가 GUI, CLI가 있다.
2) 커널(Kernel)
: 커널의 경우 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 한다. 커널에는 시스템 호출(System Call)과 드라이버라는 것이 있다.
3) 시스템 호출(System Call)
: 시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스이다. 애플리케이션이 직접 하드웨어 자원에 접근하거나 수정하려 할 때 실수를 할 수 있다. 이러한 사태를 막기 위해 커널은 시스템콜이라는 자원 사용과 관련된 함수를 제공한다. write(), read(), printf()같은 것들이 그 예이다. 애플리케이션이 하드웨어에 접근해야하거나 운영체제가 제공하는 서비스를 이용하기 위해서는 커널 함수를 호출하는 시스템 콜을 사용해야한다. 또한 시스템콜을 제공함으로써 운영체제는 컴퓨터 자원을 보호한다.
4) 드라이버(Driver)
: 드라이버는 프린터, 키보드 및 디스크 드라이브와 같은 하드웨어 장치와 운영체제 간의 통신을 가능하게 하는 소프트웨어이다. 프린터라고 하는 기계는 컴퓨터가 일반적으로 이해하는 구조랑 다르게 생겼다. 따라서 특수한 목적을 가지고 있는 하드웨어이기 때문에 드라이버를 설치함으로써 디바이스와 소통을할 수 있게 만들어주는 것이다.
[출처]