본문 바로가기
관심거리/IT(컴퓨터/인터넷)

Memory mapping 에 대한 이해

by 상실이남집사 2013. 12. 13.

응용프로그램의 명령이 수행되는 속도는 보통 프로그램addressable 메모리 영역밖을 얼마나 많이 접근하느냐에 달려있다고 해도 과언이 아니다.

즉 많을수록 속도는 늦어 질 수 밖에 없다.

이런 메모리 외부영역을 접근하는 트랜잭션 오버헤드를 줄이기 위해 OS는 두가지 방식을 제시하고 있다.

하나는 파일을 프로세스 메모리영역에 맵핑하는 것이 있다.

흔히 파일 메모리맵핑기법으로 불리기도 한다.

두번째는 협력하는 프로세스간에 사용하는 공유영역을 둠으로서 오버헤드를 줄일 수 있다

메모리팹핑화일은 프로세스로 하여금 직접적으로 데이터를 접근할 수 있는 메커니즘을 제공한다. 이것은 파일을 열고 읽으면서 데이터를 자신의 데이터 버퍼로 복사하는 작업을 없애 줌으로서

상당한 I/O이동을 줄여준다. 한 파일을 맵핑하는 프로세스가 하나 이상 일 때는 공유를 하게 된다. Mapped memory영역 ( 또한 shared memory 영역으로도 불리는)은 프로세스간에 데이터를 교환하는 대규모 풀(pool)을 제공한 것이다.

그러나 락킹이나 접근제어에 대한 부분은 signal이나 semaphore를 사용하여 설정하여야 한다.

이렇게 하여야 한 프로세스가 사용중인 데이터를 변경하는 것과 같은 접근 충돌을 막을 수 있다.

공유메모리 영역은 메시지로 보내기에는 큰 공용데이터베이스의 데이터를 여러 프로세스가

공유하는 경우에 특히 유용하다.

맵핑은 파일을 읽고 쓰는데에 따르는 오버헤드를 줄일 수 있다고 했다.

파일의 내용이 유저영역으로 올라오게 되면 (맵핑) 다른 프로세스들은 마치 메모리에 올라 온 것처럼 시스템콜(I/O)를 사용하지 않고 포인터를 이용해 직접 접근하게 되는 것이다.

또한 디스크에 있는 파일은 마치 paging 영역처럼 활용됨으로써 페이징 공간을 줄일 수있다.

프로그램은 어떠한 정규파일에 대해서도 맵핑을 할 수 있다.

이런 특징은 실행코드를 가지는 오브젝트코드에도 적용 가능하다.

이렇게 하면 일반 파일보다 좀더 빠르게 액세스 할 수 있게 되기 때문에

실행파일을 좀더 빨리 load할 수 있다. 보다 자세한 사항은 shmat서브루틴을 참고 한다.


이제는 메모리에 대한 하드웨어적인 제약사항이 많이 줄어든 요즘이라고는 하지만

그래도 최적화와 사용율이 좋을 수록 가볍고 빠른 시스템이 구축될 수 있다는 점에서는 아직도 중요한 부분이라고 생각된다.

댓글