운영체제와 커널

2022. 5. 18. 23:45공부/CS 공부

 최근에 리눅스 환경에서 장치 파일이나 장치 드라이버를 손대면서 자연스럽게 커널의 존재에 대해 알게 되었다. 그런데 커널을 통해 이런 장치나 프로세스들을 관리한다면 운영체제랑 무슨 차이가 있지 하는 의문이 들었다.

 먼저 운영체제(OS)란 컴퓨터 시스템의 자원들을 효율적으로 관리하고, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공해주는 시스템이라고 할 수 있다. 혹은 H/W 와  S/W 를 연결해주는 중간다리라고도 생각할 수 있을 것 같다. 종류에 따라 win 처럼 Graphic 이 있는 OS도 있고 우분투처럼 cli 만 있는 OS도 존재한다. 이 외에도 cpu 스케쥴링, 주변 장치 관리, 메모리(자원 관리) 등 다양한 역할을 하고 있지만, 여기까지만 알아보도록 하고 그렇다면 대체 커널과의 차이점은 뭘까?

 커널이란 좁은 의미의 운영체제라고 한다고 한다. 이게 무슨 의미일까? 기본적으로 소프트웨어가 컴퓨터에서 수행되기 위해서는 메모리를 할당받아야 하고, 운영체제도 시스템이기에 실행되기 위해서는 메모리에 적재되어야 한다. 그런데 운영체제처럼 규모가 큰 프로그램이 전부 메모리에 적재되버린다면, 메모리 공간의 사용에 있어서 낭비가 발생할 것이다. 왜냐면 우리가 평소 OS를 사용한다고 해도 모든 기능을 계속 사용하고 있는 것은 아니기 때문이다. 그래서 운영체제에서 꼭 필요한 부분만을 전원이 켜짐과 동시에 메모리에 적재하고, 그렇지 않은 부분은 필요할때마다 가지고 와서 사용한다.  이 때 항상 메모리에 상주하는 운영체제의 핵심적인 부분을 커널이라고 한다. 

 그렇다면 운영체제의 핵심 부분 즉 커널은 어떤 역할을 하는 것일까. 찾아보니 컴퓨터 자원을 관리하는 것이 커널의 주 역할이라고 한다. 컴퓨터 자원에는 대표적으로 CPU, 메모리, 파일, 입출력 장치 등이 있다고 하며, 커널은 항상 이런 컴퓨터 자원만을 바라보고 있다고 한다. 그리고 우리가 이런 커널에 접근하기 위해서 운영체제 측에서 제공하는 API가 linux 기준으로는 system call(syscall)이라고 하고, win에서는 보통 win32 API 라고 부른다.

 오늘은 커널과 운영체제에 대해서 알아보았다. 이름만 다르지 커널과 운영체제는 세부적으로는 조금 다르지만 큰 의미에서는 같다고 생각해도 괜찮을 것 같다는 생각이 들었다.

'공부 > CS 공부' 카테고리의 다른 글

좋은 코드란?  (0) 2022.05.17
프로세스와 스레드의 차이  (0) 2022.04.18
프로그램 vs 프로세스 vs 프로세서  (0) 2022.04.16
Kernel, Shell, Interface 란?  (0) 2022.03.21