######. 리눅스 개요
###. 리눅스 정의 및 의미
#. 리녹스의 정의
- 1991 년 라누스 토발즈 에 의해 오픈소스로 개발되었고 개인용 컴퓨터,서버,
메인 프레임,모바일 기기,임베디드 기기를 위한 유닉스 호환 운영체제
#. 리눅스의 의미
- 개발된 당시에는 다양한 패키지률 포함하는 운영체제의 형태는 아니었고, 단지 리녹스 커널만을 의미
- FSF(Free Software Foundation)가 GNU 프로젝트를 통해 리눅스 커널 기반으로 다양한 라이브러리와 애플리케이션이 포함된 리눅스 배포판을 제공, 이를 강조하고자 GNU/Linux라고 부른다.
###. 리눅스의 일반적인 특징
#. 이식성 (portabillity)
- 대부분 C언어 ==> 하드웨어 이식 용이
- 처음은 인텔 x86 CPU가 기본 ==> 다양한 운영체제 가능
#. 자유 소프트웨어
- 전세계 개발자들의 기여를 통해 진화
- 리눅스 소프트웨어는 대부분 GPL, LGPL을 따른다.
#. 멀티유저
- 다수의 사용자가 네트워크를 통해 자원에 접근 가능
#. 멀티프로그래밍
- 다수의 프로그램을 메모리에 적재, 동시 실행 가능
#. 계층적 파일 시스템
- 시스템과 사용자를 위한 표준화된 디렉터리 구조를 정의
- 예 ) 사용자는 /home, 장치는 /dev
#. 셸(Shell)
- 다양한 기능을 수행할 수 있도록 명령어 기반프로그램을 제공
- 사용자는 셸을 통하여 커널에게 명령을 내리고 셸은 명령어를 해석하여 그에 맞는 프로그램을 실행
- 셸은 명령어 해석 기능과 프로그램 기능 그리고 사용자 ㅗ한경 설정 기능을 제공
#. 보안
- 임의접근제어(discretionary Access control), 확장 임의접근제어(Extended DAC) 제공
- 리녹스는 네트워크 정책에 따라서 네트워크상의 노드나 라우터로 동작할 수 있으며 네트워크 인터페이스에서 발생한 트래픽을 서벼로 안전하게 전달
- netfilter, iptables, ebtables, arptables 등 모듈 제공
- 네트워크 스택은 IPSec을 제공하여 IP 통신할 때 안전하게 데이터를 송수신
- 강제접근제어 (mandatory access control)를 강화한 SELinux(Security Enhanced Linux) 존재
###. 리눅스 기술 적 특징
#. 모놀리딕 커널 (monolithic kernel)
- 파일 시스템, 프로세스 간 통신, 입출력 기능, 장치 관리, 프로세스 처리기 등 운영체제가 제공하는 서비스를 하나의 커널로 구현하여 제공하는 방식
- 단일 커널로 운영체제의 기능이 제공되기 때문에 커널에 포함된 일부 기능을 변경하면 커널을 다시 컴파일 해야하는 수고가 있음
- 기본적 모놀리딕 커널 ==> 동적 로드 가능 커널 모듈, 설정, 기능을 통해 유연성 확보
#. 장치 파일화
- 리눅스 시스템은 자원을 모두 파일로 취급
- 디렉토리, 일반, 특수 파일로 나뉨
: 특수파일은 장치, 파이프, 소켓으로 나뉨
- 장치의 유형에 따라 문자 장치 파일, 블록 장치 파일과 같은 장치 파일을 제공
- 프로세스 간 통신을 위해 파이프 파일 제공
- 응용 프로그램이 소켓 프로그램이 가능하도록 소켓 파일을 제공
#. 다양한 파일 시스템의 지원
- 리눅스는 ext2, ext3, ext4와 같은 리눅스 자체 파일 시스템을 제공
- FAT32, NTFS와 같은 윈도유용 파일 시스템도 제공, 네트워크 파일 시스템인 SMB, CIFS의 파일 시스템도 지원
- 시스템 충돌 및 전원 문제로 복구 가능한 저널링 파일 시스템 (journaling file system)을 지원
#. 가상 메모리
- 물리적인 메모리 크기를 극복하기 위한 메모리 관리 기법
- 프로세스들이 접근하는 메모리를 가상 메모리에 매핑하고 가상 메모리는 페이지를 ㅇ해 물리 메모리에 매핑
- 시스템에서 동작 중인 프로세스가 사용하는 메모리만을 물리 메모리에 로드하며, 사용빈도가 낮은 메모리는 디스크에 저장, 이를 요구 페이징(demand paging)이라 함.
#. 스왑
- 물리 메모리 사용량이 가득 차서 프로그램을 메모리에 로드할 수 없는 경우, 메모리에 대한 접근 또는 실행 빈도가 낮은 데이터나 프로그램들을 디스크로 옮기고 물리 메모리를 확보하여 프로그램을 메모리에 다시 로드
- 디스크로 옮기는 동장을 스왑 아웃, 다시 메모리로 옮기는 작업을 스왑인
- 전용 파일이나 전용 파티션이 존재해야함
- free 명령어로 스왑 용량 확인 가능
- 효율적인 메모리 공간 확보 장점, 동적 스왑 크기 조절 불가로 하드 공간을 차지하는 단점
#. 동적, 정적 라이브러리
- 동적 라이브러리를 메모리에 한 번 적재하고 나면 여러 프로세스가 매번 동일한 라이브러리를 로드할 필요 없이 공용으로 라이브러리를 사용
- 정적라이브러리는 실행 프로그램이 컴파일될 떄 링크되어 프로세스가 실행될 떄 정적 라이브러리도 함게 메모리에 로드, 동일한 정적 라이브러리를 링크한 서로 다른 프로세스가 실행될 때 각각의 정적 라이브러리는 메모리에 중복으로 적재 됨
- 동적라이브러리는 메모리를 효율적으로 사용하나 느림, 정적 라이브러리는 실행속도가 빠르나 크기가 큼
- 로더 환경변수 LD_LIBRARY_PATH, /etc/ld.so.conf, /etc/ld.so.cache
- ldconfig 명령어를 통해 cache 갱신 필요
#. 파이프(pipe)
- 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 있는 프로세스 간 통신방식
- 기호는 "|"
#. 리다이렉션
- 프로세스의 표준 입출력을 파일, 화면, 장치 등에서 입력 받거나 출력할 수 있도록 입출력을 재지정할 수 있는 매커니즘
#. 가상 콘솔
- 하나의 화면에서 여러 개의 콘솔을 사용할 수 있는 기능을 제공
- 텍스트 기반 터미널이거나 x우니도우 같은 그래픽 일 수 있다.
- 6개의 콘솔을 제공 컨트롤 + 알트 + F1 ~6으로 생성 가능. X윈도우는 F7, 생성 후 전환은 알트 + 펑션 F1~6
###. 리눅스의 장단점
#. 장점
- 오픈소스 상용 운영체제 라이센스 비용이 안듬
- 수많은 개발자들이 리눅스를 개발하여 안적적으로 개선하고 보완성을 강화
- 이더넷, SLIP, PPP 등 다양한 네트워크 환경을 지원, TCP/IP, IPX 등 네트워크 프로토콜 지원
- 서버, 개발, PC 등 다양한 목적 사용 가능, 임베디드 같이 커널에 불필요한 것을 제거, 필요한 것은 추가하는 커스터마이징 가능
#. 단점
- 여러 사용자가 각각 느끼는 어려움을 해소해 줄 수 는 없음
- 다양한 소프트웨어가 존재하지만, MS의 365(SaaS)같은 유용 소프트웨어는 부족
- 최신 하드웨어 기기에 대한 디바이스 드라이버 지원 느림 ==> 오픈 소스 개발자들이 하드웨어 기기를 역분석 (reverse enginnering)이 필요 ==> 소요시간 오래 걸림
###. 리눅스와 GNU, 오픈소스 사이센스
#. GNU GPL라이센스를 갖는 리눅스
- 리눅스는 POSIX를 따르고 있지만 진정한 Free Software를 구현하기 위해 유닉스 소스는 일체 사용하지 않음
- GNU GPL 라이센스 ==> 누구나 사용, 변경, 배포 가능 ==> 변경 후 GPL라이센스로 재 배포해야 함
- 리눅스는 무료를 추구하는 것이 아니라 공ㅇ퓨를 통한 기술 발전 및 소프트웨어 산업 발전을 목적
$$. POSIX는 "Portable Operating System Interface"의 약자로, 이식 가능한 운영 체제 인터페이스를 제공하는 표준 규격입니다. POSIX는 UNIX와 유사한 운영 체제에서 프로그램을 작성할 때 이식성을 보장하기 위한 일련의 표준 인터페이스를 정의, POSIX 표준은 특정 운영 체제에 종속되지 않는 이식 가능한 소프트웨어 개발을 가능, POSIX 표준은 유닉스와 유사한 환경에서 개발되는 다양한 소프트웨어와 도구들을 위한 중요한 기반
#. GNU (GNU's Not Unix)
- GNU는 유닉스가 아니다.
- 상업화에 반대, 자유로운 사용, 리자드 스톨만을 주축으로 자유 소프트웨어 공동체를 형성, 다양한 소프트웨어 개발 단체
- 유닉스와 호환되지만 유닉스가 아니다.
- C 컴파일러, GNOME, tar, bash 등과 같은 다양한 분야의 응용 프로그램을 개발
#. 자유 소프트웨어 정의
- 자유 소프트웨어는 4가지 종류의 자유를 내포
: 0 : 어떤 목적 실행
: 1 : 변경 자유
: 2 : 이웃 돕기 변경가능
: 3 : 프로그램 향상 공동체 이익을 위해 다시 환원
#. copyleft
- 저작권의 copyright의 반대 의미
- 소프트웨어를 사용자가 자유롭게 사용할 수 있도록 법적 보장을 위해 만든 개념
#. 오픈소스 (open source)
- 소프트웨어나 하드웨어의 저작자 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어
- 오픈소스와 자유 소프트웨어는 비슷한 맥락을 갖고 있다. 오픈소스 진영에서도 자유 소프트웨어의 GPL 등 라이센스를 오픈소스 라이센스로 허용하고 있고 자유 소프트웨어 진영에서도 오픈소스가 추구하는 바가 결국 자유 소프트웨어가 추구하는 바와 일맥 상통한다고 인정
- 자유 소프트웨어 진영에서는 오픈소스라는 용어가 주는 의미가 소스를 공개한다는 의미에 치중되어 있고 자유 소프트웨어가 추구하는 모든 소프트웨어는 자유롭게 사용할 수 있다는 취지를 잘 반영하지 못하기 때문에 오픈소스 대신 자유 소프트웨어를 사용해 줄 것을 주장
#. 다양한 오픈소스 라이센스
- GPL (General Public Liecese)
- LGPL (Library/Lesser General Public License)
- BSD (Berkley Software Distribution)
- Apache License
- MPL (Mozilla Public License)
- MIT (Massachusetts Institute of Technology)
###. 리눅스의 역사와 리눅스 배포판
#, 리눅스의 역사
- 84~91 : 리차드 스톨만 자유 소프트웨어 운동 시작
- 91~93 : 리누스 토발즈의 리눅스 커널 배포판 릴리즈
- 94 : 리눅스 커널 정식 1.0 버전
- 98 : 오픈소스 소프트웨어 태동
- 03~05 : 다양한 배포판의 보급
- 07 : GPLv3 발표로 GPL 라이센스 완성
- 11 ~ : 전세계 개발자와 함께 리눅스 커널 지속적 발전
#. 리눅스 배포판 분류 및 특징
- 슬랙웨어 : 가장 오랜된 배포판, 가장 유닉스 같음
- 데비안 : 기업, 재단보다는 자발적 커뮤니티에 의한 배포판, APT 패키지 관리자를 사용
- 레드햇 : 고객 유료 서비스를 통한 수익 창출 추구, 일반 사용자를 위한 무료판 제공
#. 리눅스 배포판 세부 설명
- 레드햇 계열
: RHEL(RedHat Enterprise Linux) : 페도라를 기반, 안정성 목적
: Fedora : 레드햇의 후원과 페도라 커뮤니티의 지원 아래 범용적으로 개발 RPM 기반 소프트웨어, MeeGo, SailFish OS, Tizen
: CentOS (Community ENTerprise Operationg System) : 06년 GNU GPL라이센스에 따라 레드햇 소스코드를 공유하면서 오라클의 어플라이언스에 최적화 된 배포판
: Scientilic Linux : RHEL 기반 운영체제
- 데비안 계열
: Ubuntu : 전세계 사람 누구나 리눅스를 쉽게 사용하자는 바탕으로 편의성에 초점
: Raspbian : 라즈베리파이 재단에 의해 공식 지원을 받는 라즈베리파이 전용 리눅스
: ChromeOS : 구글이 설계하고 개발한 웹 애플리케이션 전용 운영체제, 사용자 인터페이스는 크롬 브라우저와 비슷
- 슬랙웨어 계열
: Slackware : 가장 먼저 대중화된 현존하는 가장 오래된 배포판, 유닉스 자체 학습에 적합
: openSUSE : Slackware 리눅스로부터 파생, 독일 제작, 유럽 많이 사용
: Vector Linux
- 안드로이드 계열
: 안드로이드
: AOSP(Android Open Sourece project)
- 국내 계열
: 하모니카
: 넘버원 리눅스
: 구름OS
###. 리눅스의 활용 분야
#. 서버, 메인 프레임
#. 스마트 디바이스
#. 임베디드 디바이스
#. 게이밍 디바이스
#. 리눅스 클러스터
#. 부하분산 클러스터 (LVS : Linux Virtual Server) : 로드 밸런서 (Load Balancer)의 역할
#. 고가용성 클러스트 (High Availablity Cluster)
- 크리티컬한 서비스를 하는 재난, 생명 시스템 같은 환경에서 사용
- 주 노드(Primary Node), 부 노드 (Backup Node)가 서로 이중화 되어 유지되게 함
'OS' 카테고리의 다른 글
[OS] 리눅스1급_리눅스의 구조1 (0) | 2023.07.01 |
---|---|
[OS] 리눅스1급_리눅스와 하드웨어 (0) | 2023.07.01 |
[OS] 리눅스1급_OS_운영체제 종류 (0) | 2023.07.01 |
[OS] 분산 운영체제_방통대 교재 정리 (0) | 2023.06.14 |
[OS] 저장장치 및 파일 관리_방통대 교재 정리 (2) | 2023.06.14 |