본문 바로가기

자격증/리눅스 마스터 1급

Part1) 리눅스의 실무의 이해 - 리눅스의 개요(1) | 운영체제의 개요


운영체제의 목적

  • 효율적 사용(efficient use): 컴퓨터 자원의 효율적인 활용을 보장
  • 사용자 편리성(user convenience): 컴퓨터 시스템의 편리한 사용법을 제공
  • 비간섭(noninterference): 운영체제 사용자들의 활동에 간섭을 방지


운영체제의 역할

  • 컴퓨터의 하드웨어를 제어한다.
  • 사용자들 간의 하드웨어 자원을 공유할 수 있도록 한다.
  • 시스템 자원을 스케줄링하여 효율적으로 활용할 수 있게 한다.
  • 입출력이 용이하게 하는 기능을 제공한다.
  • 응용 프로그램의 작성과 실행을 편리하게 한다.
  • 오류의 발생을 막고 복구를 지원한다.
  • 데이터의 조직화, 네트워크 통신 처리 기능을 수행한다.
  • 편리한 사용자 인터페이스를 제공한다.


운영체제를 구성하는 요소

  • 제어 프로그램: 시스템을 운영하기 위한 기능을 수행하는 프로그램(감시 프로그램, 데이터 관리 프로그램, 작업 관리 프로그램 등...)
  • 처리 프로그램: 컴퓨터가 실제적으로 작업을 수행하기 위한 기능을 지원하는 프로그램(언어 번역 프로그램, 서비스 프로그램, 사용자가 작성한 문제 처리 프로그램, 컴퓨터 제작 회사로부터 제공된 프로그램 등... )


시스템 성능을 나타내는 4가지 요소 - (15년 후반기)

  • Throughput: 단위 시간당 처리 능력을 나타냄
  • Turnaround Time: 작업이 제출되어서 결과를 얻을 때까지의 총 소요 시간
  • 신뢰도(Reliability): 시스템이 얼마나 정확하게 작동되는지를 나타냄
  • 사용 가능도(Availability): 시스템에서 곧 사용할 수 있은 정도를 나타냄


운영체제 주요 요소

  • 커널(Kernel): 모든 운영체제에 포함되어 있고, 항상 메모리에 상주하며, 장치들을 관리함
  • 쉘(Shell): 커널과 사용자, 커널과 애플리케이션들과의 대화수단이 되는 프로그램
  • 파일 시스템(File System): 데이터 및 장치 관리의 객체가 되는 파일 시스템 구조체
  • 시스템 소프트웨어(System Software): 커널 외에 시스템 자원 관리를 위한 소프트웨어
  • 애플리케이션(Application): apache, mysql, vsftpd 등과 같이 운영체제에 기본적으로 포함되어 제공되는 수많은 응용 프로그램들

위 다섯 부분을 분류

  • 가장 좁은 의미의 운영체제: 커널
  • 보편적인 의미의 운영체제: 커널 + 쉘 + 파일 시스템
  • 가장 넓은 의미의 운영체제: 커널 + 쉘 + 파일 시스템 + 시스템 소프트웨어 + 애플리케이션


운영체제의 특징

  • 다중 사용자 시스템(Multi-user System): 개인용 컴퓨터 환경에서 실행되는 운영체제라도 다중 사용자를 지원함으로써 동시에 여러 사용자가 접속하여 시스템을 사용할 수 있도록 한다. 시스템 유틸리티와 자원의 공유가 자유롭고 각 사용자마다 할당된 자원을 이용하여 다른 사용자와 독립적으로 작업을 진행 할 수 있다.
  • 다중 작업 시스템(Multi-tasking System): 여러 사용자가 여러 가지의 작업을 동시에 수행할 수 있다. 각 작업은 시분할 방식을 이용하여 시스템의 CPU점유를 정해진 시간만큼 번갈아 가면서 사용하지만 빠른 실행 속도 구현과 자원의 관리 기능이 고도화되어 각 작업은 독립적 수행이 가능하게 되었다.
  • 강력한 네트워킹: 시스템 간에 정보를 공유하고 분산 처리를 수행하며, 원격 서비스의 처리를 위해 강력한 네트워크 기능은 운영체제의 필수 부분이 되어 원격 접속, 전자 우편, 파일 전송 등이 기본적으로 요구된다.
  • 편리한 사용자 인터페이스: 원격 접속이나 특정한 명령을 수행하는 경우를 제외하고는 대부분의 작업이 GUI 그래픽 작업 환경을 사용하여 여러 개의 화면을 동시에 사용할 수 있는 멀티스레딩과 멀티미디어를 활용한 작업이 가능하다.
  • 계층적 파일 관리 시스템: 파일 관리를 위하여 계층적 디렉토리 구조를 사용해서 디렉토리 및 파일의 관리가 용이하고, 쉽게 찾거나 이용할 수 있으며, 정보 처리가 매우 효율적임
  • 가상 메모리: 디스크 가상 메모리를 사용하여 실제 RAM 용량의 부족을 해결하거나 주기억 장치의 용량을 증대하는 효과를 제공하고, 표준 서브루틴의 채택과 공유 라이브러리 서브루틴의 실시간 검색기능을 지원하여 각 응용 프로그램마다 공통 루틴을 별도 저장하는 것을 방지하여 시스템의 디스크 공간 활용을 높여준다.
  • 고성능의 프로세서에 최적화: 고성능, 고기능화된 최신형 프로세서에 최적화된 운영체제 커널을 제공하여 전원 및 자원 관리가 매우 효율적이고 프로세서의 성능이 최대한 발휘될 수 있는 실행 환경을 제공한다. 또한 운영체제를 구동하기 위해 시스템 자원을 최소한으로 사용하므로 시스템 자원이 응용프로그램을 처리하는데 최대한 사용될 수 있다.
  • 개방형 운영체제 및 뛰어난 이식성: 수많은 이질적인 운영체제들과 연결 및 자료 호환이 자유롭고 특정 시스템에 종속되지 않으며, 하드웨어들에 대해여 자유롭도록 개방형 운영체제로 변하고 있다. 그러므로 여러 사용자가 시스템에 접근하는 것이 자유롭고 독립적인 작업이 가능하며, 다른 기종의 운영체제를 사용하는 시스템과의 접속이 자유롭게 되었다. 그리고 기존 운영체제에서 새로운 운영체제를 추가 설치해서 하나의 시스템에 다중 운영체제를 구현하는 것도 가능하게 되었다.


    운영체제의 역사 - (07년 전반기[특징 순서 문제])


    연도 

    특징 

    주요 내용 

     1940년대 

     운영체제가 없음 

     기계어 사용 

     1950년대 

     일괄 처리 시스템 

     단일 흐름 일괄 처리

     작업간의 전이 문제 중시

     오류 복구 처리 

     1960년대

     다중 프로그래밍

     시분할 시스템 

     실시간 처리 시스템

     가상 기억 장치

     고급 언어로 운영체제 작성

     데이터 통신 지원용 운영체제 

     1970년대 중반

     범용 시스템 개념 도입

     다중 모드 시스템 

     일괄 처리, 시분할 처리, 다중 모드

     (실시간 처리, 다중 처리를 한 시스템에서 모두 제공)  

     1980년대 

     마이크로컴퓨터 운영체제

     사용자에게 친절한 시스템 개념 

     가상 기억 장치

     통신망 서비스 운영체제

     데이터베이스 중요 인식 

     1990년대 이후 

     분산 처리 개념

     네트워크 개념

     개인용 컴퓨터

     소규모 서버 

     소규모 서버

     보안과 인증 강화

     에이전트 프로그램의 활성화 


      운영체제의 기능별 유형 - (15년 후반기)

      • 다중 교환(Multi-switching): 다수의 작업이 동시 실행되나 포그라운드 프로그램만 동작하는 형태
      • 단일 작업(Single-tasking): 컴퓨터가 한 번에 하나의 작업만 처리하는 형태
      • 다중 작업(Multi-tasking): 한 사용자가 여러 개의 작업을 동시에 수행하는 시스템
      • 다중 사용자(Multi-user): 단일 프로세서 시스템에서 여러 사용자의 프로그램이 실행되는 것
      • 대화형 처리(Interactive Processing): 사용자가 단말기에서 대화형으로 작업을 처리하는 것으로 시분할 처리 기능이 필요
      • 일괄 처리(Batch Processing): 여러 개의 작업을 묶어 한꺼번에 처리하는 것으로 작업 처리 효율이 높음
      • 실시간 처리(Real Time Processing): 작업의 처리가 지연없이 즉각적으로 처리되는 것으로 신속한 반응을 요구함
      • 가상 기계(Virtual Machine): 실제로 있는 컴퓨터 시스템을 여러 명의 사용자가 동시에 사용 할 수 있도록 하기 위해 그 컴퓨터 시스템을 마치 여러 대의 작은 컴퓨터 시스템이 있는 것처럼 분할하여 만든 것
      • 분산 처리(Distributed Processing): 통신선으로 여러 시스템을 연결하고 작업을 나누어서 처리함. 또한 빠른 속도의 통신선과 고신뢰도를 요구하는 것으로 마이크로프로세서의 사용이 필요함.
      • 병렬 계산(Parallel Processing): 많은 프로세서들이 동시에 작동함. 향후 시스템은 병렬 계산 위주이면서 높은 수준의 신뢰성을 보장함


        시스템 프로그램


        시스템 프로그램: 사용자가 컴퓨터를 사용할 때 편리하게 이용할 수 있도록 기능을 제공하는 프로그램들을 의미 

        • 어셈블러(Assembler): 저급 언어인 어셈블리어로 작성된 프로그램을 기계어로 번역하는 언어 번역 프로그램
        • 매크로 프로세서(Macro Processor): 매크로 호출을 매크로 정의로 바꾸어주는 프로그램
        • 로더(Loader): 어떤 프로그램을 실행하기 위해서 그 포로그램의 명령문들과 데이터들을 주기억 장치에 놓아주는 프로그램
        • 컴파일러(Compiler): 고급 언어로된 소스코드 프로그램을 분석해서 이에 대응되는 목적코드 프로그램을 생성하는 프로그램
        • 운영 체제(Operating System): 기억 장치, 프로세서, 주변 장치 그리고 정보와 같은 자원들과 서비스들의 할당과 관련되어 있음


        기억 장치 관리


        1)기억 장치: 주기억 장치와 보조기억 장치로 구분되고, CPU가 프로그램과 데이터를 즉각적으로 실행하고 참조하기 위해서는 주기억 장치에 있어야 한다. 그러나 주기억 장치는 휘발성 메모리로 대량의 데이터를 장기적으로 보존할 수 없으므로, 많은 양의 프로그램과 데이터를 저렴하게 저장하기 위해서 보조기억 장치를 사용함

        • 캐시 기억 장치의 개념: 캐시란 CPU와 주기억 장치의 사이에 위치해서 주기억 장치의 정보들을 고속으로 CPU에 제공하는 최상위 계층의 메모리
          • 접근 속도가 가장 빠르고 비쌈
          • 보통 주기억 장치보다 용량이 작음(512KB)
          • 주기억 장치의 일부 내용을 복사해 놓음
          • CPU가 실제적으로 참조하는 메모리
          • 기억 장치 중에서 최상위 단계의 메모리
        • 기억 장치 관리를 위한 요구 사항: 프로그램의 적재 위치를 동적으로 변환하거나 특정 영역에 대한 액세스를 제한하거나 공유하고, 정보 블록의 크기를 정하며, 미디어의 특성에 적합한 관리 기법이 필요함
          • 재배치(Relocation): 프로그램의 주소를 동적으로 재배치
          • 보호(Protection): 다른 사용자의 영역을 허락없이 참조하는 것을 방지
          • 공유(Sharing): 여러 프로세스들이 기억 장치의 특정 부분을 같이 참조
          • 논리 구조(Logical Organization): 정보 블록의 크기가 일정한 모듈고 크기가 일정하지 않은 세그먼테이션으로 구성
          • 물리 구조(Physical Organization): 주기억 장치와 보조기억 장치, 휘발성 메모리와 비휘발성 메모리로 특성이 구분
        • 기억 장치 관리 기법
          • 호출 기법(Fetch): 보조 기억 장치로부터 페이지나 세그먼트를 인출함[종류: 요구호출과 예상호출]
          • 배치 기법(Placement): 페이지나 세그먼트가 적재될 위치를 결정[종류: 최초 적합, 최적 적합, 최악 적합]
          • 교체 기법(Replacement): 페이지나 세그먼트 중의 하나를 제거[종류: 알고리즘(Random, FIFO, LRU, LFU, NUR, Second chance, Locality)]


        2)분할 기억 장치 관리: 프로그램이나 데이터를 적재할 때 기억 장치의 연속된 공간을 할당하는 것이 아니라 한 부분에 적재함으로써 하나의 시스템에 여러 개의 프로그램이 적재되어 실행될 수 있음

        • 다중 연속 고정 분할 방법(Multiple Contiguous Fixed Partition): 다중 프로그래밍 환경에서 절대 번역과 적재를 사용할 때 고정된 분할을 이용
        • 다중 연속 가변 분할 방법(Multiple Contiguous Variable Partition): 각 작업의 크기에 따라 분할 영역을 할당하며, 큰 기억장소가 필요할때 기억 장소 집약이 필요
        • 기억 장소 배치 기법(Storage Placement Strategy): 시스템에 새로 적재되는 프로그램과 데이터를 주기억 장치의 어디에 배치할 것인지 결정
          • 최초 적합(First-Fit) 방법: 가용 공간 중 수용할 수 있는 첫 번째 있는 기억 공간을 할당하는 방법
          • 최적 적합(Best-Fit) 방법: 가용 공간을 정렬하고 필요로 하는 공간과 같거나 수용 가능한 공간 중 가장 작은 것을 할당하는 방법
          • 최악 적합(Worst-Fit) 방법: 가용 공간을 내림차순으로 정렬하고 수용 가능한 공간 중 가장 큰 것을 할당하는 방법


        3)재배치 분할 기억 장치 관리

        • 압축: 분할된 기억 장소는 크기가 공간보다 작거나 같은  프로그램만 수용할 수 있으므로 필연적으로 할당되고 남은 부분인 작은 조각들이 발생하는데, 이러한 것들을 한쪽으로 몰아주는 작업
        • 재배치 레지스터 이용: 다중 분할된 메모리를 관리하고 각 프로세스의 시작 주소와 경계에 대한 정보를 가짐
        • 집약: 압축 기법을 이용해서 산재된 조그만 기억 공간을 한데 모아서 사용 가능한 큰 기억 장소로 만드는 작업
          • 장점: 작은 기억 공간을 모아 큰 기억 장소를 만들 수 있고, 가변 분할에서 발생되는 조각을 없앨 수 있음
          • 단점: 생산적으로 사용 가능한 시스템 자원을 소비하고, 집약하는 동안 모든 작업을 중지해야하며, 재배치 관련 정보의 유지관리가 매우 복잡함 


        4)가상 기억 장치(Virtual Memory): 프로세스에 의해 참조되는 주소를 주기억 장치에서 사용할 수 있는 주소와는 별개로 프로그램을 실행해야 할 부분만 컴퓨터에 적재하고 가상의 주소를 지정해서 마치 전체 프로그램이 모두 있는 것 처럼 컴퓨터를 인식시킴

        • 인위적 연속성(Artificial Contiguity): 프로세스의 가상 주소 공간에서 연속인 주소가 실주소에서 연속일 필요가 없음
        • 가상 주소(Virtual Address): 실행 프로세스가 참조하는 주소
        • 실 주소(Real Address): 주기억 장소에서 사용할 수 있는 주소
        • 가상 주소 공간(Virtual Address Space): 실행 프로세스가 참조하는 가상 주소의 범위
        • 실 주소 공간(Real Address Space): 특정 컴퓨터에서 사용 가능한 실주소의 범위
        • 동적 주소 변환(DAT: Dynamic Address Translation): 프로세스가 실행되는 동안 가상 기억 장소의 위치가 실기억 장치의 어디에 위치하는지 변환하는 과정
        • 가상 기억 공간 구현 알고리즘: 가상 기억 공간을 구현하기 위한 알고리즘으로 작업표(JT: Job Table), 메모리 블록(MBT: Memory Block Table), PMT(Page Map Table)이 있다.
        • 페이지 기억 장치 관리(Paged Memory Management): 가상 기억 공간을 구현하기 위하여 메모리를 일정한 크기의 페이지 프레임으로 분할하고 페이지 맵을 이용해서 실제 주소공간을 가상 주소 공간과 매핑시키는 기법
          • 블록(Block): 매핑의 수를 줄이기 위하여 인위적으로 구성한 정보의 분할 단위
          • 페이지(Page): 블록의 크기가 일정한 블록
          • 페이징(Paging): 페이지를 이용한 가상 기억 장소 구성법
          • 페이지 사상(Page Mapping): 페이지를 이용한 가상 기억 장소와 실기억 장소의 주소변환 방법
          • 변위(Displacement): 블록의 시작 부분부터 항목까지의 상대적인 주소
          • PMT(Page Map Table): 페이지 블록들의 목록이 작성된 리스트
        • 세그먼트 기억 장치 관리(Segmented Memory Management): 위 방법과 같으나 대신 크기가 다른 세그먼트 프레임을 사용하는 방법
          • 세그먼트(Segment): 정보 블록의 크기가 다른 블록
          • 세그먼트 기법(Segmentation): 세그먼트를 이용한 가상 기억 장소 구성 방법
          • 기억 장치 보호키(Storage Protection Key): 블록의 크기가 달라서 다른 사용자 영역을 참조하는 것을 막기 위하여 경계 레지스터 대신 사용자별로 고유한 CPU 기억 장치 보호키를 이용하여 다른 영역에 대한 액세스를 방지함
          • 액세스 제어 형태의 종류: 판독(Read), 기록(Write), 수행(Execute), 첨가(Append)
        • 세그먼트의 소프트웨어 알고리즘: 세그먼트 기법은 페이지 기법이 일정한 크기의 페이지만 취급하므로 내부 단편이 발생하고 빈번한 페이지 부재로 인한 적재와 교체로 스레싱이 발생하여 속도가 저하되는 문제를 해결할 수 있음
          • 특징: 단편화 제거, 가상 기억 장치 제공, 동적 증가 세그먼트 허용, 동적 연결과 코드, 공유 세그먼트, 통제 접근
        • 요구 세그먼트 방법: 해당 세그먼트에 대한 액세스 요청이 있는 경우에만 세그먼트를 교체하는 방법
          • 장점: 사용자 프로그램이 실제 기억 장소보다 큰 경우에도 처리가능 / 단점: 가상 기억 장치 구현이 쉽지 않고, 부주의 이용 시 활용도가 감소됨
        • 교환(Swapping): 페이지나 세그먼트를 서로 맞바꾸기 위한 알고리즘이 필요
          • Roll-Out: 교체되는 페이지를 제거 하는 것
          • Roll-In: 신규 페이지를 적재 하는 것
          • 문맥 교환(Context Switch): 페이지를 서로 교체하기 위해 문맥을 저장하고 재적재 하는 것


        5)요구 페이지 기억 장치 관리(Demand-Paged Memory Management): 기억장소가 필요할 때 적절한 기억 장소를 그때그때 제공하는 기법

        • 요구 페이지 방법: 특정 페이지에 대한 액세스 요구가 발생하면 그때 해당 페이지를 기억장소에서 읽어들이는 방식
        • 요구 페이징에서 페이지 부재 발생 순서
          1. 페이지 부재 인터럽트 신호 발생
          2. 인터럽트가 페이지 부재인지를 결정
          3. 페이지 참조가 합법적이고 디스크상의 페이지의 위치를 결정
          4. 디스크의 해당 페이지 블록을 Read 액세스
          5. 읽은 페이지 블록의 전송 시작
          6. 디스크에서 Read 전송 완료 인터럽트
          7. 인터럽트가 디스크에서 발생되는지를 결정
          8. 요구된 페이지가 지금 기억 장소에 있는지를 보기 위해서 PMT와 다른 테이블을 결정
          9. 사용자 레지스터들, 프로그램 상태와 새로운 PMT를 다시 저장하고 그때 인터럽트된 명령을 재개


        6)페이지 대체(Page Replacement) 알고리즘: 페이지 부재가 발생할 때 새로운 페이지를 적재하기 위해서 기존의 페이지를 제거하는 알고리즘

        • 최적화 원칙(Principle of Optimality)
          • 가장 오랫동안 사용되지 않을 페이지를 교체, 페이지 교체 기법이 얼마나 최적성을 가지고 있는지를 비교하여 사용
        • 무작위 페이지 교체(Random Page Replacement): 임의로 아무 페이지를 선택에 교체하는 방법이지만 바로 참조될 프레임 제거할 가능성이 있음
          • 페이지 교체 알고리즘이 가장 간단
          • 모든 페이지가 교체될 가능성이 동등
          • 최악의 경우 바로 뒤에 참조될 페이지가 교체될 수 있어서 거의 사용 X
        • FIFO(First-In First-Out): 먼저 적재된 페이지를 제거하는 알고리즘
            • 적재된 지 가장 오래된 페이지를 교체
            • 페이지 교체 알고리즘이 상당이 간단
            • 가장 오래 적재된 페이지가 자주 참조
            • 페이지 프레임 수를 늘려도 페이지 부재가 늘어날 가능성이 있음
          • LRU(Least Recently Used): 최근 가장 적게 사용된 페이지를 제거하는 방법
            • 페이지들의 참조 시간을 관리하는데 큰 오버헤드가 있음
            • 순환문의 경우 참조한 지 오래된 부분이 바로 뒤에서 참조할 페이지일 가능성이 높음
            • 페이지 엔트리와 시간 관리의 오버헤드로 잘 사용 X
          • LFU(Least Frequently Used): 가장 적게 사용된 것을 삭제함
            • 페이지의 참조 횟수만 관리하므로 알고리즘이 간단
            • 최악의 경우는 가장 나중에 적재된 페이지가 계속 참조되어야 하는데도 참조횟수가 적다는 이유만으로 교체 되는 문제가 발생
          • NUR(Not Used Resently): 최근에 사용되지 않은 페이지를 제거하는 방법
            • 최근에 사용되지 않은 페이지는 금방 사용될 가능성이 없으므로 LRU의 변형임
            • 각 페이지마다 참조 비트와 변형 비트를 사용
            • 시간 관리를 위한 오버헤드가 적고 알고리즘이 비교적 간단하며 효율적임
            • 모든 페이지가 변형된 경우는 임의의 페이지를 교체하게 됨
          • 2차 기회(Second Chance): 첫 번째 부재 발생 시 점과 같은 것으로 표시, 두 번째는 교체하는 방법 [첫 번째는 RR방식순환, 그 후로는 일반 태그 사용]
            • 페이지를 단번에 교체하지 않고 태그를 한번 셋팅하고 두 번째에 교체
            • 리스트를 이동하면서 RR방식으로 순환하다가 두 번째 태그가 바뀌면 교체됨
            • 알고리즘이 비교적 단순하고 오버헤드가 적은 편
          • 국부성(Locality): 공간적으로 인접하지 않은 곳의 프레임을 교체하는 방법
            • 정보의 액세스가 특정 부분을 집중적으로 액세스하는 것을 활용
            • 실제로 나타나는 성질이며 인접한 페이지들은 교체 대상에서 제외하는 것
            • 국부성은 시간 국부성과 공간 국부성이 있음 (시간 국부성: 순환, 서브루틴, 스택 등 / 공간 국부성: 배열, 순차 실행 등)