ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linux란
    카테고리 없음 2021. 6. 10. 16:29

     Linux는 오픈소스로 제작되고 있는 UNIX기반의 운영체제이다. 앞의 정의와 같이 말한다면 사람들은 저마다 떠올리는 그림이 다를 것이다. Linux라고 하면 예전 같은 경우에는 Bash를 이용해서 검은색 바탕화면에 커맨드 입력을 통해 컴퓨터를 사용하는 환경을 생각하는 사람도 있을 것이고, 컴퓨터 전공 시간에 더 배워본 사람들은 우분투 정도로 생각하는 사람도 있을 것이다. 정의부터 하자면 리눅스 커널을 기반으로 하는 운영체제의 그룹을 의미한다.
     운영체제라고 하면 단순히 CPU, 메모리, 스토리지 등 여러 하드웨어 리소스들을 제어할 수 있는 커널만 의미하는 것이 아니라, 사용자들이 커널을 잘 사용할 수 있게 제공되는 여러 시스템 소프트웨어들 및 어플리케이션들을 다 모아둔 것을 의미한다. 예를 들어 Windows 운영체제를 생각해보자. Windows 설치 시에 단순히 하드웨어를 건드리는 커널 영역만 있는 것이 아니라, 로그인 화면, 바탕화면, 사용자 설정 그리고 더 나아가 계산기 같은 기본 어플리케이션들이 다 포함되어있을 것이다. 운영체제란 결국 이런 모든 일련의 시스템들을 포함하는 것이며, 유저가 하드웨어의 자원들을 활용할 수 있도록 하기 위한 거대한 시스템 소프트웨어다.
     
     A. Kernel
      그럼 일반적으로 우리가 OS를 생각할때 바로 떠올리는 커널이라는 존재가 있는데, 이 커널은 오에스에서 어떤 역할을 하는지 알아보자. 커널은 OS 안에 속해있는 하나의 시스템 프로그램이고, 컴퓨터의 여러 자원들 (disk, memory, process, task 등)을 관리해주고 어플리케이션에서 하드웨어로 접근하는 인터페이스를 제공해준다. 예를 들어서, 어떤 어플리케이션을 짜고 있는데, 프로세스 정보와 관련된 작업을 수행해야 한다고 가정하자. 그 경우에 시스템 콜이라는 활용 해서 프로세스 관리를 진행할 텐데, 이런 시스템 콜들이 커널에서 제공하고 있는 인터페이스이다. 시스템 콜을 하는 경우에 하드웨어에서는 전달받은 작업을 수행한 후에 결과를 반환해준다.
      근본적으로 그럼 OS랑 차이가 뭐인지 정의해보자면, OS는 사용자와 하드웨어 사이의 인터페이스를 제공하는 것이고 Kernel은 어플리케이션과 하드웨어 사이의 인터페이스를 제공한다고 하면 된다. 컴퓨터와 사용자 사이의 일련의 계층구조를 생각해보면 사용자 - 어플리케이션 - 커널 - 하드웨어 추상화 계층 - 하드웨어로 요약해볼 수 있는데, 오에스는 어플리케이션 - 커널을 합쳐둔 것으로 볼 수 있다.
      
     B.Desktop Environment 
      Desktop Environment는 어플리케이션 레이어에 존재하면서, 사용자들이 시스템 자원들을 활용하기 위한 전반적인 환경을 의미한다. 시스템 데몬들, 파일 매니저 그리고 쉘 등이 여기에 포함되어 있으며 이 영역을 OS 영역으로 생각하지 않는 경우도 있는 것 같다. Desktop Environment의 요소들은 다 각각이 별도의 프로세스로 존재하고 있기 때문에 Kernel보다는 상위 계층에 존재한다고 볼 수 있다. 여러 프로세스를 실행해주고 관리해주는 Systemd, File관련된 정보들을 보여주는 파일 매니저들이 대표적이다.
      
     C. Shell
      Shell은 Desktop Environment에 포함되는 프로세스이지만 사용자와 더 밀접하게 연관되어 있기 때문에 따로 설명하도록 하겠다. Shell은 사용자와 시스템 자원들을 쉽게 사용할 수 있도록 인터페이스를 제공하는 중간 껍데기 층을 의미한다. 대부분의 사람들은 Shell이라고 하면 Bash를 생각하기 때문에 CLI(Command Line Interface) 쉘을 생각해서 명령어를 검은화면에 치는 것을 생각한다. 근데 이런 것뿐만 아니라 사용자에게 보이는 것들은 모두 다 Shell을 통해서 보인다고 말할 수 있다. 대표적으로 Windows나 Ubuntu에서는 GUI Shell을 활용하는데, 바탕화면에서 여러 앱들에 대한 정보를 보여주고 GUI적인 행동을 통해서 시스템 자원들에 접근하는 것을 확인할 수 있다. 결국에는 파일들을 보여주는 것, 혹은 네트워크 연결상태나 시간 정보들을 보여주는 것도 시스템 자원에 접근하는 것이기 때문에 쉘의 일종이라고 할 수 있다.
      
     D. Linux 기반 운영체제
      앞서 설명한 내용들이 OS에 포함된 요소들이다. 그럼 흔히들 말하는 리눅스 배포판, 리눅스 계열은 어떤걸 의미하는 것이냐면 Kernel을 Linux Kernel을 활용하고 그 위에 Desktop Environment를 자기 자신의 철학에 맞게 세팅하고 그것들을 패키징 해서 배포하는 것을 의미한다. 예를 들어서 Ubuntu나 Mint를 생각해보면 Kernel은 Linux base로 하지만 그 위에 Desktop Environment를 다르게 가져가는 것이다. (Ubuntu는 Kernel을 자체적으로 수정하긴 함) 대표적으로 두 배포판에서 Shell이 다른데, Ubuntu에서는 사용자에게 더 커스터마이징을 할 수 있도록 오픈된 버전을 제공하고 Mint는 Ubuntu에 비해 제약사항이 조금 있다. 결국에는 배포판 제작사의 철학에 맞게 잘 패키징 해서 내놓는 거고 그렇기 때문에 수많은 리눅스 계열의 오에스가 탄생할 수밖에 없는 것이다. 독특하게는 Windows 환경을 최대한 비슷하게 흉내 내서 배포하는 경우도 있다.
      
     E. 요약
      운영체제란 사용자가 하드웨어 자원들을 활용할 수 있도록 제공하는 거대한 시스템 소프트웨어이고 Linux는 그 운영체제 중에 한 종류이다. 운영체제에는 하드웨어 접근을 도와주는 Kernel과 사용자들이 쉽게 시스템 자원들을 활용할 수 있도록 하기 위한 Desktop Environment가 있다. Linux 기반(계열) 운영체제는 Kernel은 Linux Kernel기반으로 가지만 그 위에 올라가는 Desktop Environment를 다르게 구성하는 운영체제들을 의미한다.

Designed by Tistory.