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 은행원 알고리즘)
발견(탐지) : 교착 상태가 발생하면, 교착 상태의 프로세스와 자원을 발견하도록 함
회복(복구) : 교착 상태를 일으킨 프로세스를 종료하여 할당된 자원을 회수 하도록 함