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)
- 과정
- 프로세스가 실행되면 모든 프로세스는 준비상태의 준비 큐(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 : 메모리 관리 정보
- 입출력 상태 정보
- 할당된 자원 정보
- PCB (Process Control Block)
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에서는 라운드로빈으로 순환한다. ⦁ 우선순위 Queue와 Round 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를 다중화하여 저장
- 장애 디스크 복구 이전에 추가 장애 발생 시 복구가 불가한 문제를 해결
- 장애가 발생된 상황에서 추가 디스크 장애가 발생해도 정상 동작함
댓글남기기