info

정보보안기사 > 필기 > 시스템 보안 > 운영체제 구조

구미청년 2022. 2. 15. 00:31

1. 운영체제(OS, Operation System)의 개요

 (1) 운영체제(Operation System)의 정의

 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.

 

 (2) 운영체제의 목적

  - 처리 능력의 향상 : 시간당 작업 처리량(Throughput), 평균 처리시간 개선

  - 신뢰성 향상 : 실패 없이 주어진 기능을 수행할 수 있는 능력

  - 응답시간의 단축 : 사용자가 시스템에 의뢰한 작업의 반응 시간 단축

  - 자원 활용률 향상 : 자원의 공유, 상호배제를 통해 자원 효율적 활용

  - 가용성 향상 : 고장과 오류가 발생해도 운영 영향 최소화

 

 (3) 운영체제의 주요 자원 관리 기능

주요 자원 관리자 상세 설명
프로세스 관리 ▶프로세스 스케줄링 및 동기화 관리
▶프로세스 생성과 제거, 시작과 정지, 메시지 전달 등의 기능
기억장치 관리 프로세스에 메모리 할당 및 회수 관리
주변장치 관리 입/출력 장치 스케줄링 및 점유 관리
파일 관리 파일의 생성과 삭제, 변경, 유지 등의 관리

 

 (4) 운영체제의 분류

분류 상세 설명 비고
Batch Processing System ▶유사한 작업을 모아 일괄처리, 긴 실행 시간 소요
▶하드웨어의 효율적 이용은 가능하나 실시간 처리 미흡











Multi Programming System ▶CPU 가동률 극대화 → 유휴 시간 최소화
▶작업들을 스케줄링에 의해 수행
▶정교한 메모리 관리 및 스케줄링 필요
Time Sharing/Multi-tasking System ▶Multi Programming의 논리적 확장
▶사용자와 시스템 간의 Interactive한 서비스
Multi-Processing System 가용성 증대를 위해 여러 개의 CPU로 다중작업을 구현한 시스템
Real-time System 시스템 서비스 요청이 발생할 때마다 시간에 제약을 두어 즉시 처리하고 결과를 출력하는 운영체제
Multi-Mode Processing 일괄처리, 시분할, 다중처리, 실시간 처리를 한 시스템에서 모두 제공하는 방식
Distributed System 독립적 운영체제가 네트워크 등을 이용해 협업

 

2. 프로세스 관리(Process Management)

1. 프로세스(Process)와 스레드(Thread)

 (1) 프로세스(Process)

  - 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등의 집합체이다.

  - 실행중인 프로세스(가장 보편적인 정의)이다.

  - 프로세서에 의해 수행되는 프로그램 단위로 현재 실행 중이거나 곧 실행 가능한 PCB(Process Control Block)를 가진 프로그램이다.

 

 (2) 스레드(Thread)

  - 제어의 흐름을 의미하는 것으로 프로세스에서 실행의 개념만을 분리한 개념이다.

  - 프로세스의 구성을 크게 제어의 흐름 부분(실행 단위)과 실행 환경 부분으로 나눌 때, 스레드는 프로세스의 실행 부분을 담당함으로써 실행의 기본 단위가 된다.

 

▶ Thread와 Process의 비교

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

 

2. 프로세스 상태

 (1) 프로세스 상태전이(Process State Transition)

  - 운영체제-프로세스 실행 제어, 프로세스에 대한 정보 유지 등을 담당한다.

  - 프로세스 실행 결정 및 필요한 시스템 자원을 할당하는 과정이다.

  - 프로세스의 상태 변환을 위해 O/S는 작업 스케줄러(Job Scheduler), 프로세스 스케줄러(Process Scheduler) 두 종류의 CPU 스케줄러를 사용한다.

 

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

 프로세스가 실행되면 모든 프로세스는 준비상태의 준비 큐(FIFO)로 들어간다. 준비 큐의 프로세스는 CPU 스케줄링 알고리즘에 의해서 CPU를 점유하게 되고 프로세스를 실행한다. CPU에서 실행 중인 프로세스가 Time out이 되면 다시 준비 큐의 뒤로 들어가고 CPU를 점유할 때까지 대기한다.

 

 만약 실행 중인 프로세스가 디스크 입출력과 같은 작업이 발생하면 대기 상태가 되고 입출력을 수행한다. 입출력이 완료되면 다시 프로세스는 준비상태로 들어가 대기하게 된다. 이렇게 프로세스가 CPU를 점유하는 과정을 프로세스 상태전이라고 한다.

 

▶Active 모드에서의 프로세스 상태 변환

상태 상태 변환 내용
Admit 생성 → 준비 준비 큐가 비어있을 때(작업 스케줄러가 담당)
Dispatch 준비 → 실행 ▶준비 큐에 있는 하나의 프로세스를 선택하여 CPU를 할당
▶프로세스 스케줄러(Process Scheduler)가 담당
Timer Run out 실행 → 준비 ▶CPU를 할당받은 프로세스가 CPU의 제한된 사용시간을 모두 쓴 경우에 발생
▶CPU 스케줄링 정책에 따라 우선순위가 높은 프로세스에게 CPU를 양보할 때, 운영 체제 자체의 CPU 서비스 요청 시 전이됨(선점)
Blocked 실행 → 슬립(대기) CPU를 할당 받은 프로세스가 I/O 요구, 다른 자원요구 등 CPU 이외의 서비스 작업을 원할 때 발생
Wake up 슬립 → 준비(대기) 대기 중이던 사건(조건)의 처리가 끝났을 때 발생(ex) I/O 작업 완료)
Release 실행 → 종료 프로세스의 정상/비정상 종료 시 발생

 

 (3) 문맥 교환(Context Switching)

  - CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정이다.

  - 프로세스가 준비 → 실행, 준비 → 준비, 실행 → 대기 등으로 상태 변경될 때 발생한다.

 

 문맥 교환은 인터럽트가 발생하였거나, 실행 중인 프로세스가 CPU 사용을 허가받은 시간(Quantum)을 모두 소모한 경우, I/O 입출력을 위해 대기해야 하는 경우에 발생한다. 선점형 스케줄러를 사용하는 운영체제는 실행 중인 프로세스보다 높은 우선순위를 가진 프로세스가 도착한 경우에도 문맥 교환이 발생한다.

 

 2개 이상의 프로그램을 주기억장치에 기억시키고, 중앙처리장치(CPU)를 번갈아 사용하면서 컴퓨터 자원을 최대로 활용하는 멀티프로그래밍(multi-programming) 환경에서 문맥교환 과정이 이루어지며, 병행처리(Concurrent Processing)를 수행한다.

 

  PCB(Process Control Block)

   - 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.

   - 프로세스 상태 관리와 문맥교환(Context Switching)을 위해 필요하다.

   - PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.

 

  PCB(Process Control Block)에서 유지되는 정보

   - PID : 프로세스 고유의 번호

   - 포인터 : 다음 실행될 프로세스의 포인터

   - 상태 : 준비, 대기, 실행 등의 상태

   - Register save area : 레지스터 관련 정보

   - Priority : 스키줄링 및 프로세스 우선순위

   - Account : CPU 사용시간, 실제 사용된 시간

   - Memory Pointers : 메모리 관리 정보

   - 입출력 상태 정보

   - 할당된 자원 정보

 

3. CPU 스케줄링(Scheduling) 기법

1. CPU 스케줄링의 개요

 (1) 스케줄링의 정의

  - 컴퓨터 자원(Resource)을 효율적으로 사용하기 위한 정책을 계획하는 것이다.

  - 특정 자원을 요청하고 있는 프로세스들을 대상으로 CPU 자원을 할당해 주는 순서를 정하는 일이다.

 

 (2) 프로세스 스케줄링의 목적

  - CPU 활용 극대화 : CPU의 유휴 시간 최소화

  - 응답시간 단축 : 프로세스 평균 응답 시간 단축

  - 공평한 자원 활용 : 주어진 기간 동안 특정 자원 사용 효율화

  - Multi-tasking 효율화 : 다중 프로세스의 공평한 처리

 

 (3) 스케줄러 역할에 의한 구분

구분 세부 내용
장기 스케줄러 ▶상위(High level, term) 스케줄링, 작업 스케줄링(Job 스케줄링)
▶어떤 작업이 시스템의 자원들을 차지할 것인지 결정(큐에 적재)
중기 스케줄러 ▶어떤 프로세스들이 CPU를 할당받을 것인지 결정
▶CPU를 사용하려는 프로세스 간 중재하여 일시 보류 & 재활성화
단기 스케줄러 ▶하위 스케줄링, CPU 스케줄링, 프로세스 스케줄링이라고도 함
▶CPU 스케줄러인 Dispatcher에 의해 동작됨(프로세스에 CPU 할당)

 

 (4) 스케줄러의 점유 방식에 의한 구분

구분 선점(Preemptive) 비선점(Non-preemptive)
개념 프로세스가 CPU 점유 중에도 다른 프로세스가 CPU 점유 가능 프로세스가 CPU를 해제할 때까지 다른 프로세스는 대기
장점 ▶빠른 응답,모바일, RTOS
▶대화식 시분할 적합
▶응답 시간 예상 용이
▶Batch Process 적합
▶프로세스에 대한 요구를 공정하게 처리
단점 Overhead 발생(Context-Switching) 짧은 작업에도 장기간 대기하는 경우가 발생
스케줄링 기법 Round-robin, SRT FCFS, SJF, HRN

 

2. CPU 스케줄링의 기법

 (1) FCFD(First Come First Service)

  - 대기 큐에 도착한 순서에 따라 CPU를 할당한다.

  - 일단 프로세스가 CPU를 차지하면 완료될 때까지 수행한다.

  - 긴 작업이 짧은 작업을 오랫동안 기다리게 할 수 있으며, 중요하지 않은 작업이 중요한 작업을 기다리게 할 가능성이 존재한다.(대화식 Real Time 시스템에는 부적합).

  - 비선점형 스케줄링 기법이다.

 

 (2) SJF(Shortest Job First) 스케줄링

  - 기다리고 있는 작업 중에서 수행 시간이 가장 짧다고 판단된 것을 먼저 수행한다.

  - FCFS보다 평균 대기시간을 감소시키는 반면, 큰 작업에 대해서는 FCFS에 비해 대기시간 예측이 어렵다.

  - 비선점형 스케줄링 기법이다.

 

 (3) 라운드 로빈(Round Robin) 스케줄링

  - FCFS에 의해서 프로세스들이 내보내지며 각 프로세스는 같은 크기의 CPU 시간을 할당한다.

  - CPU 시간이 만료될 때까지 처리를 완료하지 못하면 CPU는 대기중인 다음 프로세스로 넘어가며(Preemptive), 실행 중이던 프로세스는 준비 완료 리스트의 가장 뒤로 보내진다.

  - 선점형 스케줄링 기법이다.

 

 (4) SRT(Shortest Remaining Time) 스케줄링

  - SJF와 마찬가지로 새로 도착한 프로세스를 포함하여 처리가 완료되는 데까지 가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 수행한다.

  - 실행 중인 프로세스라도 남은 처리 시간이 더 짧다고 판단되는 프로세스가 생기면 언제라도 실행중인 프로세스가 선점된다.

  - SJF 방식에 선점 방식을 도입하였으며 실시간 시스템에 유리하다.

 

 (5) Multi Level Queue

  - 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 스케줄링 기법이다.

  - 그룹화된 작업들은 각각의 준비 큐에 넣어두고 각 큐의 독자적인 스케줄링 알고리즘에 따라서 CPU를 할당받는 방법이다.

 

 (6) Multi Level Feedback Queue

  - 입출력 위주와 CPU 위주인 프로세스의 특성에 따라 서로 다른 타임 슬라이스를 부여한다.

  - 새로운 프로그램이 들어오면 높은 우선순위를 할당해 주어 단계 1에서 즉시 수행하고, 점차 낮은 우선순위를 부여하며 단계가 n쯤 되는 나중에는 그 작업이 완료될 때까지 라운드로빈으로 순환한다.

  - Multi Level Feedback Queue는 비선점 기법인 우선순위 Queue와 Round Robin을 모두 사용하므로 Hybrid 스케줄링 기법이다.

 

4. 병행성 제어(Concurrency Control)

1. 상호배제(Mutual Exclusion Techniques)

 (1) 상호배제 기법의 정의

  - 다수의 프로세스가 동일 자원에 접근 시 무결성을 보장하기 위한 기법이다.

  - 두 개 이상의 프로세스가 공유 자원에 동시에 읽기/쓰기를 못하게 하는 상호배제 메커니즘이다.

  - 임계영역의 개념을 이용하여 두 프로세스가 하나의 공유 자원을 상호 배타적으로 사용하는 기법이다.

 

2. 임계영역(Critical Section)

 (1) 임계영역의 정의

  - 임계영역(Critical Section)이란 한순간에 반드시 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미한다. 임계 구역은 지정된 시간이 지난 후 종료된다.

  - 병렬컴퓨팅(Parallel Computing)에서 둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 자원(자료 구조 또는 장치)에 접근하는 코드의 일부로도 쓰인다.

  - 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올 때는 세마포어 같은 동기화 메커니즘이 사용된다.

  - lock()과 unlock()의 사이

 

 (2) 임계영역을 고려한 전형적인 병행프로세스의 구조

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

 

3. 세마포어(Semaphore), 모니터(Monitor)

 (1) 세마포어(Semaphore) 상호배제 구현 기법

wait(S):
    S.count--:
    if (S.count < 0) {
        block this process
        place this process in S.queue
    }

signal[S]:
    S.count++:
    if (S.count = 0) {
        remove a process P from S.queue
        place this process P on ready list
    }
▶운영체제가 제공하는 자원으로 세마포어 S는 정수값을 가지는 변수로서 초기화 및 두 개의 연산(P, V 혹은 wait와 signal)으로만 접근 가능한 특수한 변수를 이용하여 상호배제 구현
▶세마포어에는 0과 1의 값만을 갖는 이진(Binary) 세마포어와 0 또는 정수값도 갖는 계수형(Counting) 세마포어가 있음

 

 (2) 모니터(Monitor) 상호배제 구현 기법

  - 상호배제 구현을 위해 별도의 프로그램을 작성할 필요가 없으며, 공유 자원을 모니터 내부의 지역 변수로 정의하여 상호배제를 구현한다.

  - 모니터(Monitor)는 High Level Language를 지원한다.

  - 지역 변수는 모니터 내의 함수(프로시저)에서만 접근할 수 있다.

  - 프로세스는 모니터의 프로시저 호출을 통해 모니터에 진입할 수 있다.

  - 언제나 단지 하나의 프로세스만이 모니터 내부에 존재한다.

 

4. 교착상태(Dead Lock)

 (1) 교착상태(Dead Lock)의 개념

  - 교착상태(Dead Lock)란 하나 또는 둘 이상의 프로세스가 더 이상 계속할 수 없는 어떤 특정 사건을 기다리고 있는 상태를 말한다.

  - 특정 사건이란 자원의 할당과 해제를 의미하며, 둘 이상의 서로 다른 프로세스가 자신이 요구한 자원을 할당받아 점유하고 있으면서 상호 간에 상대방 프로세스에 할당되어 있는 자원을 요구하는 경우를 말한다.

 

 (2) 교착상태 발생조건

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

 

5. 교착상태 대응 방법

 (1) 교착상태 예방(Prevention)

  ▶교착상태 예방조건

조건 세부 내용
점유와 대기 조건의 부정 각 프로세스는 필요한 자원들을 모두 한꺼번에 요청
비선점 조건의 부정 ▶이미 자원을 가지고 있는 프로세스 → 자원 할당 요구 있을 시 받아들여지지 않으면 → 보유 자원 반납
▶반납 후 필요 자원에 대한 요구 다시 시도
▶무기한 연기 가능성 존재
환형대기 조건의 부정 ▶모든 프로세스에게 각 자원의 유형별로 할당순서를 부여
▶실행 중 우선순위의 변동이나 새로운 자원 추가 시 구성이 어려움
상호 배제 조건 부정 ▶상호 배제 조건은 비 공유를 전제
▶공유 가능한 자원들은 배타적인 접근을 요구하지 않으므로 교착상태가 될 수 없음

 

 (2) 교착상태 회피(Avoidance)

  1) 은행원 알고리즘(Banker's Algorithm)

   - 안전 상태(Safe State) : 시스템이 교착상태를 일으키지 않으면서 각 프로세스가 요구한 최대 요구량만큼 필요한 자원을 할당해 줄 수 있는 상태로 안전순서열이 존재하는 상태를 말한다.

  - 불안전 상태(Unsafe State) : 안전순서열이 존재하지 않는 상태를 말한다. 불안전 상태는 교착상태이기 위한 필요조건이다. 교착상태는 불안전 상태에서만 발생한다.

  - 안전 상태 개념을 이용하여 교착상태 회피 알고리즘 구성이 가능하며, 현재 가용자원을 프로세스 요청 시 바로 할당해 줄 것인지 기다리게 할 것인지를 결정하는 문제라고 볼 수 있다.

 

 (3) 교착상태 발견(detection)

  ▶ 교착상태 발견 기법

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

  ▶ 자원 할당 그래프(Resource Allocation graph)의 예

교착상태가 있는 자원 할당 그래프 교착상태가 아닌 자원 할당 그래프
? ?
두 개의 주기(Cycle)가 존재 → 교착상태
1. P1 → R1 → P2 → R3 → P3 →R2 → P1
2. P2 → R3 → P3 → R2 → P2
P1 → R1 →P3 → R2 → P1
그러나 P4가 R2를 해제하면 P3가 R2를 사용할 수 있다.
따라서 교착상태가 아니다.

 

 (4) 교착상태 회복(recovery)

  ▶ 교착상태 회복 기법

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

  ▶ 교착상태 해결 방안

구분 세부 내용
교착상태 예방(Prevention) 교착상태의 필요조건을 부정함으로써 교착상태가 발생하지 않도록 미리 예방하는 방법 (ex) 환형대기, 비선점, 점유와 대기, 상호배제 4가지 부정)
교착상태 회피(Avoidance) 교착상태 가능성을 배제하지 않고, 적정하게 피해 나가는 방법 (ex) 은행원 알고리즘)
교착상태 탐지(Detection) 교착상태 발생을 허용하고, 발생 시 원인을 규명하여 해결하는 방법 (ex) 자원 할당 그래프)
교착상태 복구(Recovery) 교착상태 발견 후 환형대기를 배제시키거나 자원을 중단하는 메모리 할당 기법 (ex) 선점, 프로세스 중지(희생자 선택))

 

5. 장치 관리 방법

1. 디스크 관리(Disk Management)

 (1) 디스크 관리의 개념

 디스크는 가장 많이 사용하는 보조기억장치 중 하나로 마치 레코드판을 여러 개 중첩해서 놓은 것과 비슷하다. 레코드판은 노래를 청취할 때 순서대로 청취해야 하지만, 디스크는 헤드(Head)가 임의의 섹터(Sector)를 랜덤(Random)하게 참조할 수 있고 빠르게 데이터를 읽을 수 있으며, 주기억장치보다 많은 양의 데이터를 저장할 수 있다.

 

 ㅇ Arm assembly : arm을 지지하는 축

 ㅇ Spindle : platter 중앙에 회전 전달. RPM으로 속도 측정, 액세스타임과 관련

 ㅇ Arm : head가 고정되어 있는 장치

 ㅇ Head : 디스크로부터 정보를 읽어 들임

 ㅇ Sector : 디스크에 정보가 저장되는 최소 단위

 ㅇ Track : 연속된 sector의 공간

 ㅇ Cylinder : 수직으로 연속되는 track의 집합

 ㅇ Platter : 데이터가 저장되는 자기 디스크

 ㅇ 디스크의 주소를 찾는 과정 : 디스크 번호 → platter 번호 → track 번호 → sector 번호 → 지정된 주소

 

 (2) 디스크 접근 시간

Disk 접근 시간 세부 내용
탐색시간(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의 보완, 대기시간을 좀 더 균형 있게 함

    ㅇ 헤드 이동 방향의 마지막 입출력 요청을 처리한 후 디스크 헤드를 처음 위치로 이동하여 다음 입출력 요청을 처리

 

2. 파일 시스템(File System)

 운영체제의 중요한 기능 중 하나로 사용자가 생성한 파일을 저장소(ex) 디스크)에 어떻게 저장하고 관리할 것인지를 결정하는 것이다. 윈도우에서 파일 시스템을 확인할 수 있는 것은 바로 윈도우 탐색기이다. 즉, 탐색기는 C:\폴더 아래에 여러 개의 폴더로 이루어지는 계층형(Tree 형태) 구조를 이루고 있다. 이러한 파일 시스템은 과거 DOS에서 사용한 FAT부터 윈도우의 NTFS, 유닉스의 UFS 등이 존재한다.

 

 (1) FAT(File Allocation Table)

  1) FAT16(File Allocation Table)

   - 대부분의 Microsoft 운영체제에서 호환되며 단순한 구조이다.

   - 최대 2GB까지만 지원한다.

   - 암호화 및 압축이 불가능(접근 제어 불가)하다.

   - 파일명 최대 길이는 영문 8자이다.

   - 클러스탕 1,632KB를 할당하여 내부 단편화가 발생한다.

 

  2) FAT32(File Allocation Table)

   - FAT16을 보강한 것으로, 최대 2TB까지 지원한다.

   - 암호화 및 압축이 불가능(접근 제어 불가)하다.

   - 파일명의 최대 길이는 영문 256자이다.

   - 클러스터당 4KB 사용하여 내부 단편화를 줄였다.

 

 (2) NTFS(New Technology File System)

   - 암호화 및 압축을 지원하며, 대용량 파일 시스템을 지원한다.

   - 가변 클러스터 크기(512 ~ 64KB)이며, 기본값은 4KB이다.

   - 트랜잭션 로깅을 통한 복구/오류 수정이 가능하다.

   - Windows NT 이상에서 지원한다.

 

 (3) EXT(Extended File System)

  1) EXT(Extended File System)

   - MINIX File System을 보완하여, 최대 2GB까지 파일 시스템 크기를 지원한다.

   - 255byte까지 파일명을 지원한다.

   - 접근 제어, inode 수정, 타임스탬프 수정 등의 기능이 불가능하다.

   - 사용할수록 단편화가 심해진다.

 

  2) EXT2(Second Extended File System)

   - 파일 시스템은 2GB까지, 볼륨 크기는 32TB까지 지원되며, 서브 디렉터리 개수 제한이 대폭 증가(32,768개)하였다.

   - FSCK를 사용한 파일 시스템 오류 수정을 지원한다.

   - 캐시의 데이터를 디스크에 저장 중 오류 발생 시 파일 시스템에 손상이 올 수 있다.(Sync 이전 데이터 손실).

   - FSCK 이용한 파일 복구 시간에 많은 시간이 소요된다(전체 섹터 검사해야 됨).

 

  3) EXT3(Third Extended File System)

   - EXT2에 저널링 기능 추가 및 온라인 파일 시스템이 증대됐다.

   - 파일 시스템 변경 시 저널에 먼저 수정 내용을 기록한다(갑작스런 다운 시 빠르게 오류 복구).

   - 온라인 조각 모음이 불필요하다(장시간 사용 시 조각화 발생).

   - 디스크 조각화를 최소화한다.

 

  4) EXT4(Fourth Extended File System)

   - 16TB까지 파일 시스템을 지원하며, 볼륨은 1엑사바이트(Exabyte)까지 지원한다.

   - Block Mapping 방식 및 Extends 방식을 지원한다.

   - 저널 Checksum 기능이 추가되어 안전성이 강화되었다.

   - 하위 호환성 지원 : ext3, ext2와 호환 기능

   - Delayed allocation : 디스크에 쓰이기 전까지 블록 할당을 미루는 기술로 조각화 방지에 효과적

   - 온라인 조각 모음 : 조각화 방지를 위한 커널 레벨의 기술

   - Persistent pre-allocation : 파일 전체만큼의 공간을 사전 할당. 스트리밍, 데이터베이스 등에 유용

 

 (4) UFS(Unix File System)의 구조

구성 항목 세부 내용
VTOC 디스크 레이블 각 파티션의 기본 정보
부트블록 부트스트랩에 필요한 파일들
프라이머리 슈퍼블록 데이터 블록의 개수, 실린더 그룹의 개수, 마운트 정보
백업 슈퍼블록 각 실린더마다 슈퍼블록에 대한 복사본을 가짐
실린더 그룹 슈퍼블록, 실린더 그룹 블록, i-node 테이블, 데이터 블록을 포함
슈퍼블록 파일 시스템 크기, i-node 테이블의 크기, free 블록 리스트 등 파일 시스템 관리 정보
실린더 그룹 블록 실린더 그룹 내의 유효 블록들의 비트맵 정보나 통계 정보
i-node 테이블 파일에 대한 중요한 정보, 파일 크기, 위치, 유형, 사용 허가권, 날짜 정보
데이터 블록 실제 데이터가 저장되는 공간

 

3. RAID

 RAID는 디스크 고장 시 그대로 복구할 수 있도록 2개 이상의 디스크에 데이터를 저장하는 기술이다. 즉, RAID를 통해서 디스크의 기계적인 장애로부터 사용자의 데이터를 안정적으로 지킬 수 있다.

 

 (1) RAID(Redundant Array of Independent Disks)의 개념

  - RAID 기법은 저용량, 저성능, 저가용성인 디스크를 배열(Array) 구조로 중복 구성함으로써 고용량, 고성능, 고가용성 디스크르 대체하고자 한다.

  - 데이터 분산 저장에 의한 동시 액세스가 가능하며, 병렬 데이터 채널에 의한 데이터 전송 시간이 단축되는 장점이 있다.

 

 (2) RAID 0(Stripe, Concatenate)

  - 최소 2개의 디스크로 구성된다.

  - 작은 디스크를 모아 하나의 큰 디스크로 만드는 기술로 장애 대응이나 복구 기능은 별도로 구성된다.

  - Disk Striping은 데이터를 나누어 저장하지만 중복 저장하지는 않기 때문에 디스크 장애 발생 시 복구할 수 없다.

 

 (3) RAID 1(Mirroring)

 Disk Mirroring은 여러 디스크에 데이터를 완전 이중화하여 저장하는 방식으로, RAID에서 가장 좋은 방식이지만 비용이 많이 발생한다. Disk Mirroring 방식은 디스크 장애 시에 복구도 가능하고 디스크 Read와 Write가 병렬적으로 실행되어서 속도가 빠른 장점을 가진다.

 

 (4) RAID 2(Hamming Code ECC)

  - ECC(Error Correction Code) 기능이 없는 디스크의 오류 복구를 위하여 개발되었다.

  - Hamming Code를 이용하여 오류를 복구한다.

  - RAID 2는 별도의 디스크에 복구를 위한 ECC를 저장하는 것을 말한다. 아래 그림에서 A1 디스크가 장애로 접근이 불가능한 경우가 발생했다고 가정해 보자. 이 경우 기존에 A0, A1, A2, A3 디스크의 정보로 생성된 ECC 값인 Ax, Ay, Az 값을 통해 A1의 값을 재생성해 낼 수 있다.

 

 (5) RAID 3(Parity ECC)

  - Parity 정보를 별도 Disk에 저장(Byte 단위 I/O)한다.

  - 1개의 디스크 장애 시 Parity를 통해 복구 가능하다.

  - RAID 0(Stripping)으로 구성된 데이터 디스크의 입출력 성능은 향상되나, Parity 계산 및 별도 디스크 저장으로 Write 성능이 저하된다.

  - 1개 디스크의 오류에도 장애 복구 가능하다. 컨트롤러 Layer에서 오류 디스크 격리 및 Hot Spare Disk를 이용해 데이터를 복구한다.

 

 (6) RAID 4(Parity ECC, Block 단위 I/O)

  - Parity 정보를 별도 Disk에 저장한다.

  - 데이터는 Block 단위로 데이터 디스크에 분산 저장한다.

  - 1개의 디스크 장애 시 Parity를 통해 복구 가능하다.

  - RAID 0(Stripping)으로 구성된 데이터 디스크의 입출력 성능은 향상되나, Parity 계산 및 별도 디스크 저장으로 Write 성능이 저하된다.

  - 1개 디스크의 오류에도 장애 복구가 가능하다. 컨트롤러 layer에서 오류 디스크 격리 및 Hot Spare Disk를 이용해 데이터를 복구한다.

  - RAID 4는 RAID 3와 동일하나 Parity를 Block 단위로 관리하는 것만 차이가 있다.

 

 (7) RAID 5(Parity ECC, Parity 분산 저장)

  - 분산 Parity를 구현하여 안정성이 향상되었다.

  - 최소 3개의 디스크가 요구된다(일반적으로는 4개로 구성).

 

 (8) RAID 6(Parity ECC, Parity 분산 복수 저장)

  - 분산 Parity가 적용된 RAID 5 안전성 향상을 위해 Parity를 다중화하여 저장한다.

  - 대용량 시스템에서 장애 디스크가 복구되기 이전에 추가적인 장애가 발생되면 복구가 불가한 문제를 해결하기 위해 개발되었다.

  - 장애가 발생된 상황에서 추가적인 디스크 장애가 발생해도 정상 동작한다.