2016년 6월 28일 화요일

시스템 보안 - 운영체제

ㅇ ㅂㅇ

1. 운영체제
(1). 운영체제
 1) 운영체제 개요
  - 운영체제
   -- 시스템 자원을 효율적으로 사용하게 하며, 사용자와 컴퓨터 간의 인터페이스 역할을 함
 2) 운영체제의 구조 (5단계)
  - 1계층 : 프로세서 관리 - 동기화 및 프로세서 스케쥴링
  - 2계층 : 메모리 관리   - 메모리 할당 및 회수
  - 3계층 : 프로세스 관리 - 프로세스 생성, 제거 등
  - 4계층 : 주변장치 관리 - 주변장치 상태 파악
  - 5계층 : 파일 관리    - 파일의 생성과 소멸, 파일의 열기와 닫기 등

-> 프로세스 : 실행 중인 프로그램, 데이터의 입/출력을 조작, 처리함
-> 프로세서 : 컴퓨터 시스템 전체를 하나의 프로세서로 볼 수 있으며, 어떤 특정의 기능 * 처리를 하는 소프트웨어를 지칭하기도 하며, 처리 * 가공하는 기능을 가진 하드웨어, 소프트웨어를 지칭함

 3) 운영체제의 기술발전 흐름
  - 1세대 : 일괄 처리 시스템(Batch Processing System)
  - 2세대 : 다중 프로그램 시스템(Multi-Programming System)
  - 3세대 : 다중 모드 처리(Multi-Mode Processing)
  - 4세대 : 분산처리 시스템(Distributed Processing System)

  - 운영체제 개발 이전
   > 프로그래머가 직접 수작업으로 진행
   > 제어가 모니터에서 출발하여, 모니터로 복귀함

  - 1세대 : 일괄 처리 시스템 (Batch Processing System)
   > 초기 컴퓨터 방식으로, 데이터를 모아 한꺼번에 처리하는 방식
    - 일괄 처리를 위한 적절한 작업 제어 언어를 제공
    - 컴퓨터 시스템을 효율적으로 사용 가능
    - CPU 유휴 시간 단축
    - 반환 시간 증가

  - 2세대 : 다중 프로그램 시스템 (Multi-Programming System)
    -- I/O 장치와 CPU 사이의 속도 차이를 이용하여, 하나의 CPU 와 주 기억장치로 여러 프로그램을 동시에 처리하는 방식
    -- I/O 장치의 조작으로 CPU 유휴시간이 발생하면, 다른 작업을 처리함
   > 시분할 시스템(Time Sharing System)
    - 라운드로빈(Round Robin ; RR) 방식이라고도 함
   > 다중처리 시스템(Multi-Processing System)
    - 여러 개의 CPU와 하나의 주 기억 장치를 이용해, 여러 프로그램(프로세스)을 동시에 처리하는 방식

  - 3세대 : 다중 모드 처리(Multi-Mode Processing)
    -- 일괄처리 시스템, 시분할 시스템, 다중처리 시스템, 실시간 처리 시스템을 모두 제공하는 시스템

  - 4세대 : 분산처리 시스템(Distributed Processing System)
   -- 여러 개의 컴퓨터(프로세서)를 통신회선으로 연결해서 하나의 작업을 처리하는 방식
   -- 각 단말장치나 컴퓨터들은 고유의 운영체제와 CPU, 메모리를 가지고 있음

-> 라운드로빈(RR ; Round Robin) : 시간 할당량(Time Quantum)을 설정하여 그 이상의 작업은 대기큐로 보내며, 모든 작업을 순서대로 동작함
-> 다중처리(Multi-Processing) : 여러 개의 프로세스를 사용하는 방식
-> Multi-Tasking : 여러 프로그램을 같은 시간에 띄우는 시분할 방식
-> Multi-Threading : 하나의 프로세스에 다수의 스레드를 사용하는 방식

(2). 운영체제의 주요 구성 기술
 1). 프로세스 관리
  - 프로세스와 스레드의 개념
  프로세스(Process)
   - 다중 처리시스템(Multi-Processing System) 내에서 실행되는 프로그램
   - 리소스(Resource)와 스레드(Thread)로 구성
   - 모든 프로세스는 하나 이상(하나의 main thread)의 스레드를 갖고 있음
   - 스케쥴링의 대상이 되는 작업(Task)와 거의 같은 의미

  스레드(Thread)
   - 프로세스 내에서 실제 작업을 수행함
   - 다중 스레드(Multi-thread)가 지원되는 시스템에서는 하나의 프로세스에 여러 개의 스레드가 지원됨
   - 컴퓨터 프로그램(프로세스)의 수행 시 프로세스 내부에 존재하는 수행 경로(실행코드)
   - 프로세스 생성 시 하나의 주 스레드가 생성되어 작업을 처리, 스레드 종료시 프로세스 종료

 - 프로세스 제어 블록(PCB ; Process Control Block)
  -- 운영체제가 프로세스에 대한 정보를 저장해 놓은 저장소
  -- 다른 프로세스로 제어를 넘겨 줄 때(Context-Switching), 현재 실행 중 인 프로세스의 정보를 PCB에 저장하고 넘김
  -- 각 프로세스가 생성 될 때 마다 PCB가 생성, 종료되면 제거 됨
  -- 부모, 자식 프로세스는 PCB를 공유하지 않음

 - 프로세스 구성 요소
  프로세스 (Process)
   - Code, Data, Heap, Stack 영역으로 이루어져 있음
   - 각각의 Memory 공간을 차지함
   - Context Switching 시 보존할 정보가 많아 시간이 오래 걸림

  스레드 (Thread)
   - 프로세스 안에서 동작하며, Code, Data, Heap 영역을 프로세스와 공유하고 별도의 Stack 만 차지
   - Context Switching 시 Stack 영역만 Switching 하게 되므로, 프로세스 Switching 보다 빠름 -> 연달아 있는 복수의 작업을 실행하는 경우 프로세스 보다는 스레드가 좋음
   - 스레드 간 자원 공유가 가능하여 편리하지만, 자원 동기화의 문제가 있음

   > 스레드의 장/단점
    -- 장점
      - 시스템의 Throughput(처리량)이 향상 됨
      - 자원(Resource)의 소모 감소
      - 응답 시간의 단축
    -- 단점
      - 다른 프로세스에서 스레드를 제어 할 수 없음
      - 여러 개의 스레드를 사용 할 때는 자원 공유의 문제가 발생 할 수 있으므로 신중하게 사용 해야 함
      - 디버깅(Debuging)이 어려워짐




      * Code 영역 : 프로그램 코드(Code or Text)
        Data 영역 : 전역 변수들을 저장
        Heap 영역 : 동적 메모리 할당 영역
        Stack 영역 : 지역 변수 및 함수의 매개 변수 저장

-> PCB 내용
 - 프로세스 번호(PID)
 - 프로세스 상태(State)
 - CPU 레지스터
 - CPU 스케쥴 정보, 우선 순위, 스케쥴 큐의 포인터 등
 - 기억 장치 관리 번호
 - 계정(Accounting) 정보 : CPU가 사용된 양, 계정 번호, 프로세스 등
 - I/O 상태 정보 : 입출력 요구, 입출력 장치, 개방 파일의 목록 등

 - 프로세스 상태와 전이
  -- 프로세스 상태 : 생성(New) / 준비(Ready) / 실행(Run) / 대기(Wait) / 종료(Exit)
  -- 프로세스 상태의 전이 : Dispatch(준비 -> 실행) / Time Runout(실행 -> 준비) / Block(실행 -> 대기) / Wake up(대기 -> 실행)



  * 생성(New) : 프로세스가 생성 이후 운영 체제에 의해 실행 가능하게 되지 못한 상태
  * 준비(Ready) : 프로세스가 실행을 위해 CPU(Process)를 할당 받기를 기다리는 상태
  * 실행(Run) : 프로세스가 CPU(Process)를 할당 받아 실행되는 상태
  * 종료(Exit) : 프로세스의 실행이 완전히 끝나고 CPU 할당이 해제된 상태
  * 대기(Wait) : 프로세스가 CPU를 할당 받아 실행되다가 어떤 사건이 발생(예 : 입출력 작업의 완료)할 때 까지 멈추어 있는 상태

 - 프로세스 스케쥴링 -- 효율적인 CPU 사용을 위함
  -- 선점형 스케쥴링 정책 (Preemptive Scheduling Policy) : 작업 처리 도중 자원을 가로 채서 새로운 작업 처리 가능
   - SJF(Shortest Job First ; 최단 작업 우선 처리)
   - SRT(Shortest Remaining Time First ; 최단 잔여 시간 우선 처리)
   - RR(Round Robin ; 순환 할당 스케쥴링) : 시분할에 주로 쓰임
   - MLQ(Multi Level Queue ; 다단계 큐)
   - MFQ(Multi Level Feedback Queue ; 다단계 피드백 큐)
 -- 비 선점형 스케쥴링 정책(Non-Preemptive Scheduling Policy) : 한 작업이 처리 중이라면 새로운 작업 불가(진행 중인 작업을 모두 완료해야 함)
   - SJF(Shortest Job First ; 최단 작업 우선 처리) : 선점/비선점에서 모두 사용
   - FIFO(First In First Out ; 선입 선출)
   - FCFS(First Come First Service ; 선입 선출)
   - HRN(Highest Response Ratio Next) : CPU 할당 받을 시간과 기다린 시간을 계산한 값을 이용한 우선 순위로 결정 (우선 순위가 큰 것 부터 먼저 실행)
    -> 우선순위 계산 방법
     우선 순위  = (Estimated_Run_Time[실행시간]+Waiting_Time[대기시간]) / Estimated_Run_Time[실행시간]
   
  HRN Scheduling Ex)

프로세스
도착시간
실행시간
P1
0
4
P2
2
8
P3
4
5
P4
5
6
P5
6
3

 우선  0초에 P1이 실행되어 P1은 0~4초간 실행되어 4초에 종료되며, 현재 4초인 상태에서 큐에는 P2, P3(도착시간 4초 이하)가 들어와있습니다.
 여기서 P2와 P3의 우선 순위를 계산하여 먼저 실행 할 것을 결정합니다.
  P2의 대기 시간은 2초 만에 도착하였기에, 현재 4초에 2초를 제하여 대기시간은 2초로 계산되며 우선 순위 계산은 P2 = 2[대기시간]+8[실행시간] / 8[실행시간] = 1.25 로 계산 되며
  P3의 대기시간은 4초 만에 도착하였기에, 현재 4초에서 4초를 제하여 대기시간은 0초로 계산되며 우선 순위 계산은 P3 = 0[대기시간]+5[실행시간] / 5[실행시간] = 1 로 계산되어집니다. 그리하여 우선순위의 값이 더 큰 P2가 먼저 실행되어집니다.
 P2가 실행 완료 된 이후 현재 12초로 모든(P3,P4,P5) 프로세스가 도착하여 큐에서 대기 중 입니다. 위와 같은 계산으로 P3, P4, P5의 우선 순위를 계산하여
 P3 = 8+5 / 5 = 2.6
 P4 = 7+6 / 6 = 2.16..
 P5 = 6+3 / 3 = 3
 우선 순위가 제일 높은 P5 먼저 실행되며, 15초에 종료되며, 또 계산하여
 P3 = 11+5 / 5 = 3.2
 P4 = 10+6 / 6 = 2.66..
 우선 순위가 높은 P3이 실행되며, 20초에 종료됩니다.
 마지막으로 남은 P4가 실행되며 23초에 모든 프로세스가 종료 됩니다.
실행 순서는 P1-P2-P5-P3-P4가 됩니다.

 - 프로세스 교착 상태(Deadlock)
  - 발생 조건
   > 상호배제(Mutual exclusion) : 한 프로세스가 자원을 다른 프로세스가 사용 못하게 배제 할 경우
   > 점유와 대기(Block & Wait) : 프로세스가 어떤 자원을 할당받아 점유 중인데도 다른 자원을 요구할 경우
   > 비선점(비 중단 조건 ; Non Preemption) : 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없으며, 점유하고 있는 프로세스 자신만이 해제 가능
  > 환형대기 (Circular wait) : 프로세스 간 자원요구가 하나의 원형을 구성 (상호배제 조건이 환형을 이루는 경우)

  - 해결 방안
   예방 : 교착 상태의 필요조건을 부정함으로써, 교착 상태가 발생하지 않도록 함
   회피 : 교착 상태의 가능성을 인정하고, 발생하는 경우를 적절하게 피함(Ex 은행원 알고리즘)
   발견(탐지) : 교착 상태가 발생하면, 교착 상태의 프로세스와 자원을 발견하도록 함
   회복(복구) : 교착 상태를 일으킨 프로세스를 종료하여 할당된 자원을 회수 하도록 함