목차 파트 1 - 리눅스 이해하기
1장 리눅스 소개
1.1 운영체제란
1.2 리눅스 배포판
1.3 리눅스의 쓰임과 학습 이유
운영체제란
운영체제(OS, Operating System)는 컴퓨터나 스마트폰 같은 시스템에서 하드웨어와 소프트웨어 자원을 관리하고 운영하는 시스템 소프트웨어이다. 하드웨어, 운영체제, 애플리케이션의 관계는 다음과 같다.
사용자 - 애플리케이션 - 운영체제 - 하드웨어
하드웨어 위에는 운영체제가 있고, 운영체제 위에는 애플리케이션이 있다. 마치 단단한 땅이 있어야 그 위에 집을 지을 수 있는 것처럼 잘 작동하는 하드웨어가 있어야 운영체제를 설치할 수 있다. 또 집이 있어야 살림살이를 채워 넣고 생활할 수 있는 것처럼 컴퓨터에 운영체제가 있어야 애플리케이션(프로그램)을 설치할 수 있다 정리하면 운영체제는 한 컴퓨터에서 여러 애플리케이션이 작동할 수 있게 하는 소프트웨어이다.
Note. 소프트웨어의 분류
소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 분류할 수 있다.
- 시스템 소프트웨어(System Software) : 컴퓨터의 기본 기능을 지원하고 관리하는 소프트웨어를 말한다. 시스템 소프트웨어 자체로는 어떤 목적을 이룰 수는 없지만, 시스템 소프트웨어가 있어야 응용 소프트웨어가 작동할 수 있다. 운영체제나 장치 드라이버가 여기에 속한다.
- 응용 소프트웨어(Application Software) : 어떤 목적에 맞는 기능을 제공하는 소프트웨어를 말한다. 흔히 응용 프로그램이나 애플리케이션이라 하는 것이 여기에 속한다. 예를 들어 웹 브라우저나 엑셀과 같은 프로그램이 응용 소프트웨어에 속한다.
운영체제는 다양한 하드웨어에서 작동할 수 있어야 하고, 다양한 애플리케이션이 작동할 수 있는 환경을 만들어줘야 한다. 운영체제가 하는 일이 많다 보니 운영체제를 구성하는 소프트웨어는 규모도 굉장히 크고, 다양한 요소를 내포한다.
1.1.1 운영체제 구성요소
커널(kernel)은 하드웨어를 초기화해 사용할 수 있게 하는 운영체제의 핵심 부분이다. 여러 소프트웨어가 운영체제에서 잘 작동할 수 있도록 메모리와 프로세스를 관리하고, 네트워크를 연결하는 등 주요 기능을 담당한다.
장치 드라이버는(device driver)는 하드웨어 장치를 초기화하고 운영체제와 통신을 담당하는 소프트웨어이다. 여기에서 장치는 그래픽 카드, 랜 카드, 디스크 드라이브, 마우스, 키보드 등 컴퓨터에 연결해 사용하는 모든 기기를 말한다.
장치 드라이버는 장치를 초기화한 후 장치와 운영체제 사이 통신을 담당한다. 운영체제는 장치 드라이버를 통해 장치에 명령을 보내고, 장치는 장치 드라이버를 통해 응답을 운영체제로 보낸다.
파일은 정보를 저장하는 기본 단위이다. 파일 시스템(file system)은 HDD, SSD 등 저장 장치에 파일을 저장하고 관리하는 소프트웨어이다. 파일 시스템은 파일의 이름, 크기, 저장 위치를 저장하고, 파일에 대한 읽기/쓰기/실행을 제어한다. 또한 파일의 권한을 관리하고 저장 장치에 대한 접근도 제어한다.
운영체제마다 사용하는 파일 시스템이 다르다. 윈도우 계열 운영체제에서는 FAT, NTFS를, 리눅스 계열 운영체제에서는 EXT4와 XFS를 주로 사용한다.
운영체제는 시스템을 인터넷에 연결하기 위해 네트워크 드라이버와 네트워크 스택을 갖추고 있다. 네트워크 드라이버(network driver)는 유선 랜, 와이파이, 블루투스 등 네트워크 장치를 초기화해 사용할 수 있게 하는 장치 드라이버이다.네트워크 스택(network stack)은 네트워크 장치를 통해 들어온 네트워크 트래픽을 처리하는 네트워크 프로토콜을 구현한 소프트웨어이다. 네트워크 프로토콜(network protocol)은 네트워크에서 데이터를 주고받는 데 적용되는 통신규약이다. 네트워크 스택은 네트워크 프로토콜에 맞게 들어온 네트워크 트래픽을 수신하거나 전송하며, 이 과정을 통해 시스템이 네트워크에 연결된다.
1.1.2 운영체제의 역할
프로그램 실행과 멀티 태스킹
운영체제에서 프로그램을 실행하면 프로그램의 실제 구동은 CPU가 담당한다. CPU(Central Processing Unit, 중앙 처리 장치)는 컴퓨터의 두뇌로, 프로그램 실행에 필요한 기본 명령어를 실행하는 하드웨어이다. 여기에서 기본 명령어는 프로그램 실행과 같은 고차원 명령이 아니다. CPU는 덧셈, 뺄셈, 곱셈, 나눗셈 등 산술 연산이나 논리곱(AND), 논리합(OR) 등의 논리 연산을 실행할 수 있다. 프로그램은 CPU가 해석할 수 있는 기계어로 이루어져 있다. 운영체제가 프로그램을 실행하면 디스크에 저장된 프로그램 실행 파일의 실행 코드가 메모리로 적재(load)된다. CPU는 메모리에 적재된 실행 코드를 불러와 실행한다. 정리하면, CPU가 프로그램의 실행 코드를 실행해야 프로그램이 작동한다. 이때, 메모리 상에서 실행 중인 프로그램은 프로세스(process)라고 한다.
프로세스 중 하나를 골라 CPU가 실행하는 것을 프로세스 스케줄링(process scheduling)이라고 한다. 그리고 어떤 프로세스를 선택할지 결정하는 방법을 스케줄링 알고리즘(scheduling algorithm), 이를 사용해 스케줄링하는 주체를 프로세스 스케줄러(process scheduler)라고 한다. 운영체제는 고유의 방식으로 구현된 프로세스 스케줄러가 내장되어 있다. 운영체제가 프로세스 스케줄러를 사용해 여러 프로세스를 동시에 처리하는 방식을 멀티 태스킹(multi-tasking)이라고 한다. 이처럼 운영체제는 멀티 태스킹을 통해 여러 프로그램을 실행한다.
인터럽트(interrupt)는 하드웨어가 소프트웨어에 보내는 신호이다. 주로 하드웨어에 어떤 이벤트가 발생했을 때 인터럽트를 보낸다. 운영체제는 여러 하드웨어가 보낸 다양한 인터럽트를 받아 처리한다. 어떤 인터럽트를 어떻게 처리할지는 장치 드라이버에 정의한다.
메모리(memory)는 컴퓨터 시스템에서 정말 중요한 자원 중 하나로, 운영체제는 메모리를 잘 관리해야 한다. 어떤 프로그램을 실행하려면 프로그램의 실행 코드를 메모리에 적재해야 한다. 또한 해당 프로그램이 실행 중 추가메모리를 요청하면 시스템은 가용할 수 있는 메모리 중 일부를 해당 프로그램에 할당해야 한다. 운영체제에는 수많은 프로세스가 작동하고 있다. 프로세스들이 모두 메모리를 사용하고 있을 테니 운영체제가 메모리를 잘 관리해야 프로그램들이 문제없이 돌아간다.
컴퓨터 시스템은 결국 사람이 사용한다. 일반 컴퓨터나 모바일 기기처럼 하드웨어를 직접 대면해 사용하기도 하고, 저 멀리 서버실에 설치해 둔 서버 시스템을 원격으로 접속해 사용하기도 한다. 이처럼 사람이 컴퓨터 시스템을 사용하게 하는 방법을 사용자 인터페이스(user interface)라고 한다.
운영체제는 사용자 인터페이스를 제공하고, 사용자는 사용자 인터페이스를 통해 컴퓨터 시스템과 상호작용한다. 프로그램을 실행하기도 하고, 데이터를 저장하거나 저장된 데이터를 보기도 한다. 데이터를 입력할 때는 키보드나 마우스, 터치패드와 같은 입력 장치를 이용한다. 또한 모니터와 같은 출력 장치로 표시되는 데이터를 보게 된다.
사용자 인터페이스는 크게 그래픽 사용자 인터페이스(GUI, Graphical User Interface)와 명령어 기반 인터페이스(CLI, Command Line Interface)로 나눌 수 있다. GUI는 우리가 흔히 사용하는 윈도우나 맥OS 등과 같이 그래픽을 통해 사용자와 상호작용한다. 반면, CLI는 텍스트 기반 명령어를 통해 사용자와 상호작용한다.
리눅스 배포판
리눅스는 1991년에 리누스 토르발즈(Linus Benedict Tovalds)가 만든 운영체제이다. 운영체제이므로 앞서 살펴본 구성 요소(커널, 파일 시스템, 장치 드라이버, 네트워크 시스템)를 모두 갖추고 있다. 리누스 토르발즈가 최초로 개발한 리눅스는 리눅스 운영체제가 아니라 '리눅스 커널'이었다. 리눅스 커널과 리눅스 운영체제를 잘 구분해야 한다. 현재 리눅스 운영체제는 '리눅스 배포판'이 정확한 표현이다.
리눅스 배포판(Linux distribution)은 운영체제의 목적에 맞게 리눅스 커널 여러 프로그램을 묶어 제공하는 패키지를 의미한다.
리눅스도 운영체제이므로 커널이 핵심 역할을 한다. 그래서 리눅스 커널을 사용하지 않는 운영체제는 리눅스라고 하지 않는다. 리눅스 커널에 각종 기능을 추가하여 만든 패키지를 센토스(Cetos), 우분투(Ubuntu), 페도라(Pedora), 레드헷(Redhat) 등의 이름으로 배포한다.
리눅스의 쓰임과 학습 이유
- 서버 : IT 서비스를 구성하려면 웹 서버, 데이터베이스 서버, 파일 서버, 애플리케이션 서버 등 여러 종류의 서버가 필요하다. 이런 서버에도 운영체제가 설치된다. 이때 설치되는 운영체제가 리눅스이다. 리눅스는 전 세계 서버 시장의 약 60% 이상을 점유하고 있다.
- 클라우드 컴퓨팅 : 전 세계 클라우드 컴퓨팅 분야에서 약 70% 이상 시장 점유율을 기록할 정도이다. 아마존의 AWS(Amazon Web Service)나 마이크로 소프트 Azure 등 클라우드 서비스 제공자(CSP, Cloud Service Provider)는 클라우드 서비스를 구축하기 위한 백엔드(backend, 애플리케이션이나 서비스의 보이지 않는 뒷단)에 주로 리눅스를 사용한다.
- 임베디드 시스템 : 임베디드 시스템은 PC나 서버 환경에 비해 제한적인 자원을 갖는다. CPU 성능이 매우 떨어지고, 탑재된 메모리 양도 현저히 적다. 리눅스는 이런 환경에서도 잘 작동한다. 게다가 많은 리눅스 배포판이 무료이다. 이런 점에서 임베디드 시스템의 운영체제로 리눅스가 매우 적합하다.
- 모바일 기기 : 스마트폰이나 태블릿과 같은 모바일 기기에도 리눅스가 널리 사용된다.
기본적으로 컴퓨터와 관련된 직군에서는 리눅스가 필수이다.
- 소프트웨어 개발자
- 시스템 관리자나 소프트웨어 엔지니어
- 네트워크 엔지니어
- 데이터 과학자나 AI 전문가
'프로그래밍 > 운영체제' 카테고리의 다른 글
Ubuntu 파일, 폴더 소유자 변경하기 (0) | 2024.12.09 |
---|---|
터미널(Terminal)과 셸(Shell)의 관계에 대해서 (0) | 2024.12.08 |
서비스(Service) vs 데몬(Daemon) (0) | 2024.03.25 |
시스템 콜, 시스템 호출(System Call)이란? (1) | 2024.02.05 |
커널 오브젝트(Kernel Object)에 대해서 (2) | 2024.01.24 |
댓글