1. 메모리 계층별 역할과 상호작용 관계를 정리해 보자

- 컴퓨터 시스템의 메모리는 피라미드 계층 구조를 갖는다. 피라미드의 제일 아래에는 하드디스크가 존재하고, 가장 위에는 레지스터가 존재한다. 피라미드 구조의 아래쪽으로 내려갈수록 CPU와 거리가 멀어서 속도는 느리되, 용량은 엄청난 크기로 증가한다.


2. 캐쉬 메모리가 성능에 도움을 주는 이유

- 캐쉬 메모리가 성능에 도움을 주는 이유는 프로그램의 일반적인 특성 두 가지 때문이다. 대부분의 프로그램은 실행과정에서 한번 접근이 이뤄진 주소의 메모리 영역에 자주 접근하는 특성이 있다. 이러한 특성을 가리켜 템퍼럴 로컬리티라 한다. 또한 이미 접근이이뤄진 영역의 근처에 접근활 확률이 높다는 특성도 지닌다. 이를 가리켜 스페이셜 로컬리티라 한다. 이 두 가지 특성 때문에 캐쉬는 성능 향상에 많은 도움이 된다.


3. 가상 메모리

- 메인 메모리의 부족함을 가상 메모리라는 메커니즘으로 극복하고 있다. 이는 하드디스크를 메인 메모리로 확장하여 완성 시킨 개념이다. 가상 메모리로 인해 Windows상에서 생성되는 모든 프로세스는 메인 메모리의 크기에 상관없이 약속된 메모리 공간을 할당 받을 수 있다. 


4. 피라미드 구조상에서의 캐쉬 관계

- 가상 메모리의 개념을 이해하면, 전체 메모리의 구조가 피라미드 관계상에서 캐쉬 관계를 형성하고 있음을 알 수 있다. 캐쉬 메모리가 레지스터와 메인 메모리 사이에서 캐쉬 역할을 하고 있는 것처럼, 메인 메모리도 캐쉬 메모리와 하드디스크 사이에어 캐쉬 역할을 하고 있다. 이러한 메모리 계층별 관계를 이해하고 있ㅇ야 한다.


5. MMU(Memory Management Unit)

- 가상 메모리와 실제 물리 메모리 사이에서 주소의 변환을 담당하는 것은 소프트웨어가 아니라 MMU라는 하드웨어 블록이다. 이는 아주 빈번히 일어나는 연산이기 때문에 하드웨어로 구성해야 성능에 영향을 미치지 않는다. 즉 가상 메모리의 구현은 MMU라는 하드웨어 블록의 도움을 받는다.

1. 실행순서 동기화와 이벤트 오브젝트

- 쓰레드의 실행순서가 중요한 이슈인 경우에는 실행순서 동기화를 고려해야 한다. 이를 위해서 Windows에서는 이벤트 오브젝트 기반의 동기화 기법을 제공한다.


2. 타이머 기반 동기화

- 타이머 역시 동기화 오브젝트이다. 다른 동기화 오브젝트와 달리 일정 시간이 지나면 자동으로 Signaled 상태가 되는 특성을 지니고 있어서 타이머라 한다.


3. 이벤트 더하기 뮤텍스

- 실제로 프로그램을 개발하다 보면 이보다 훨씬 복잡한 구성의 동기화가 필요한 경우도 많다. 쓰레드를 사용한다는 것은 여러 가지로 편리하고, 쓰레드 기반으로 프로그램을 구상할 경우 초반 설계도 훨씬 수월하다. 그러나 실제 구현에 들어가면 예상치 못한 일을 경험하게 된다. 이러한 문제를 미연에 막기 위해서는 동기화 기법을 정확히 알고 아는 만큼만 적용하는 지혜가 필요하다.

1. 유저 모드 동기화와 커널 모드 동기화의 차이점 그리고 장단점

- 유저 모드 동기화는 단순한 라이브러리 기반의 동기화이다. 따라서 커널 모드로의 전환이 불필요하기 때문에 성능상에 큰 이점이 있다. 다만 그만큼 기능상의 제한도 있다. 반면 커널 모드 동기화는 커널에 의해 이뤄지는 동기화이다. 라이브러리 형태로 제공되는 함수를 호출하지만 실제로 동기화라는 일을 하는 대상은 커널이다. 따라서 유저 모드 동기화에서 제공하지 못하는 기능을 제공받을 수 있다.


2. 임계 영역의 의미

- 임계 영역을 메모리로 오해하는 경우가 있는데 임계 영역은 메모리를 의미하는 것이 아니다. 임계 영역은 둘 이상의 쓰레드가 동시에 실행하면 문제가 발생하는 프로그램상의 코드 영역을 의미하는 것이다.


3. 뮤텍스와 세마포어의 차이점 및 유사점

- 실제로 뮤텍스는 세마포어의 일종이다. 차이가 있다면 세마포어는 카운트를 지닐 수 있다는 것이다. 카운트를 지닐 수 있다는 것은 임계 영역에 진입할 수 있는 쓰레드의 개수를 늘리거나 줄일 수 있다는 뜻이다. 임계 영역에 진입할 수 있는 쓰레드를 하나로 제한할 경우 세마포어의 카운트를 1로 둬야 하는데, 이렇게 세마포어의 카운트를 1로 두면 이를 뮤텍스라 할 수 있다.


4. volatile 키워드

- volatile 키워드는 다음 두 가지 의미를 지닌다.

- 최적화를 수행하지 마라.

- 메모리에 직접 연산하라(혹은 캐쉬하지 마라.)

+ Recent posts