[ CS > 운영체제 ]
[운영체제] 운영체제와 커널
운영체제와 커널
컴퓨터의 응용 프로그램은 하드웨어에 접근할 수 있어야 한다. 그래야 하드디스크에 데이터를 저장하고 메모리에 프로세스를 올리고, CPU에서 그 메모리 정보를 가지고 데이터를 처리할 수 있다. 그리고 사용자는 GUI를 통해서 응용 프로그램을 실행할 수 있어야 한다. 그래야만 사용자와의 상호작용을 통해서 원하는 프로세스를 메모리에 올릴 수 있기 때문이다. 이러한 역할을 하는 것이 운영체제(OS)이다.
1. 운영체제와 커널
사용자 자원과 실행 단계를 계층적으로 커널 공간, 사용자 공간, 시스템 콜, 하드웨어로 나눌 수 있다. 사용자 공간은 시스템 콜 인터페이스를 통해 커널 영역에 접근할 수 있고, 커널 영역은 사용자 공간에서 사용한 시스템 콜 API에 따라 하드웨어를 조작하게 된다.

그런데 사용자 공간과 커널 공간이 나뉘어 있듯이, CPU도 사용자 모드와 커널 모드 2가지의 모드가 존재한다. 왜냐하면 사용자 모드에서 통제없이 하드웨어에 접근할 수 있으면 보안과 안정성에 문제가 생기며, 동일 자원에 여러 CPU가 접근할 때도 문제가 생길 수 있기 때문에 이를 특별히 관리할 필요가 있기 때문이다.아래 그림은 CPU가 이중 모드로 모드를 구분하여 명령어를 실행하는 그림이다.

응용 프로그램이 프리턴기를 쓰거나, 하드디스크에 입력하는 등의 커널 영역이 필요한 명령어를 사용하기 위해서 커널 모드에 진입하고, 다시 사용자 모드로 돌아온다.

1.1 운영체제
운영 체제는 컴퓨터 하드웨어와 응용 프로그램 사이에서 상호작용을 지원하고 관리하는 시스템 소프트웨어다. 운영체제는 하드웨어 자원(CPU, 메모리, 저장 장치 등)을 효율적으로 관리하고, 사용자가 컴퓨터를 편리하게 사용할 수 있도록 인터페이스(GUI 또는 CLI)를 제공한다. 즉, 컴퓨터의 작동을 제어하고 프로그램을 실행시키는 환경을 조성하는 핵심적인 역할을 수행한다.
그리고 프로그래머는 User Space(사용자 공간, 모드)에서 사용되는 프로세스를 제작할 때 시스템 콜 인터페이스를 통해서 운영체제의 api를 사용하여 프로그램을 개발한다.
1.2 커널
컴퓨터의 전원을 키면서 선택한 운영체제가 실행된다. 그래서 운영체제 자체는 소프트웨어로서 메모리에 로드되고, 메모리에 상주하는 운영체제를 커널이라고 한다. 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분이다. 이 커널 덕분에 GUI 화면이 출력되고, 컴퓨터 장치 및 리소스들이 관리되는 것이다.
2. 운영체제의 핵심 기능
운영 체제의 핵심 기능은 간단히 말하면 사용자와 상호 작용하기 위한 UI 제공을 하며, 하드디스크, 마우스, 메모리 등을 접근하고 제어할 수 있는 기능을 제공한다. 그리고 여러 프로세스를 효율적으로 실행하기 위해 자원의 할당을 관리한다.
2.1 UI 제공
운영체제는 컴퓨터와 상호작용할 수 있는 서비스로 GUI와 CLI를 지원한다. 우리가 마우스로 폴더를 클릭하여 열수 있는 이유는 운영체제가 GUI를 제공하고, cd(change directory)라는 command line으로 폴더 이동을 할 수 있는 이유는 운영체제가 CLI를 제공하여 상호작용할 수 있기 때문이다.
2.2 안전한 컴퓨터 자원 접근과 할당
사용자는 항상 시스템 콜을 통해서 커널영역의 함수로 하드웨어 영역에 접근한다. 직접 접근이 제한되기 때문에 잘못된 접근 방식으로 시스템을 먹통을 만들거나 하지 않는다. 대표적인 자원으로 CPU, 메모리, ROM, 마우스같은 입출력장치가 있다. CPU는 하나의 코어에서 하나의 프로세스만 실행할 수 있다. 그래서 여러 프로세스가 있을때 공정하게 CPU를 할당해야 하는데 이런 CPU 스케줄링 OS에서 해준다.
그리고 프로세스는 메모리에 할당이 된다. 어느 메모리 공간이 남아있는지, 어느 주소에 프로세스를 할당해야하는 지도 결정해주는 역할을 OS에서 한다.
마우스, 키보드 등은 인터럽트를 CPU에 전달하여 CPU가 잠시 처리하던 일을 백업하고 커널 영역에서 인터럽트 서비스 루틴을 실행하여 입출력장치의 신호를 처리한다. 이러한 작업을 수행하는 인터럽트 서비스 루틴을 제공하는 것이 OS이다.

2.3 프로세스 관리
1개의 CPU는 1개의 프로세스만 실행 가능하다. 그래서 여러 프로세스를 번갈아가며 실행한다. 프로세스마다 상태도 다르다, 어떤 프로세스는 현재 실행하기 어려울 수 있고, 어떤 프로세스는 빨리 실행해야할 수 있다. 운영 체제는 이러한 프로세스 실행을 관리한다.

2.4 파일 시스템
컴퓨터는 파일들을 하나의 디렉터리로 묶어 관리할 수 있다. 이런 기능은 운영체제에서 제공하는 핵심 기능이다.