실습과 그림으로 배우는 리눅스 구조 — 이정현

Jeong Hyeon Lee
Quantum Ant
Published in
6 min readSep 2, 2019

--

본 포스팅은 《실습과 그림으로 배우는 리눅스 구조》를 참고해 공부한 후 정리하였습니다.

컴퓨터공학도로써 근본적인 공부를 위한 OS와 하드웨어 기초 공부를 하고자 해당 책을 선정했다.

0. 들어가기 전에

컴퓨터 시스템은 계층화, 세분화가 잘 되어 있어 개발자들이 OS나 하드웨어를 일일이 고려하며 프로그래밍할 번거로움이 줄었다.

컴퓨터 시스템의 계층을 구성하는 5가지는 다음과 같다.

  • 사용자 프로그램
  • OS외의 라이브러리
  • OS 라이브러리
  • 커널
  • 하드웨어

계층이라고 하니 안정감 있게 쌓여있는 모습을 연상할 법 하지만, 해당 계층은 실제로는 복잡하게 섞여 있어 일부만 알아서는 해결할 수 없는 문제가 있다.

이 책으로 공부하며 모든 계층에 대한 이해를 통해 OS나 하드웨어에 대한 이해도를 높임으로써 기대되는 일은 다음과 같다.

  • 하드웨어 특성을 고려한 소프트웨어 개발이 가능하다
  • 시스템 설계 시 기준으로 삼을 지표 파악이 가능하다
  • OS나 하드웨어 관련 오류 대처가 가능하다

이번 장에서는 개요를 다루기 때문에 실습을 진행하지는 않지만, 이후에 소개될 내용을 실험하기 위해 필수적으로 필요한 패키지는 3가지가 있다.

  • binutils
  • build-essenti
  • sysstat

다음 명령으로 install 할 수 있으며 이 이상의 내용은 다루지 않는다.

$sudo apt install binutils build-essential sysstat

1. 컴퓨터 시스템의 개요

컴퓨터 시스템의 하드웨어 구성

오늘날 다양한 종류의 컴퓨터 시스템이 있고 그만큼 하드웨어의 구성에도 많은 차이점이 있지만 일반적인 구조는 다음과 같다.

컴퓨터 시스템이 동작할 때 하드웨어에서는 다음 순서가 반복된다.

프로그램

위처럼 사용자에게 필요한 하나의 처리로 정리한 것을 프로그램이라 한다.

프로그램의 종류는 다음처럼 나눌 수 있다.

이러한 프로그램은 아래의 그림처럼 서로 연동되어 동작한다.

일반적으로 OS는 여러 가지 프로그램을 프로세스 단위로 실행한다. 아래의 그림과 같이 각 프로그램은 1개 혹은 여러 개의 프로세스로 구성되며 대부분의 OS는 여러 개의 프로세스 동시 실행이 가능하다.

리눅스

이제 리눅스 그리고 리눅스와 하드웨어의 관계에 대해 설명할텐데, 저자는 간단한 설명을 위해 리눅스와 OS를 크게 구별 짓지 않는다.

리눅스의 중요한 역할은 디바이스를 조작하는 일이다. OS가 없으면 여러 개의 프로세스가 각각 디바이스를 조작하는 코드를 작성해야 한다.

물론 그렇게 해도 동작은 하지만 단점이 몇 가지 있다.

  • 모든 애플리케이션 개발자가 디바이스의 스펙을 상세히 알아야만 디바이스를 조작 가능하다.
  • 개별 개발에 따라 개발 비용이 증가한다.
  • 멀티 프로세스가 동시에 디바이스를 조작할 경우 예상 외의 동작이 발생 가능하다.

그래서 리눅스는 디바이스 드라이버라고 하는 프로그램을 통해 디바이스를 다루며 이 때문에 디바이스 드라이버를 통해서만 프로세스가 디바이스를 조작할 수 있다.

세상에는 많은 종류의 디바이스가 있지만, 리눅스는 디바이스의 종류가 동일하면 같은 인터페이스로 조작하도록 되어 있다.

프로그래머의 버그나 해킹 목적으로 의도된 특정 프로세스가 디바이스 드라이버를 통해 디바이스에 접근한다는 룰을 어기면 멀티 프로세스가 동시에 디바이스를 조작하려고 시도하는 상황이 발생한다. CPU에는 커널 모드사용자 모드라고 하는 두 가지 모드가 있는데, 커널 모드로 동작할 때만 디바이스에 접근이 가능하다. 리눅스는 이 기능을 이용해 프로세스가 직접 하드웨어에 접근하는 것을 차단한다. 디바이스 드라이버는 커널 모드로 동작하고 프로세스는 사용자 모드로 동작한다.

디바이스 조작 뿐만 아니라 일반적인 프로세스로 실행하면 문제가 되는 처리가 몇 가지 더 있다.

  • 프로세스 관리 시스템
  • 프로세스 스케줄링
  • 메모리 관리 시스템

이러한 처리도 마찬가지로 커널 모드에서 동작한다. 이렇게 커널 모드에서 동작하는 OS의 핵심 부분이 되는 처리를 모아 담당하는 프로그램을 커널이라고 한다. 커널은 시스템에 탑재된 CPU나 메모리 등의 리소스를 관리하고 있으며 리소스의 일부를 시스템에 존재하는 각 프로세스에 적절히 분배한다. 프로세스가 디바이스 드라이버를 포함한 커널이 제공하는 기능을 사용하려 할 때는 시스템 콜이라고 하는 특수한 처리를 통해 커널에 요청한다. 또한 OS는 커널만을 지칭하지 않으며 사용자 모드에서 동작하는 다양한 프로그램으로 구성되어 있다. 리눅스의 사용자 모드에서 동작하는 OS 기능 및 프로세스 그리고 커널과의 인터페이스가 되는 시스템 콜에 대해서는 다음 장에서 자세히 다룰 예정이다.

마치며

지난 번에 공부했던 책처럼 그림(도식)을 같이 실어두어 처음 공부하기에 직관적인 도움을 받을 수 있을 것 같아 해당 책으로 공부를 시작했다. 다소 막막하긴 하지만 실습과 시각 자료가 필자가 공부하면서 느낀 흥미를 끌고 이해하는데 도움을 주는 대표적인 요소라고 생각하기에 기대가 된다. 이제 개강해서 계속 포스팅을 이어나갈 수 있을 지 모르겠지만 열심히 해 볼 예정이다.

--

--

Jeong Hyeon Lee
Quantum Ant

I'm interested in solving everyday inconveniences or creating services that users feel comfortable with.