01.시스템보안 - 01.운영체제 이해 및 관리

운영체제 개요

  • 운영체제의 정의 : 컴퓨터 시스템의 자원을 효율적으로 관리, 사용자가 컴퓨터를 효과적으로 사용할수 있도록 환경을 제공하는 여러 프로그램의 모임

  • 운영체제의 목적

    • 처리 능력의 향상 : 시간당 작업 처리량(Throughput), 평균 처리시간 개선
    • 신뢰성 향상 : 실패 없이 주어진 기능을 수행할 수 있는 능력
    • 응답시간의 단축 : 사용자가 시스템에 의뢰한 작업의 반응 시간 단축
    • 자원 활용률 향상 : 자원의 공유, 상호배제를 통해 자원 효율적 활용
    • 가용성 향상 : 고장과 오류가 발생해도 운영 영향 최소화

운영체제 종류

1. 종류

  • Batch : 순차적, 한꺼번에 처리
  • Multi Programming : N개 프로그램 기동, CPU 가동률 극대화, 유휴 시간 최소화, 스케줄링 필요
  • Time Sharing : 시간을 분할하여 CPU 사용
  • Multi Process : 다중 CPU
  • Real Time System : 실시간 처리
  • Multi-Mode : 다중 운영체제 (일괄처리, 시분할, 다중처리, 실시간 처리)
  • Distributed System : 네트워크로 분산된 운영체제

2. 프로세스와 스레드

  • 프로세스(Process)
    • 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등의 집합체이다.
    • 실행중인 프로세스(가장 보편적인 정의)이다.
    • 프로세서에 의해 수행되는 프로그램 단위로 현재 실행 중이거나 곧 실행 가능한 PCB(Process Control Block)를 가진 프로그램이다.
  • 스레드(Thread)
    • 제어의 흐름을 의미하는 것으로 프로세스에서 실행의 개념만을 분리한 개념이다.
    • 프로세스의 구성을 크게 제어의 흐름 부분(실행 단위)과 실행 환경 부분으로 나눌 때, 스레드는 프로세스의 실행 부분을 담당함으로써 실행의 기본 단위가 된다.
  • Thread 와 Process 비교

    구분 Thread Process
    상호통신 ⦁ Library Call
    ⦁ 요청 Thread만 Blocking
    ⦁ System Call
    ⦁ Call 종료 시까지 전체 자원 Blocking
    처리방식 CPU를 이용하는 기본 작업단위로 구분 자원 할당을 위한 기본 구분 단위
    부하 프로세스보다 상대적으로 부하 발생이 적음 ⦁ Context Switching으로 인한 부하 발생
    ⦁ 프로세스 자원 할당 시 부하 발생

CPU 스케줄링 (CPU 점유)

1. 프로세스 상태전이

  • 운영체제-프로세스 실행 제어, 프로세스에 대한 정보 유지를 담당
  • 프로세스 실행 결정 및 필요한 시스템 자원을 할당하는 과정
  • 프로세스의 상태 변환을 위해 OS 는 작업 스케줄러(Job Scheduler), 프로세스 스케줄러(Process Scheduler) 두 종류의 CPU 스케줄러를 사용

2. 프로세스 상태전이도(Process State Transition Diagram)

Process State Transition

이미지 출처

  • 과정
    • 프로세스가 실행되면 모든 프로세스는 준비상태의 준비 큐(FIFO)로 들어간다.
    • 준비 큐의 프로세스는 CPU 스케줄링 알고리즘에 의해서 CPU를 점유하게 되고 프로세스를 실행한다.
    • CPU에서 실행중인 프로세스가 Time out이 되면 다시 준비 큐의 뒤로 들어가고 CPU를 점유할 때까지 대기한다.
    • 만약 실행중인 프로세스가 디스크 입출력과 같은 작업이 발생하면 대기 상태가 되고 입출력을 수행한다.
    • 입출력이 완료되면 다시 프로세스는 준비상태로 들어가 대기하게 된다.
  • Active 모드에서의 프로세스 상태 변환

    상태   상태 변환 내용
    Admit 생성->준비 준비 큐가 비어있을 떄(작업 스케줄러가 담당)
    Dispatch 준비->실행 ⦁ 준비 큐에 있는 하나의 프로세스를 선택하여 CPU를 할당
    ⦁ 프로세스 스케줄러(Process Scheduler)가 담당
    Timer Run out 실행->준비 ⦁ CPU를 할당받은 프로세스가 CPU의 제한된 사용시간을 모두 쓴 경우에 발생
    ⦁ CPU 스케줄링 정책에 따라 우선순위가 높은 프로세스에게 CPU를 양보할 때, 운영 체제 자체의 CPU 서비스 요청 시 전이됨(선점)
    Blocked 실행->슬립
    (대기)
    CPU를 할당 받은 프로세스가 I/O 요구, 다른 자원요구 등 CPU 이외의 서비스 작업을 원할 때 발생
    Wake up 슬립->준비
    (대기)
    대기 중이던 사건(조건)의 처리가 끝났을 때 발생 (예:I/O 작업 완료)
    Release 실행->종료 프로세스의 정상/비정상 종료 시 발생
  • 문맥 교환(Context Switching)
    • CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정
    • 프로세스가 준비->실행, 실행->준비, 실행->대기 등으로 상태 변경될 때 발생
      • PCB (Process Control Block)
        • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳
        • 프로세스의 상태 정보를 저장하는 구조체
        • 프로세스 상태 관리와 문맥교환(Context Switching)을 위해 필요
        • PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지됨
      • PCB에서 유지되는 정보
        • PID(Process ID) : 프로세스 고유의 번호 (식별자)
        • PC(Program Counter) : 프로세스에서 다음에 실행될 명령의 주소를 가리키는 포인터
        • Process State : 준비, 대기, 실행 등의 상태
        • CPU Registers : 실행 정보를 저장하는 여러 레지스터 정보
        • Priority : 스케줄링 및 프로세스 우선순위
        • Accounting Information : CPU 사용시간, 실제 사용된 시간
        • Memory Pointers : 메모리 관리 정보
        • 입출력 상태 정보
        • 할당된 자원 정보

3. CPU 스케줄링 기법

구분 선점(Preemptive) 비선점(Non-preemptive)
개념 프로세스가 CPU 점유 중에도 다른 프로세스가 CPU 점유 가능 프로세스가 CPU를 해제할 때까지 다른 프로세스는 대기
장점 ⦁ 빠른 응답, 모바일, RTOS
⦁ 대화식 시분할 적합
⦁ 응답 시간 예상 용이
⦁ Batch Process 적합
⦁ 프로세스에 대한 요구를 공정하게 처리
단점 Overhead 발생(Context-Switching) 짧은 작업에도 장기간 대기하는 경우가 발생
스케줄링 기법 Round-robin
⦁ FCFS에 의해 프로세스들이 내보내지며 각 프로세스는 같은 크기의 CPU 시간을 할당한다.
⦁ CPU 시간이 만료될 때까지 처리를 완료하지 못하면 CPU는 대기중인 다음 프로세스로 넘어가며 실행 중이던 프로세스는 준비 완료 리스트의 가장 뒤로 보내진다.
SRT(Shortest Remaining time)
⦁ SJF와 마찬가지로 새로 도착한 프로세스를 포함하여 처리가 완료되는 데까지 가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 수행한다.
⦁ 실행 중인 프로세스라도 남은 처리 시간이 더 짧다고 판단되는 프로세스가 생기면 언제라도 실행중인 프로세스가 선점된다.
Multi Level Queue
⦁ 여러 종류의 그룹 (시스템 작업, 대화형 작업, 편집 작업, 일괄처리형 작업…) 으로 나누어 여러 개의 큐를 이용하는 스케줄링 기법이다.
⦁ 각각의 준비 큐에 넣어두고 각 큐의 독자적인 스케줄링 알고리즘에 따라서 CPU를 할당받는 방법이다.
Multi Level Feedback Queue
⦁ 입출력 위주와 CPU 위주인 프로세스의 특성에 따라 서로 다른 타임 슬라이스를 부여한다.
⦁ 새로운 프로그램이 들어오면 높은 우선순위를 할당해 주어 단계 1에서 즉시 수행하고, 점차 낮은 우선순위를 부여하며 단계 n에서는 라운드로빈으로 순환한다.
우선순위 QueueRound Robin을 모두 사용하는 Hybrid 스케줄링 기법
FCFS(First Come First Service)
⦁ 대기 큐에 도착한 순서에 따라 CPU를 할당한다.
⦁ 긴 작업이 짧은 작업을 오랫동안 기다리게 할 수 있으며, 중요하지 않은 작업이 중요한 작업을 기다리게 할 가능성이 존재한다(대화식 Real Time 시스템에는 부적합).
SJF(Shortest Job First)
⦁ 기다리고 있는 작업 중에서 수행 시간이 가장 짧다고 판단된 것을 먼저 수행한다.
⦁ 큰 작업에 대해서는 FCFS에 비해 대기시간 예측이 어렵다.

교착상태 (Deadlock) - 자원 경합

1. 상호배제 기법의 정의

  • 다수의 프로세스가 동일 자원에 접근무결성을 보장하기 위한 기법
  • 두 개 이상의 프로세스가 공유 자원에 동시에 읽기/쓰기를 못하게 하는 상호배제 매커니즘
  • 임계영역의 개념을 이용하여 두 프로세스가 하나의 고유 자원을 상호 배타적으로 사용

2. 임계영역

  • 정의
    • 공유 자원의 독점을 보장하는 코드 영역. 지정된 시간이 지난 후 종료됨
    • 임계구역에 들어가거나 나올 때는 세마포어 같은 동기화 메커니즘이 사용됨.
  • 전형적인 병행프로세스의 구조

      do {
          wait(mutex); // 진입구역
          // 임계구역
          signal(mutex); // 출구구역
          // 나머지구역
      } while()
    
    • 진입 구역 (entry section) : 임계 구역에 진입하기 위해 허용을 요구한 코드 영역
    • 출구 구역 (exit section) : 임계 구역 다음에 나오는 영역으로 임계 구역을 벗어나기 위한 코드 영역
    • 나머지 구역 (remainder section) : 프로그램의 나머지 코드 영역

3. 발생 조건

조건 세부 내용
상호배제
(Mutual Exclusion)
⦁ 프로세서들이 자원을 배타적 점유
⦁ 다른 프로세서들이 자원 사용 불가
⦁ 한 번에 한 프로세스만이 자원 사용가능
점유와 대기
(Hold and Wait)
부분 할당, 다른 종류의 자원을 부가적으로 요구하면서, 이미 어떤 자원을 점유하고 있음
비선점
(Non-preemption)
⦁ 자원들은 그들을 점유하고 있는 프로세스로부터 도중에 해제되지 않음
⦁ 프로세스들 자신이 점유한 자원을 해제할 수 있음
환형대기
(Circular Wait)
프로세스와 자원들이 원형을 이루며, 각 프로세스는 자신에게 할당된 자원을 가지면서, 상대방 프로세스의 자원을 상호 요청하는 경우

4. 대응 기법

  • 예방 : 교착상태의 필요조건을 부정

    조건 세부 내용
    점유와 대기 조건의 부정 각 프로세스는 필요한 자원들을 모두 한꺼번에 요청
    비선점 조건의 부정 ⦁ 이미 자원을 가지고 있는 프로세스 -> 자원 할당 요구 있을 시 받아들여지지 않으면 -> 보유 자원 반납
    ⦁ 반납 후 필요 자원에 대한 요구 다시 시도
    ⦁ 무기한 연기 가능성 존재
    환형대기 조건의 부정 ⦁ 모든 프로세스에게 각 자원의 유형별로 할당순서를 부여
    ⦁ 실행 중 우선순위의 변동이나 새로운 자원 추가 시 구성이 어려움
    상호 배제 조건 부정 ⦁ 상호 배제 조건은 비 공유를 전제
    ⦁ 공유 가능한 자원들은 배타적인 접근을 요구하지 않으므로 교착상태가 될 수 없음
  • 회피 : 교착상태 가능성을 배제하지 않고, 적절하게 피해 나가는 방법 (은행원 알고리즘)
    • 안전 상태(Safe State) : 시스템이 교착상태를 일으키지 않으면서 각 프로세스가 요구한 최대 요구량만큼 필요한 자원을 할당해 줄 수 있는 상태로 안전순서열이 존재하는 상태
    • 불안전 상태(Unsafe State) : 안전순서열이 존재하지 않는 상태. 교착상태는 불안전 상태에서만 발생함.
    • 안전 상태 개념을 이용하여 교착상태 회피 알고리즘 구성. 현재 가용자원을 프로세스 요청 시 바로 할당해 줄 것인지 기다리게 할 것인지를 결정하는 문제
  • 탐지 : 교착상태 발생을 허용하고, 발생 시 원인을 규명하여 해결 (자원 할당 그래프)

    기법 세부 내용
    교착상태 발견 알고리즘 ⦁ 교착상태 발생 여부를 파악하기 위하여 시스템의 상태를 검사하기 위한 알고리즘
    ⦁ 교착상태의 발생 빈도 수
    ⦁ 교착상태가 발생하였을 때 영향을 받는 프로세스의 수
    자원 할당 그래프 ⦁ 방향 그래프를 이용하여 자원의 할당사항과 요구사항을 나타내는 기법
    ⦁ 자원 할당 그래프의 소거법을 이용하여 교착상태 감지
    ⦁ 실행을 완료할 수 있는 프로세스와 교착상태에 빠진 프로세스를 결정
  • 복구 : 교착상태 발견 후 환형대기를 배제시키거나 자원을 중단하는 메모리 할당 기법

    기법 상세내용
    프로세스 중지 ⦁ 교착상태 프로세스들을 모두 중지하는 방법
    ⦁ 교착상태가 해결될 때까지 한 프로세스씩 중지
    ⦁ 희생자 선택의 원칙:최소 비용으로 중지시키는 방법을 찾아야 함
    자원 선점 ⦁ 프로세스로부터 자원들을 선점하여, 이들 자원을 교착상태가 해결될 때까지 다른 프로세스들에게 할당
    ⦁ 희생자 선정, 복귀(rollback) 문제, 기아 상태 문제 등을 고려

디스크 스케줄링

1. 디스크 개념

  • Arm : head 가 고정되어 있는 장치
  • Head : 디스크로부터 정보를 읽어들임
  • Sector : 디스크에 정보가 저장되는 최소 단위
  • Track : 연속된 sector의 공간
  • Cylinder : 수직으로 연속되는 track의 집합
  • Platter : 데이터가 저장되는 자기 디스크
  • 디스크의 주소를 찾는 과정 : 디스크 번호 -> Platter 번호 -> Track 번호 -> Sector 번호 -> 지정된 주소

2. 디스크 접근 시간

  • 탐색시간(Seek time) : 현 위치에서 특정 실린더(트랙)로 디스크 헤드가 이동하는 데 소요되는 시간
  • 회전 지연시간(Rotation delay time) : 가고자 하는 섹터가 디스크 헤드까지 도달하는 데 걸리는 시간
  • 전송시간(Transfer time) : 데이터를 전송하는 데 걸리는 시간

3. Disk Scheduling 의 종류

  • 그림 삽입
  • FCFS(First-Come First Served)
    • 가장 먼저 도착한 요청을 우선적으로 처리
    • 장점 : 개발이 용이, 공평성 유지
    • 단점 : 이동 경로가 길어짐
  • SSTF(Shortest-Seek Time First)
    • 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스함
    • 현재 Head 위치에 가까운 요청을 우선적으로 처리
    • 장점 : 전반적인 Seek time 감소
    • 단점 : Starvation 현상 발생 가능
  • SCAN(엘리베이터 알고리즘)
    • SSTF가 갖는 탐색시간의 편차를 해소하기 위한 기법
    • Head가 이동하는 방향의 모든 요청을 서비스하고, 끝까지 이동한 후 역방향의 요청을 서비스함
  • C-SCAN(Circular-SCAN)
    • 바깥쪽에서 안쪽으로 이동
    • 안쪽 방향으로 끝까지 이동을 반복
    • 끝에 도달하면 바깥쪽으로 이동하여 요청을 다시 처리
  • C-LOOK(Circular-Look)
    • C-SCAN의 보완, 대기시간을 좀 더 균형 있게 함
    • 헤드 이동 방향의 마지막 입출력 요청을 처리한 후 디스크 헤드를 처음 위치로 이동하여 다음 입출력 요청을 처리

디스크 RAID

  • RAID(Redundant Array of Independent Disk)의 개념
    • 저용량, 저성능, 저가용성인 디스크를 배열(Array) 구조로 중복 구성함으로써 고용량, 고성능, 고가용성 디스크를 대체하고자 함.
    • 데이터 분산 저장에 의한 동시 엑세스 가능, 병렬 데이터 채널에 의한 데이터 전송 시간의 단축
  • RAID 0(Stripe, Concatenate)
    • 최소 디스크 2개
    • 작은 디스크를 모아 큰 디스크로 만드는 기술
    • 데이터를 나누어 저장하지만 중복 저장하지는 않기 때문에 장애시 복구 불가
  • RAID 1(Mirroring)
    • 데이터를 완전 이중화 하여 저장(고비용)
    • 디스크 장애시 복구 가능
    • 디스크 Read 와 Write 가 병렬적으로 실행되어 속도가 빠름
  • RAID 2(Hamming Code ECC)
    • ECC(Error Correction Code)기능이 없는 디스크의 오류 복구를 위해 개발됨.
    • Hamming Code 를 이용하여 오류를 복구
    • 별도의 디스크에 복구를 위한 ECC를 저장
  • RAID 3(Parity ECC)
    • Parity 정보를 별도 Disk에 저장(Byte 단위 I/O)
    • 1개의 디스크 장애 시 Parity 를 통해 복구 가능
    • RAID 0(Stripping)으로 구성된 데이터 디스크의 입출력 성능은 향상되나, Parity 계산 및 별도 디스크 저장으로 Write 성능이 저하됨.
  • RAID 4(Parity ECC, Block 단위 I/O)
    • Parity 정보를 별도 Disk에 저장(Block 단위 I/O)
    • RAID 3와 동일
  • RAID 5(Parity ECC, Parity 분산 저장)
    • 분산 Parity를 구현하여 안정성이 향상됨.
    • 최소 3개의 디스크가 요구됨.
  • RAID 6(Parity ECC, Parity 분산 복수 저장)
    • RAID 5의 안전성 향상을 위해 Parity를 다중화하여 저장
    • 장애 디스크 복구 이전에 추가 장애 발생 시 복구가 불가한 문제를 해결
    • 장애가 발생된 상황에서 추가 디스크 장애가 발생해도 정상 동작함

댓글남기기