본문 바로가기
ETC/Job

게임 클라이언트 프로그래머 직군 면접 준비 (1)

by Dev_카페인 2024. 2. 27.
반응형

게임 클라이언트 프로그래머 직군 면접 준비 (1)

 

1분 스피치

안녕하세요 게임 클라이언트 프로그래머 지원자 ㅇㅇㅇ 입니다.

직무와 연관있는 자기 자랑 타임

빈틈을 보여 질문할 수 있는 여지를 만들어두는 시간

자신의 역량을 요약하여 어필합니다.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

CPU

마이크로 프로세서라고 불리기도 하는데, 컴퓨터 시스템 모든 장치의 동작을 제어하고 명령을 실행하는 장치로, 크게 연산장치, 제어장치, 레지스터로 구성됩니다.

 

[CPU 연산장치]

연산장치는 제어장치의 명령에 따라 실제로 연산을 수행하는 장치로 가산기, 감산기, 누산기(AC, Accumulator) 등으로 구성되어 있습니다.

 

[CPU 제어장치]

제어장치는 프로그램 카운터, 명령어 레지스터, 부호기, 명령어 해독기, 번지 해독기 등으로 구성되어 있습니다.

주기억 장치로부터 명령어를 읽어들이는 인출 단계와 명령어를 실행하는 실행 단계를 거칩니다.

제어장치의 명령 실행 순서는 프로그램 카운터에 저장된 주소를 레지스터로 옮긴 후 인출 실행합니다.

인출 후에는 프로그램 카운터를 증가시키고 명령 코드를 명령 레지스터로 옮기는 작업이 동반됩니다.

프로그램 카운터에 저장된 주소()를 번지 레지스터에 옮긴다.

명령어를 주기억장치로부터 인출한다.

프로그램 카운터를 증가시킨다.

명령 코드를 명령 레지스터로 옮긴다.

명령 레지스터의 내용을 해독하여 실행한다.

 

[레지스터]

CPU 내부에서 처리할 명령어나 연산의 중간 결과 값 등을 일시적으로 기억하는 임시 기억장소 입니다.

연산과 프로그램의 실행을 효율적으로 수행하기 위해 사용됩니다.

 

레지스터 종류

프로그램 계수 (PC : Program Counter) 다음 명령어 번지 기억
명령 레지스터 (IR : Instruction Register) 실행중인 명령 내용 기억
누산기 (AC : Accumulator) 연산 결과 임시 저장
상태 레지스터 (Status Register)
PSW(Program Status Word Register)
플래그 레지스터 (Flag Register)
시스템 상태를 나타내고 유지하기 위한 제어 워드
실행중인 CPU의 상태를 지칭
자리올림, 인터럽트 등의 PSW 저장
메모리 주소 레지스터(MAR) 기억장치를 출입하는 데이터의 주소 기억
메모리 버퍼 레지스터(MBR) 기억장치 출입하는 데이터 주소 임시 기억
입출력 장치와 계산기 사이의 동작속도를 맞춤
인덱스 레지스터(Index Register) 주소변경, 서브루틴, 연산 횟수 등을 기억
데이터 레지스터(Data Register) 연산에 사용될 데이터 기억
시프트 레지스터(Shift Register) 클럭 펄스(Clock Pulse)에 의해 기억되는 내용을 좌우로 shift

[컴퓨터 장치 속도]

레지스터 -> 캐시메모리 -> 주기억장치 -> 보조기억장치

 

[캐시메모리]

- 프로세서에 통합된 랜덤 액세스 메모리입니다. CPU의 처리 속도와 주 기억 장치의 접근 속도 차이를 줄이기 위해 사용됩니다.

 

[지역성, 국부성, 구역성]

프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론

- 스래싱(Thrashing)을 방지하기 위한 워킹셋 이론의 기반

- 데닝(Denning) 교수에 의해 구역성의 개념이 증명됐으며, 캐시 메모리 시스템의 이론적 근거

종류 설명
간적 구역성
(Temporal Locality)
한 번 참조한 페이지는 가까운 시간 내에 계속 참조 할 가능성이 높음
# Loop(루프), Stack(스택), Subroutine(서브루틴), Counting(카운팅), Totaling(집계)
간적 구역성
(Spatial Locality)
어느 하나의 페이지를 참조하면 그근처의페이지를계속참조할가능성이높음
# Array(배열), Sequential Code(순차적 코드)

 

[스래싱(Thrashing)]

- 기억장치의 페이지 부재가 비정상적으로 많이 발생하여 CPU가 프로그램 처리보다 페이지 교체에 더 많은 시간을 보내 성능히 급격히 줄어드는 현상

- 멀티 프로세싱 기능을 갖춘 시스템에서 가상 메모리의 페이지 부재(Page Fault)가 너무 많이 발생하여 프로세스 실행보다 페이지 교체에 더 많은 시간을 소모하는 현상

 

[기억장치의 배치 전략]

최초 적합(First Fit) : 첫 번째 분할 영역에 배치

최적 적합(Best Fit) : 단편화를 가장 작게 남기는 분할 영역에 배치

최악 적합(Worst Fit) : 단편화를 가장 많이 남기는 분할영역에 배치

 

[가상 기억 장치]

보조기억장치(하드디스크)의 일부를 주 기억 장치처럼 사용하는 것으로, 용량이 작은 주 기억 장치를 마치 큰 용량을 가진 것처럼 사용하는 기법입니다.

 

[가상 기억 장치 - 페이징 기법]

프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 적재시켜 실행하는 기법이다.

프로그램을 일정한 크기로 나눈 단위를 페이지라고 한다.

내부 단편화가 발생할 수 있다

페이지 크기가 작을 경우

-페이지 단편화가 감소되고, 한 개의 페이지를 주 기억 장치로 이동하는 시간이 줄어든다.

-불필요한 내용이 주 기억 장치에 적재될 확률이 적으므로 효율적인 워킹 셋 유지 가능

-Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아짐

-페이지 정보를 갖는 페이지 맵(사상) 테이블의 크기가 커지고, 매핑 속도가 늦어짐

-디스크 접근 횟수가 많아져서 전체적인 입출력 시간은 늘어남

 

페이지 크기가 클 경우

-페이지 단편화가 증가되고, 한 개의 페이지를 주 기억 장치로 이동하는 시간이 늘어남

-불필요한 내용까지도 주 기억 장치에 적재될 수 있음

-페이지 정보를 갖는 페이지맵(사상) 테이블의 크기가 작아지고, 매핑 속도가 빨라짐

-디스크 접근 횟수가 줄어들어 전체적인 입출력 효율성이 증가됨

* 워킹 셋(Working Set) : 지역성을 기반으로 가장 많이 사용하는 페이지를 미리 저장해둔 것

 

[페이지 교체 알고리즘]

FIFO : 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법

LRU(Least Recently Used) : 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법

LFU(Least Frequently Used) : 사용 빈도가 가장 적은 페이지를 교체하는 기법

OPT(OPTimal replacement, 최적 교체) : 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법

-벨레이디(Belady)가 제안한 것으로, 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘

NUR(Not Used Recently) : 최근에 사용하지 않은 페이지를 교체하는 기법, 참조 비트와 변형 비트가 사용됨

SCR(Second Chance Replacement, 2차 기회 교체): 가장 오랫동안 주기억장치에 있던 페이지 중 자주사용되는페이지의교체를방지하기위한것으로, FIFO 기법의 단점을 보완하는 기법

 

[가상 기억 장치 - 세그먼테이션 기법]

다양한 크기의 논리적인 단위로 나눈 후 적재시켜 실행시키는 기법이다.

프로그램을 논리적인 크기로 나눈 단위를 세그먼트라고 한다.

외부 단편화가 발생할 수 있다.

 

[단편화]

이 주기억장치에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 메모리 단편화가 발생했다고 합니다. 그리고 이 메모리 단편화는 내부 단편화와 외부 단편화로 구분할 수 있습니다.

내부 단편화 (Internal Fragmentation)

메모리를 할당할 때, 프로세스가 필요로 하는 크기보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 말합니다.

외부 단편화 (External Fragmentation)

메모리가 할당되고 해제되는 작업이 반복되면서 중간중간 작은 메모리가 존재하게 됩니다. 이때 중간중간 생긴 사용하지 않는 메모리가 발생하면서 메모리의 총 공간은 충분하지만 실제로는 할당할 수 없는 상황을 말합니다.

 

[페이지 폴트]

애플리케이션이 현재 메모리 상주 페이지 세트에 없는 페이지에서 주소를 요청하는 현상을 의미합니다.

 

[운영체제의 스케줄링]

메모리에 적재된 프로그램을 CPU가 실행할 수 있도록, 운영체제로 하여금 프로세스 또는 스레드에 CPU를 할당하는 것을 의미합니다. 스케줄러는 제한된 자원을 여러 프로세스가 효율적으로 운영하도록 다양한 정책을 가지고 CPU를 할당하게 되는데, 여기서 정책이란 어떤 기준 / 순서로 CPU를 할당할지를 결정하는 방법입니다.

 

비선점 스케줄링 : CPU를 선점한 프로세스가 자발적으로 실행권을 내려놓는 방식을 의미합니다.

- FCFS(First Come First Served) : 큐에 도착한 순서대로 CPU를 할당합니다. 짧은 작업이 긴 작업을 기다리게 되는 경우나 중요한 작업의 순위가 후순위로 밀리는 경우가 발생할 수 있습니다.

- SJF(Shortest Job First) : 실행시간이 짧은 프로세스에게 먼저 CPU를 할당합니다. 그러므로 실행시간이 긴 프로세스는 순위가 계속 밀려 기아상태가 발생하게 됩니다.

- 우선순위 : 우선순위가 높은 순으로 CPU를 할당합니다. 이 방법 역시 낮은 우선순위를 가진 프로세스가 기아 상태가 발생하게 됩니다.

- HRRN(Highest Response Ratio Next) : 준비 큐에 있는 프로세스들 중 응답률[(대기시간+CPU 요구량) / CPU 요구량]이 가장 높은 프로세스에게 높은 우선 순위를 주는 방식입니다. 대기시간이 길어질수록 우선순위가 높아지므로 수행시간이 긴 프로세스도 금방 CPU를 할당받을 수 있게 됩니다.

 

선점 스케줄링 : 실행중인 프로세스가 강제적으로 실행권을 빼앗기는 방식을 의미합니다.

- Round-Robin(시분할) : 모든 프로세스에 CPU 할당 시간을 부여하여 CPU의 사용 시간을 제한하는 방식입니다. 할당 시간이 너무 길면 FCFS와 같은 문제가 발생하고, 너무 짧으면 Context Switch에 의한 오버헤드가 발생합니다.

- 선점 우선순위 : 우선순위가 높은 순으로 번갈아가며 CPU를 할당합니다. 비선점 우선순위 방법과 다르게 Aging 진행에 따라 우선순위가 바뀌면 프로세스가 실행권을 잃고 더 높은 우선순위의 프로세스로 전환됩니다.

- 다단계 피드백 큐 : 프로세스를 우선순위에 따라 그룹화하고, 각자 다른 큐를 사용하는 방법입니다. 처음에는 모든 프로세스가 첫 번째 큐에 등록되고, 할당 시간 내에 종료되지 않을 경우 다음 차례의 프로세스에 선점되고 한 단계 낮은 우선 순위 큐에 등록됩니다. , 많은 CPU 사용 시간을 요구하는 프로세스를 점점 낮은 우선순위로 배치하는 방법입니다. 이 방법 역시 Aging을 통해 기아 현상을 해결할 수 있습니다.

 

* Aging : 기아 상태가 발생하는 현상을 처리하는 방법으로, 실행되지 않은 프로세스의 우선순위를 시간이 지날수록 높여주는 방법입니다.

 

 

반응형