[Computer Science] 운영체제

728x90
반응형
SMALL

# 운영체제

 

 

시스템의 자원(cpu, memory...)과 동작을 관리하는 소프트웨어

프로세스, 저장장치, 네트워킹, 사용자, 하드웨어를 관리

 

 

 


## 프로세스

 

실행 중인 프로그램

프로세스는 메모리와 CPU를 프로세스마다 각각 할당받아 사용한다.

 

프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.

또한, 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

 

 

 


##스레드

 

프로세스 내부에서 동작되는 여러 실행의 흐름

스레드는 프로세스 내부에서 다른 스레드와 Code, Data, Heap을 공유한다.

 

각각의 스레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.

 

 

 


## 저장장치

 

 

 

일반적으로 RAM을 의미

 

사용자가 특정 프로그램 실행을 OS에 요청하면,

OS는 HDD에서 해당 프로그램 정보를 읽어 메모리에 로드한다.

 

메모리에 로드된 프로그램 코드는 CPU에 의해 실행되고 관리된다.

 

 

 


## 메모리 공간

 

 

Code 영역

 

우리가 작성한 소스코드가 들어가는 영역이다.

 

 

 

Data 영역

 

전역 변수 및 static 정적 변수가 할당되는 영역이다.

프로그램의 시작과 동시에 할당되고, 프로그램 종료 시 메모리가 소멸된다.

 

 

 

Heap 영역

 

사용자가 직접 할당/해제 즉, 관리하는 영역이다.

런타임 시점에 데이터가 동적으로 할당되는 공간이다.

 

Java에서는 GC가 자동으로 해제해준다.

 

https://hoooon-s.tistory.com/78?category=1069857 

 

[Garbage Collector] GC란 무엇인가?

Garbage Collector 정리되지 않은 메모리, 유효하지 않은 메모리 주소, 주소를 잃어버려 사용할 수 없는 메모리 등의 가비지를 메모리에서 해제시켜 다른 용도로 사용할 수 있게 해주는 프로그램 Stop

hoooon-s.tistory.com

 

 

 

Stack 영역

 

컴파일 시점에 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

 

함수 호출 시 생성되는 지역 변수, 매개 변수가 저장되고,

함수 호출이 완료되면 사라진다.

 

 

 

Heap vs Stack

 

 

Heap과 Stack은 실제론 같은 공간(Free Store)을 공유하고 있다.

Heap은 Free Store의 위쪽 공간부터 사용하고, Stack은 아래쪽 공간부터 사용한다.

 

같은 공간을 사용하기에 서로의 공간을 침범하는 일이 발생할 수 있는데,

이를 Heap Overflow, Stack Overflow라고 한다.

 

즉, 한정된 공간을 공유하기에 Heap 영역이 클수록 Stack 영역이 작아지고

Stack 영역이 클수록 Heap 영역이 작아진다.

 

 


## CPU 스케줄러

여러 프로세스들이 CPU를 교환하며 보다 생산적으로 동작한다.

이때, CPU를 보다 효율적이게 사용하기 위해서 CPU 스케줄러가 사용된다.

 

 

 


### 비선점 스케줄링

Time Quantum (Time Slice)가 없는 스케줄링 방식

CPU를 사용 중인 프로세스가 자율적으로 반납하는 방식이다.

 

 

 

FCFS (First Come First Service)

먼저 CPU를 요청하는 프로세스를 먼저 처리하는 방식

프로세스의 Burst Time에 따라 평균 Waiting Time이 나빠진다.

 

 

 

SJF (Shortest Job First)

Burst Time이 짧은 프로세스부터 CPU를 할당하는 방식

평균 Waiting Time을 최소화하기 위해 사용한다.

 

 

 


### 선점 스케줄링

낮은 우선순위를 가진 프로세스보다 높은 우선순위를 가진 프로세스가 CPU를 선점하는 방식

OS가 스케줄링의 알고리즘에 따라 적당한 프로세스에게 CPU를 할당하고, 필요시 회수한다.

 

 

 

SRT (Shortest Reamining Time)

남은 시간이 가장 적은 프로세스에게 CPU를 할당하는 방식

최단 잔여시간인 프로세스를 위해 진행 중인 프로세스를 Sleep 시키고 먼저 할당한다.

 

 

 

RR (Round Robin)

Time Sharing System을 위해 설계된 스케줄링 방식

프로세스의 우선순위는 없고, Time Quantum (Time Slice)를 기반으로 CPU를 할당한다.

 

단, Time Quantum이 너무 크면 순차적으로 실행되는 FCFS와 차이가 없어 비효율적이다.

또한, Time Quantum이 너무 작으면 불필요한 Context Switch 비용이 많이 발생하여 비효율적이다.

 

 

 

Priority Scheduling

우선순위가 높은 프로세스에 CPU를 할당하는 방식

 

 


## 가상 메모리

실행 중인 모든 프로세스에게 메모리를 할당하기에는 메모리의 크기가 한정적이라 한계가 있다.

그렇기에 프로세스에서 실 사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관하는 기법이다.

 

 

 


## 데드락 (교착 상태)

 

두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못하여 다음 처리를 하지 못 한 체 무한히 기다리는 상태이다.

 

주로 멀티프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황에서 발생한다.

 

 


### 데드락 발생 조건

아래 4가지 조건이 모두 성립할 때 데드락이 발생한다.

 

 

 

상호 배제 (Mutual Exclusion)

자원은 한 번에 한 프로세스에서만 사용할 수 있다.

 

 

 

점유 대기 (Hold And Wait)

최소 하나의 자원을 점유하면서 다른 프로세스에 할당된 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.

 

 

 

비선점 (No Preemption)

다른 프로세스에게 할당된 자원은 사용이 끝날 때까지 강제로 선점할 수 없다.

 

 

 

순환 대기 (Circular Wait)

프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 한다.

 

 

 


### 데드락 예방

데드락 발생조건 4가지 중 1가지 조건을 부정하여 데드락 발생 가능성 자체를 차단하여 예방한다.

하지만 시스템 처리량이나 효율성을 떨어뜨릴 가능성이 높아 예방보다는 회피를 권장한다.

 

 

 


### 데드락 회피

 

은행원 알고리즘

은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래한 기법이다.

 

프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남게 되는지를 사전에 판단하여 데드락을 회피하는 기법이다.

 

즉, 안정 상태로 남게 된다 판단되면 자원을 할당하고, 그렇지 않으면 안정 상태가 될 때까지 대기한다.

 

 

 


참고

728x90
반응형
LIST