본문 바로가기

Linux

운영체제, 리눅스 기초

운영체제 개요

 

1. 운영체제의 정의 및 목적 역할

 

정의

- 사용자와 하드웨어간 상호작용을 위한 사용자 인터페이스 user interface를 제공하는 시스템 소프트웨어

- CPU 중앙처리장치, 메모리 및 주변장치 등 하드웨어를 관리

- 응용프로그램이 동작할수 있는 환경, 프로그래밍 인터페이스를 제공.

 

목적

- 일의 처리능력 Throughput 향상을 목적으로 함.

- 결과가 얻어질때까지 응답시간 Turnaround 최소화를 목적으로 함.

- 주어진 문제를 정확하게 처리하는 신뢰도의 향상

- 이용할 수 있는 시스템 자원이 어느정도인지 사용가능도의 향상.

- 사용자의 활동에 간섭하지 않는 비간섭.

 

역할

- 하드웨어 접근이 용의하도록 제어, 입력, 출력 등의 관리를 수행

- 한정된 하드웨어 자원을 다수의 이용자가 공유할 수 있는 기능을 수행

- 자원 스케줄링

- 응용프로그램 작성과 실행이 편리하도록 시스템 호출 system call(시스템 콜 이용해 프로세스를 생성)을 제공 

- 예상치 못한 오류시 시스템을 중단하지 않고 실행할수 있는 오류복구 기능

- 데이터를 조직화 하고 저장, 파일 관리 및 데이터베이스 기능 제공.

- 원격 컴퓨터와 연결할 수 있는 네트워크 기능 제공

- 편리한 사용자 인터페이스 제공.

 

2. 운영체제 구조와 기능

구조

- 응용 프로그램을 실행하거나 shell, GUI, 배치작업 batch jobs 를 통해 운영체제 기능 사용.

- 응용프로그램은 시스템 호출을 통하여 커널의 서비스 이용.

- 다양한 하드웨어 이식성을 향상하기 위해 하드웨어 추상계층 제공 (HAL : Hardware Abstraction Layer)

 

기능

- 리소스 관리기능 제공

- 자원 스케줄링 기능 제공

- 하드웨어 관리와 네트워크 주소 할당, 네트워크 생성, 경로설정 등 네트워크 제어기능 제공

- 파일시스템이나 데이터베이스를 통해 데이터 관리, 파일 및 네트워크와 같은 자원 공유기능 제공

- 자원에 무분별하게 접근 하는것을 방지하기 위해 자원보호기능 제공

- 디스크 및 파일시스템과 같은 시스템 손상이 있는지 점검하기 위한 오류검사기능복구기능 제공.

- 자원의 유휴시간을 최소화 하기위해 가상 컴퓨터 실행할 수 있는 가상화 기능

 

3. 운영체제의 운용 기법

운용 기법의 종류

  1. 일괄처리 시스템 Batch Processing 
  2. 다중 프로그래밍 시스템 Multi Programming
  3. 시분할 시스템 Time Sharing
  4. 다중 처리 시스템 Multi-Processing
  5. 실시간 처리 시스템 Real Time Processing
  6. 다중 모드 시스템 Multi-Mode
  7. 분산 처리 시스템 Distribute Processing

운영기법의 발전

1세대 : 일괄처리 시스템

-> 2세대 : 다중 프로그래밍, 다중 처리 시스템

-> 3세대: 시분할 시스템

-> 4세대: 다중 모드 시스템

-> 5세대: 분산 처리 시스템

 

4. 운영체제의 사례 

 

데스크톱 및 서버 운영체제

  1. 윈도우
  2. macOs
  3. 리눅스 Linux
  4. 유닉스 UNIX

모바일 및 임베디드 운영체제

  1. 안드로이드 Android
  2. iOS, watchOS, iPadOS, tvOS
  3. 타이젠 Tizen
  4. 임베디드 리눅스 Embedded Linux

운영체제

  1. Linux
  2. Windows IoT
  3. RTOS
  4. 경량 OS

리눅스 기초

 

1. 개요

1 - 리눅스의 정의 및 의미

정의

1991년 리누스 토발즈에 의해 오픈소스로 개발.

개인용 컴퓨터, 서버, 메인프레임, 모바일기기, 임베디드 기기를 위한 유닉스 호환 운영체제.

 

의미

- 처음 개발당시 단지 리눅스 커널만을 의미

- 현재는 FSF가 GNU 프로젝트를 통해 커널 기반으로 다양한 라이브러리와 어플리케이션이 포함된 리눅스 배포판을 제공.

 

2 - 리눅스의 일반적 특징

  1. 이식성 Portability
    대부분의 코드가 C언어로 작성. 최소 플랫폼에 종속적인 부분만 에셈블리언어로 작성되어 다양한 하드웨어에 쉽게 이식 가능.
    다양한 CPU 아키텍처에 적용
  2. 자유 소프트웨어
    전세계 개발자들이 기여
    소스코드는 자유롭게 사용, 수정, 배포할 수 있다
    대부분 GPL이나 LGPL 라이선스
  3. 멀티 유저 Multi-User
    다수의 사용자가 네트워크를 통해 한시스템 자원에 접근하여 사용가능.
  4. 멀티프로그래밍 Multiprogramming
    다수의 프로그램을 메모리에 적재하고 동시에 실행가능
  5. 계층적 파일시스템 Hierarchical File System
    표준화된 디렉터리 구조를 정의
    ex) 장치관련은 dev에 위치 usr 이하에 위치
  6. 셸 Shell
    명령어 기반 프로그램을 제공
    커널에게 명령을 내리고 명령어를 해석하여 맞는 프로그램을 실행
  7. 보안 Security
    임의접근제어를 제공하고 이를 확장한 임의접근제어 제공
    네트워크상의 노드나 라우터로 동작할 수 있으며 네트워크 인터페이스에서 발생한 트래픽을 서버로 안전하게 전달.
    netfilter, iptables, ebtables, arptables 등 모듈 제공
    네트워크 스택은 IPSec 제공하여 IP 통신할때 안전하게 데이터 송수신
    강제접근제어를 강화한 SELinux 가 존재 

3 - 리눅스의 기술적 특징

  1. 모놀리딕 커널
    파일시스템, 프로세스간 통신, 입출력 기능, 장치관리, 프로세스 처리기 등
    운영체제가 제공하는 서비스를 하나의 커널로 구현 제공하는 방식
    기본적으로 모놀리딕 커널이지만 동적로드가 가능한 커널모듈과 프로퍼티 기능을 통해 유연성 확보
  2. 장치의 파일화
    시스템 자원을 모두 파일로 다룸.
    파일은 디렉터리, 일반파일, 특수파일로 나눔.
    특수파일은 장치파일, 파이프, 소켓 등으로 나눔.
    장치 유형에따라 문자장치파일과 블록장치파일과 같은 장치파일 제공
    프로세스 간 통신을 위해 파이프 파일을 제공
    응용 프로그램이 소켓 프로그래밍이 가능하도록 소켓파일 제공
  3. 다양한 파일시스템의 지원
    ext2, ext3, ext4 같은 리눅스 자체 파일시스템 제공
    FAT32, NTFS 와 같은 윈도우용 파일시스템도 제공 네트워크 파일시스템인 SMB, CIFS의 파일시스템도 지원
    시스템 충돌 및 전원 문제로 복구 가능한 저널링 파일시스템 지원
  4. 가상메모리
    물리적 메모리 크기를 극복하기 위한 메모리 관리기법
    프로세스들이 접근하는 메모리를 가사아 메모리에 매핑, 가상메모리는 페이지를 통해 물리 메모리에 매핑.
    시스템에서 동작중인 프로세스가 사용하는 메모리만을 물리 메모리에 로드, 사용빈도가 낮은 메모리는 디스크에 저장 - 요구 페이징.
    가상메모리는 넓은 주소 공간과 각 페이지에 대한 보호 매커니즘,
    이미지와 데이터 파일을 프로세스의 주소 공간에 매핑하는 메모리 매핑,
    프로세스 간 공유 메모리 기능 제공.
  5. 스왑 Swap
    물리 메모리 사용량이 가특차 프로그램을 메모리에 로드할 수 없는경우, 실행빈도가 낮은 데이터나 프로그램을 디스크로 옮기고 (스왑 아웃 swap out) 물리 메모리를 확보하여 프로그램을 메모리에 다시 로드(스왑 인 swap in).
    이때 디스크상의 공간을 스왑공간 이라 부르며 전용파일이나 전용 파티션이 존재 하여야 함.
    최대 절전 기능을 사용하기 위해 스왑파티션이 필요. 비휘발성 디스크에 데이터 저장이 필요.
    스왑 빈도 설정은 /etc/sysctl.conf 의 vm.swapiness 를 설정. ex) 10 설정은 메모리 가용량이 10%일때 스왑 시도
    free 명령어로 스왑 영역의 용량, 메모리 상태도 확인.
    메모리 공간을 활용할 수 있지만, 동적으로 스왑 크기를 조절할 수 없어 하드디스크 공간을 차지한다는 단점.
  6. 동적 라이브러리와 정적 라이브러리
    동적 라이브러리를 메모리에 한번 올리면 매번 동일한 라이브러리를 로드할 필요 없이 공용으로 사용 가능.
    실행프로그램이 컴파일 될때 링크되어 프로세스가 실행될 때 정적 라이브러리도 함께 메모리에 로드.
    정적 라이브러리를 이용하는 프로세스를 메모리에 적재할 때마다 정적라이브러리는 매번 메모리에 중복으로 상주.
    동적라이브러리 - 메모리 실행 프로그램의 크기가 작고 메모리를 효율적으로 사용하나 실행속도가 느리고 배포에 제약 존재
    정적라이브러리 - 실행속도가 빠르로 배포에 제약이 없으나 실행파일 크기가 상대적으로 큼. 
  7. 파이프 Pipe
    프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 있는 프로세스 간 통신 방식
    터미널에서 사용할 수 있는 기호 '  | '
  8. 리다이렉션 redirection
    프로세스 표준 입출력 파일, 화면, 장치 등에서 입력을 받거나 출력할 수 있도록 입출력 재지정할 수 있는 매커니즘
  9. 가상콘솔 virtual console
    하나의 화면에서 여러개 콘솔 사용할 수 있는 기능 제공
    총 6개의 콘솔을 제공.

4 - 리눅스의 장단점

장점

- 오픈소스라 경제적

- 많은개발자들이 공개 리눅스를 개량, 안정적으로  보안성 강화

- 다양한 네트워크 환경을 지원하며, 네트워크 프로토콜 지원

- 다양한 목적으로 배포한 존재. 커스터마이징 가능

단점

- 체계적 기술지원 네트워크 없음

- 리눅스용 상용 소프트웨어 부족

- 최신 하드웨어 디바이스 드라이브 지원이 느림.

 

2. 리눅스와 GNU 그리고 오픈소스 라이선스

1 - GNU GPL 라이선스를 갖는 리눅스

- 유닉스 POSIX 표준을 따르지만 자유소프트웨어 구현을 위해 모든 소스를 새롭게 작성하였다

- GNU GPL 라이선스

- 자유롭게 복제, 배포 할수 있지만 GPL라이선스로 배포되어야 함.

 

2 - GNU(GNU's Not Unix)

- 소프트웨어를 자유롭게 사용할수 있도록 리처드 스톨만 중심으로 자유 소프트웨어 공동체 형성

- 유닉스와 호환된다는 의미와 다른 운영체제라는 이중적 의미

 

3 - 자유 소프트웨어의 정의

  1. 프로그램을 어떠한 목적을 위해서도 실행할수 있는 자유
  2. 프로그램 작동원리를 연구하고 이를 자신의 필요에 맞게 변경시킬수 있는 자유
  3. 이웃을 돕기위해 프로그램 복제, 배포 할 수 있는 자유
  4. 프로그램을 향상하고 이를 공동체 전체의 이익을 위해 다시 환원할 수 있는 자유

4 - 카피 레프트 Copyleft

- 저작권을 뜻하는 카피라이트 Copyright 의 반대의미

- 자유롭게 사용할 수 있도록 법률적 보장을 위해 만들어진 개념

 

2. 오픈소스 open Souce

저작자 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록한 소프트웨어

넷스케이프 소스코드를 어떤 형태로 공개할 까 논의중 처음 사용된 용어가 오픈소스

자유소프트웨어 진영에서는 오픈소스라는 용어가 주는 의미가 소스를 공개한다는 의미에 치중.

 

3. 다양한 오픈소스 라이선스

1 - GPL(General Public Licence) 라이선스

- GNU 프로젝트로 배포된 프로그램 라이선스로 사용하기 위해 자유소프트웨어 재단에서 만든 라이선스

- 카피레프트를 구현한 라이선스

- GPLv1, GPLv2, GPLv 3세개의 버전

- 변경된 프로그램 역시 같은 라이선스를 취해야 함. 소스코드도 반드시 공개 배포.

2 - LGPL(Library/Lesser General Public License) 라이선스

- 이 프로그램을 이용하는 프로그램에는 카피레프트를 적용하진 않음.

- LGPL 프로그램 소스를 수정했다면 수정한 프로그램 소스코드 공개해야함.

3 - BSD (Berkley Software Distribution) 라이선스

     수정본의 재배포는 의무사항이 아니며 소스코드 비공개가 가능

4 - Apache 아파치 라이선스

- 파생프로그램 제작 가능. 상업적 목적 가능. 아파치 라이센스 명시만 해주면 됨.

5 - MPL (Mosilla Public License) 라이선스

- 수정한 MPL 프로그램 소스코드 공개의무

6 - MIT 라이선스

- 라이선스의 엄격함은 없음. 오픈소스 여부에 관계없이 재사용 허용.

 

'Linux' 카테고리의 다른 글

네트워크의 설정  (0) 2020.08.19
네트워크 기초  (0) 2020.08.16
프로세스  (0) 2020.08.16
셸 Shell  (0) 2020.08.13
리눅스와 하드웨어, 리눅스의 구조  (0) 2020.08.09