본문 바로가기
동굴 속 정보

인터뷰에서 중요한 운영체제 질문 2

by 도시형닌자 2020. 5. 13.

[ 컴퓨터 공학 ]

인터뷰를 승리하자

직무가 컴퓨터인 사람들은 언제나 직무 관련 인터뷰를 만나게 되어 있다.

경력은 대부분 했던 업무에 대해서 질문을 받는다.

하지만 신입은 기초적인 질문부터 시작해서 디테일까지 질문을 받게 된다.

 

기본적인 용어와 개념들을 정리해서 실패하지 않기 위해 내용을 준비했다.

"인터뷰에서 중요한"이라는 시리즈는 앞으로 계속 업로드될 것이다.

 

 

 

 

 

[ 쓰레드, Thread ]

쓰레드는 실이라는 의미이다

# 쓰레드(Thread)란?

사전적 의미로 "실"이라고 하는 Thread는

CPU 이용의 기본 단위로서 경량 프로세스(Light Weight Processs)라고 불린다.

한 프로세스의 Thread들은 코드, 데이터, 파일 등의 자원을 공유한다.

 

 

#쓰레드의 구성요소 4가지

(1) Thread ID : 각각의 Thread를 구분해서 사용하기 위한 번호이다.

(2) Process Counter : 다음 실행할 Thread를 확인할 때 사용한다.

(3) Register Set : 임시 쓰레드를 저장하는 위한 용도이다.

(4) Stack : 로컬 변수를 저장할 때 사용한다.

 

위 네 가지 구성 요소의 특징은 항상 이 기능을 한다기보다 대표 기능이라고 생각하면 좋다.

 

 

 

#쓰레드의 장점

(1) 응답성(Reponsiveness)

대화형 쓰레드 구현의 경우, 하나의 쓰레드가 파일을 읽는다.

이때 다른 쓰레드가 사용자의 응답을 받을 수 있다.

즉 하나의 쓰레드가 Block 되어도 다른 쓰레드가 일할 수 있다.

 

(2) 자원 공유(Resource Sharing)

하나의 프로세스 안의 여러 쓰레드들은 서로 코드, 데이터, 파일 등을 공유할 수 있다.

 

(3) 경제성(Economy)

계속 프로세스를 생성해서 작업을 진행하는 것은 비효율 적이다.

하나의 프로세스 내에서 여러 쓰러드들을 생성해서 작업을 진행하면 자원 공유로 더욱 빠르고 리소스 소모가 적다.

프로세스가 다른 프로세스로 작업을 변경할 때, 컨텍스트 스위칭(Context Swiching)이 발생한다.

컨텍스트 스위칭은 다른 프로세스를 실행하기 위해 기존에 작업되고 있는 프로세스의 내용을 저장하는 작업이다.

매번 컨텍스트 스위칭이 발생한다면 오버헤드가 발생하면서 자원을 낭비한다.

 

(4) 멀티프로세스 구조와 활용(Utilization of Multi Process Architectures)

하나의 프로세스의 여러 쓰레드들이 여러 CPU를 동시에 사용하면서 병렬성이 증가한다.

 

 

 

 

 

[ 가상 메모리, Virtual Memory ]

가상메모리에서 물리메모리로 로드

#가상 메모리(Virtual Memory)란?

실제 물리 메모리 개념과 논리적 메모리 개념을 분리하는 기법이다.

가상 메모리에 존재하는 프로그램을 일부만 물리 메모리에 로드하여 실행한다.

이 방법으로 메모리보다 큰 프로그램을 실행시킬 수 있다.

더 이상 메모리 크기에 프로그램가 제약받지 않게 되었다.

 

 

#가상 메모리 구현 방법

(1) 페이징(Paging) 기법

고정 크기의 블록으로 가상 기억 장소를 구성하는 방법이다.

이 고정 크기의 블록을 페이지라고 한다. 기본적으로 4096 bytes이다.

페이지는 블록 단위로 보조기억장치(가상 메모리)에서 주기억장치(물리 메모리)로 옮겨진다.

메모리 공간을 고정된 크기로 나누어 할당하므로 내부 단편화가 발생한다.

 

 

(2) 세그먼트(Segment) 기법

가변 크기로 가상 기억 장소를 구성하는 방법이다.

각 블록은 서로 다른 크기이지만 연속된 기억 장소로 구성해야 한다.

하나의 블록은 연속되지만 각각의 블록들은 인접할 필요가 없다.

세그먼트의 크기는 가변 크기로 나누어져 할당하므로 외부 단편화가 발생한다.

 

 

#페이지 교체(Page Replacement)

원하는 페이지를 물리 메모리에서 찾을 수 없는 경우를 Page Fault라고 한다.

이 Page Fault가 빈번하게 발생하면 CPU 이용률이 증가한다.

CPU 이용률이 증가하는 것을 Thrashing이라고 한다.

이 같은 경우 자원이 불필요하게 소비되게 된다.

 

그래서 불필요한 자원 소비를 없애기 위해 페이지 교체 알고리즘을 사용한다.

페이지 교체를 통해서 앞으로 Page Fault를 줄일 수 있다.

 

페이지 교체 알고리즘은 대표적으로 4가지가 있다.

(1) FIFO(First In, First Out)

페이지가 삽입된 순서대로 교체하는 방식이다.

먼저 들어간 게 먼저 나온다고 선입선출 방식이라고도 한다.

 

(2) Optimal

앞으로 가장 사용되지 않을 페이지를 교체하는 방식이다.

페이지의 미래 사용치를 추정할 수 있는 알고리즘이 필요하다.

그래서 이상적인 방법이지만 거의 사용되지 않는다.

 

(3) LRU(Leat Recently Used)

가장 적게 사용한 페이지를 교체한다.

적게 사용한 페이지를 확인하기 위해서 사용량을 측정하는 Counter,

그리고 사용 시간을 측정하는 Timestamp가 필요하다.

 

(4) NUR(Not Used Recently)

최근에 사용하지 않은 페이지를 교체한다.

참조 비트(읽었으면 1)와 변형 비트(수정했으면 1)를 사용하여 교체를 한다.