Programming/Etc

프로그래머 면접시 예상질문

통통만두 2010. 12. 16. 23:36
반응형

이번에 SK컴즈 면접대비용으로 준비한 것이다.

- 임계영역(critical section)
임계 구역(critical section)또는 공유변수 영역은 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 임계 구역은 지정된 시간이 지난 후 종료된다. 때문에 어떤 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다. 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올때는 세마포어 같은 동기화 매커니즘이 사용된다.

- 뮤텍스(Mutex, Mutual Exclusion object, 상호배제)
스레드들 간에서 공유가 배제되는 객체. 파일과 같은 공유 자원이 수행 중 오직 한 프로그램이나 스레드에게만 소유되어야 할 필요가 있을 때 그 자원에 대한 뮤텍스 객체를 생성시킨다. 뮤텍스가 비신호 상태이면 프로그램은 자원을 점유하여 사용한 후 이를 반환하고, 다른 프로그램 또는 다른 스레드가 자원을 사용 중 즉, 뮤텍스가 신호 상태이면 대기 상태로 들어가 끝나기를 기다린다. 뮤텍스는 여러 면에서 크리티컬 섹션과 비슷하고, 대신 사용할 수도 있지만 이름을 가질 수 있다는 점에서 크리티컬 섹션보다 우월하다.

- 세마포어(semaphore)
철도의 까치발 신호기 또는 해군의 수기 신호라는 뜻으로, 운영 체계 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호. 병행 내지 병렬로 동작되는 둘 이상의 프로세서 사이에서 마이크로프로세서 시간이나 입출력 접속구와 같은 공유 자원을 동시에 사용할 수 없기 때문에, 한 프로세서가 사용하고 있는 동안에 세마포어를 세워서 다른 프로세서를 대기시키고 사용이 끝나면 해제시키는 방법으로 사용한다.

- 교착상태(deadlock)
①다중 프로그래밍 시스템(MPS)에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 어떤 특정 이벤트를 기다리고 있는 상태. 망에서는 사용 가능한 버퍼가 없어 일단의 노드들이 패킷을 전송할 수 없는 상태이다.
②2개 또는 그 이상으로 분리되어 실행 중인 프로세스들이 여러 자원에 대하여 경쟁을 하는 상황. P라는 프로세스가 자원 X, 그리고 자원 Y를 필요로 하며 수행 중 자원 요청도 이와 같은 순서로 한다고 가정하고, 동시에 프로세스 Q는 자원 Y, 그리고 자원 X를 필요로 하고 자원 요청 역시 같은 순서로 한다고 가정해 보자. 만약 프로세스 P가 자원 X를 획득했고, 동시에 프로세스 Q가 자원 Y를 획득했다면, 다음에 어떤 프로세스도 요구하는 자원을 획득할 수 없다. 왜냐하면 각각 이미 다른 프로세스에 할당되었기 때문이다.
③데이터 통신망에서, 송신기와 수신기 간에 전송할 정보는 있지만 송수신에 필요한 자원이 서로 맞물려 있어 송수신이 이루어질 수 없는 현상. 교착 상태에는 직접, 간접 및 재조립 교착 상태가 있다.

- 실시간 운영 체계(RTOS, real-time operationg system)
디스크를 이용한 다중 프로그램 작성 운영 체계. 우선 순위가 높은 전위(foreground)에서는 실시간 다중 프로그램 작성을 하며, 우선 순위가 낮은 후위(background)에서는 일괄 처리를 한다. 디스크로부터의 프로그램 입력과 디스크로의 프로그램 출력은 자동적으로 수행되며 동적인 주기억 장치 할당 방식을 쓴다.

- 프로세스 & 쓰레드 차이점
프로세스와 쓰레드의 가장 큰 차이점은 메모리 공유의 유무이다.

프로세스는 각각 독립된 메모리 공간을 가지고 있는 것이 보통이며, 어떤 프로세스가 다른 프로세스의 메모리를 마음대로 읽는다든지 메모리에 쓴다든지 하는 것은 아니다.
프로세스의 메모리 공간은 각각 독립되어있기 때문에 어떤 프로세스가 다른 프로세스 때문에 망가질 위험이 없다.

쓰레드는 메모리를 공유한다. 하나의 쓰레드가 메모리 상에 정보를 쓰고 그것을 다른 쓰레드가 읽는 것은 자주 일어나는 일이다.

또 다른 차이점은 콘텍스트 스위치(context_swith)의 무게이다.

동작중인 프로세스가 바뀔 때 프로세스는 현재 자기의 상태(PCB)를 보존한다.
그리고 새롭게 동작 개시하는 프로세스는 이전에 보전해 두었던 자신의 상태(PCB) 정보로 복귀. 이와 같은 콘텍스트 스위치에는 시간이 걸린다.

동작중인 쓰레드가 바뀔 떄 쓰레드는 프로세스와 같이 콘텍스트 스위치를 행한다. 그러나 쓰레드가 관리하고 있는 콘텍스트 정보는 프로세스보다도 적기 때문에 쓰레드의 콘텍스트 스위치는 프로그램의 콘텍스트 스위치보다도 가볍게 행해지는 것이 보통이다.

- 폴링
폴링은 처리해야 할 작업들을 순차적으로 돌아가면서 처리하는 방법을 말한다. 예를 들어, 서버가 여러 클라이언트와 통신할 때 각 클라이언트로부터 데이터 수신을 순차적으로 돌아가면서 처리하는 방법이 이에 해당한다.

폴링 방식을 이용하려면 입출력 함수가 어느 한 곳에서 블록되지 않아야 하므로 파일이나 소켓을 넌블록(non-block)모드로 설정해야 한다. 넌블록 모드의 파일이나 소켓이란 블록될 수 있었던 입출력 함수를 호출하였을 때 시스템이 즉시 처리할 수 있으면 결과를 바로 리턴하고, 즉시 처리할 수 없는 경우라도 함수가 즉시 리턴되어 프로그램이 블록되지 않는 모드를 말한다.

예를 들어, 소켓을 넌블록 모드로 설정하면 read() 호출 시에 수신된 데이터가 없어도 read() 문이 즉시 리턴되어 다음 작업으로 진행할 수 있다.

- 폴링2
1. 처리해야 할 작업들을 순차적으로 돌아가면서 처리하는 방법
 - 서버가 각 클라이언트로부터의 데이터 수신을 순차적으로 처리
2. 입출력 함수가 블록되지 않아야 함로 소케으 넌블록 모드로 설정
 - 즉시 처리할 수 있으며 결과를 리턴하고, 처리할 수 없는 경우라도 리턴됨
3. 여러 클라이언트가 고르게 트래픽을 발생 시키는 경우에 적합

- 셀렉팅
셀렉팅은 폴링과 반대 개념으로 동작한다. 예를 들어, 서버가 각 클라이언트의 데이터 수신을 순차적으로 확인하는 것이 아니라, 어떤 클라이언트로부터 데이터가 도착하면 서버는 데이터가 도착한 클라이언터와의 입출력을 처리하는 방식이다. 셀렉팅 방식은 클라이언트로부터의 데이터 도착이 불규칙적인 경우에 유리하다.

셀렉팅을 위해서는 유닉스에서는 select() 함수를 이용하여 입출력을 처리할 파일이나 소켓들을 비동기모드로 바꾸어야 한다.

- 인터럽트
인터럽트 방식은 프로세스가 어떤 작업을 처리하는 도중에 특정한 이벤트가 발생하면 해당 이벤트를 처리하는 방식이다. 유닉스에서는 프로세스 사이에 이벤트 발생을 알려주기 위해 시그널(signal)을 제공하는데 시그널을 사용하여 데이터 입출력을 인터럽트 방식으로 처리할 수 있다. 시그널을 소프트웨어 인터럽트라고도 부른다.

- 멀티프로세스
독립적으로 처리해야 할 작업의 수만큼 프로세스를 생성한다.

[장점]
 - 간편한 구현

[단점]
 - 프로세스 증가로 인한 프로그램의 성능 저하
 - 프로세스간 데이터 공유가 불편함
 - 프로세스간 데이터 공유를 위해 IPC를 사용해야 함
 - PIC를 사용할 경우 프로그램의 복잡성 증가

- 멀티스레드
 - 프로세스 내에서 독립적으로 실행되는 작업 단위
 - 프로세스 내에서 여러 스레드를 실행시켰을 경우 외부에서는 하나의 프로세스처럼 취급
 - 스레드는 프로세스의 이미지르 복사하여 사용하지 않고 원래 프로세스의 이미지를 같이 사용
 - 데이터 공유, 프로세스 이미지를 공유하므로 전역변수를 같이 사용 (동기화 문제 발생)

- 다중처리 기술의 선택
멀티프로세스 (다중처리 작업들이 독립적으로 진행되어야 하는 경우)
멀티스레드 (다중처리 작업들이 밀접하게 연관되어 데이터 공유가 많이 필요한 경우)

- DB 정규화
고유한 식별자를 가지는 모든 개체(Entity=DB의 테이블)를 더 이상 분리할 수 없는 상태로 나누는 과정
(불필요한 중복된 데이터를 제거, 정규화를 통한 개체의 분리는 관계가 있는 개체간의 참조 관계로 데이터를 유지보수하게 된다.)

[장점]
데이터의 크기가 작아지기 때문에 갱신 및 처리 속도면에서 유리하고 같은 데이터가 여러 개체에 분산된 것보다 일관성을 유지하기 쉽다.

[단점]
관계된 여러 속성을 동시에 조회하기 위해 JOIN과정에서는 어려움을 가질 수 있다. 여러 개체에 동시에 반영해야 하는 작업의 경우 명시적으로 트랜젝션 처리를 해야 하는 수고가 따른다.

- 士 爲知己者 死, 女 爲說己者 容 (사 위지기자 사, 여 위열기자 용)

의미는 말씀하신 대로 '선비는 자신을 알아주는 사람을 위해서 죽고(목숨을 바침), 여자는 자기를 기쁘게 해주는 사람을 위해서 꾸민다.'입니다.


 

반응형

'Programming > Etc' 카테고리의 다른 글

블로그 syntaxhighlight 적용하기  (0) 2011.06.24
모든 이미지를 ico로 변환  (0) 2011.06.07
RTOS(Real-Time Operating System) 란?  (0) 2010.12.16
데드락 (deadlock)  (0) 2010.12.16
웹 사이트 모음  (0) 2010.09.28