Linux

리눅스 개요

Seraphic 2022. 1. 31. 18:49

리눅스의 정의 및 의미

리눅스 정의

  • 1991년 Linus Torvalds 에 의해 오픈소스로 개발
  • PC, 서버, 메인프레임, 모바일, 임베디드 기기를 위한 유닉스 호환 운영체제

리눅스 의미

  • 처음 개발된 당시에는 리눅스 커널만을 의미
  • 현재는 FSF(Free Software Foundation)가 GNU 프로젝트를 통해 리눅스 커널 기반으로 다양한 라이브러리와 어플리케이션이 포함된 리눅스 배포판을 제공. GNU/Linux 라고도 부름

리눅스의 일반적 특징

Portability

  • 대부분의 코드가 C언어로 작성. 최소한의 플롯폼에 종속적인 부분만 어셈블리어로 되어 있어 이식성이 높음
  • 다양한 CPU Architecture 에 적용되어 있음

Free software

  • 리눅스의 소스코드는 자유롭게 사용, 수정, 배포 가능
  • GPL(General Purpose License), LGPL(Library/Lesser General Purpose License) 를 따름

Multi-User

  • 다수의 사용자가 네트워크를 통해 한 시스템의 CPU, Memory, Storage 등의 Resource 에 접근 가능

Multi Programming

  • 다수의 프로그램을 메모리에 적재하고 동시 실행 가능

Hierarchical File System

  • 리눅스는 시스템과 사용자를 위한 표준화된 디렉터리 구조를 정의
 

Shell

  • 다양한 기능을 수행할 수 있도록 명령어 기반 프로그램을 제공
  • 프로그램을 통하여 Kernel 에게 명령을 내리고 Shell 은 명령어를 해석하여 프로그램을 실행
  • Shell 은 명령어 해석 기능과 프로그래밍 기능 사용자 환경설정 기능을 제공

Security

  • DAC, Extended DAC 제공
  • 네트워크상의 노드나 라우터로 동작할 수 있으며 네트워크 인터페이스에서 발생한 트래픽을 서버로 안전하게 전달 가능
  • 이를 위해 netfilter, iptables, ebtables, arptables 등의 모듈 제공
  • Mandatory Access Control 를 강화한 SELinux 가 존재

리눅스의 기술적 특징

monolithic kernel

  • 파일 시스템, 프로세스 간 통신, 입출력 기능, 장치 관리, 프로세스 처리기 등 운영체제가 제공하는 서비스를 하나의 커널로 구현하여 제공
  • 단일 커널로 운영체제의 기능이 제공되기 때문에 커널에 포함된 일부 기능을 변경하려면 커널을 다시 컴파일 해야 함
  • 기본적으로 모놀리딕 커널이긴 하나 동적 로드가 가능한 커널 모듈과 동적 설정을 위한 프로퍼티 기능 제공

장치의 파일화

  • 시스템의 자원을 모두 파일로 다룸
    • 파일
      • 디렉터리
      • 일반 파일
      • 특수 파일
        • 장치 파일
        • 파이프
        • 소켓
  • 장치의 유형에 따라 문자 장치 파일과 블록 장치 파일과 같은 장치 파일을 제공
  • 프로세스 간 통신을 위해 파이프 파일을 제공
  • 응용 프로그램이 소켓 프로그래밍이 가능하도록 소켓 파일을 제공

다양한 파일 시스템의 지원

  • ext2, ext3, ext4 와 같은 리눅스 자체 파일 시스템 제공
  • FAT32, NTFS 와 같은 윈도우용 파일 시스템 제공
  • SMB, CIFS 와 같은 네트워크 파일 시스템 제공
  • 시스템 충돌 및 전원 문제로 복구 가능한 journaling file system 지원

Virtual Memory

  • 프로세스들이 접근하는 메모리를 가상 메모리에 매핑하고 가상 메모리는 페이지를 통하여 물리 메모리에 매핑
  • 동작 중인 프로세스가 사용하는 메모리 만을 물리 메모리에 로드, 사용 빈도가 낮은 메모리는 디스크에 저장.
  • 가상 메모리는 넓은 주소 공간과 각 페이지에 대한 보호 매커니즘, 이미지와 데이터 파일을 프로세스의 주소 공간에 매핑하는 메모리 매핑, 프로세스 간 공유 메모리 기능을 제공

Swap

  • 물리 메모리 사용량이 가득 차서 프로그램을 메모리에 로드할 수 없는 경우, 프로그램들을 디스크로 옮기고 물리 메모리를 확보하여 다른 프로그램을 메모리에 다시 로드
    • Swap out: 디스크로 옮기는 작업
    • Swap in: 메모리로 옮기는 작업
  • 디스크상의 공간을 특별히 swap spave 라고 부르며 이를 위한 전용 파일이나 전용 파티션이 존재하여야 함
  • 최대 절전 기능을 사용하기 위해서 swap partition 이 필요
  • /etc/sysctl.confvm.swapiness 로 스왑 빈도 설정. 만약 10으로 설정한다면 메모리의 가용량이 10%일 때 스왑을 시도
  • free 명령어로 스왑 영역 의 용량을 확인
  • 효율적으로 메모리 공간을 활용할 수 있으나 동적으로 스왑의 크기를 조절할 수 없어 디크스킈 공간을 차지

동적 라이브러리와 정적 라이브러리

  • 동적 라이브러리를 메모리에 한 번 적재하여 여러 프로세스가 공용으로 라이브러리를 사용
  • 정적 라이브러리는 프로그램이 컴파일될 때 링크되어 프로세스가 실행될 때 정적 라이브러리도 함께 메모리에 로드
  • 동적 라이브러리는 메모리 실행 프로그램의 크기가 작고 메모리를 효율적으로 사용, 실행 속도가 느리고 배포에 제약이 존재
  • 정적 라이브러리는 실행 속도가 빠르고 배포에 제약이 없으나 실행 파일의 크기가 큼
  • 로더는 환경변수 LD_LIBRARY_PATH 와 환경설정 파일 /etc/ld.so.conf 를 검색하여 동적 라이브러리를 로드
  • 빠른 동적 라이브러리 경로 검색을 위해 /etc/ld.so.cache 파일을 유지하는데 ldconfig 명령을 통해 생성

Pipe

  • 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 있는 프로세스 간 통신 방식
  • 터미널에서 사용할 수 있는 파이프 기호는 |

Redirection

  • 프로세스의 표준 입출력을 파일, 화면, 장치 등에서 입력을 받거나 출력할 수 있도록 입출력을 재지정할 수 있는 매커니즘

Virtual console

  • 하나의 화면에서 여러 개의 콘솔을 사용할 수 있는 기능을 제공
  • Ctrl + Alt + F1 ~ F7 를 통해 콘솔을 생성 및 이동 가능