커널과 사용자 영역 사이에 메모리를 공유, 동기화할 수 있는 방법을 알고 싶습니다
글쓴이: i20749 / 작성시간: 수, 2014/07/30 - 6:55오후
안녕하세요. 일하는 중에 혼자서는 풀기 힘든 과제가 있어서 글을 올리게 되었습니다. 아시는 분들의 답변 부탁드릴께요.
현재 구현해야 하는 기능은 다음과 같습니다.
1. 사용자 영역에서 메모리를 할당하고 해당 메모리를 커널과 공유 - 공유의 의미는 커널에서 사용자 메모리에 접근해서 read, write가 가능해야 합니다.
또는
1. 커널 영역에서 메모리를 할당하고 해당 메모리를 사용자 영역과 공유 - 마찬가지로 사용자 영역에서 커널 영역 메모리에 접근해서 read, write가 가능해야 합니다.
(부가적으로 설명드리면 사용자 영역에서는 데몬이 동작하구요, 커널 영역에서는 동적 모듈을 제작해서 동작시키도록 되어있습니다)
지금 생각으로는 어느 한쪽에서 메모리를 할당한 다음에 시스템 콜을 이용해서 해당 메모리의 물리주소를 구해서 넘겨줘서(혹은 넘겨받아서) 접근할 수 있지 않을까 하는
방향으로 찾아보고 있는데 이 역시 찾기가 힘이듭니다; (물리주소를 얻는 방법도 잘 모르겠구요)
2. 사용자 영역과 커널 영역에서 공유되는 메모리에 접근하려고 할때 동기화를 해결할 수 있는 방안. 이 역시 커널과 사용자 영역간에 동기화를 구현할 수 있을까요...
힌트라도 좀 부탁드리겠습니다.
Forums:
아 한가지 더 궁금한게 있는데요
공유할 메모리를 사용자 영역에 할당하는 것과 커널 영역에 할당하는 것중에 어떤 방법이 더 나을까요..
많이 배우고 싶습니다
의견 하나
> 사용자 영역에서 메모리를 할당하고 해당 메모리를 커널과 공유 - 공유의 의미는 커널에서 사용자 메모리에 접근해서 read, write가 가능해야 합니다.
이런 방법은 잘 안 쓰구요
>1. 커널 영역에서 메모리를 할당하고 해당 메모리를 사용자 영역과 공유 - 마찬가지로 사용자 영역에서 커널 영역 메모리에 접근해서 read, write가 가능해야 합니다.
이런 방법을 사용하는데 커널 모듈 드라이버의 file operation 중에 mmap 구현해야합니다. 관련 함수로는 remap_pfn_range() 가 있습니다.
>2. 사용자 영역과 커널 영역에서 공유되는 메모리에 접근하려고 할때 동기화를 해결할 수 있는 방안. 이 역시 커널과 사용자 영역간에 동기화를 구현할 수 있을까요...
가령 유저 데몬을 Sleeping 시키고 커널 모듈에서 유저 영역으로 signal이나 메세지 등을 주어서 깨우면 됩니다.
댓글 감사드리구요. 몇가지만 더 여쭤봐도 될까요.
> 사용자 영역에서 메모리를 할당하고 해당 메모리를 커널과 공유 - 공유의 의미는 커널에서 사용자 메모리에 접근해서 read, write가 가능해야 합니다.
이런 방법은 잘 안 쓰구요
==> 가능은 한 건가요?
> 1. 커널 영역에서 메모리를 할당하고 해당 메모리를 사용자 영역과 공유 - 마찬가지로 사용자 영역에서 커널 영역 메모리에 접근해서 read, write가 가능해야 합니다.
이런 방법을 사용하는데 커널 모듈 드라이버의 file operation 중에 mmap 구현해야합니다. 관련 함수로는 remap_pfn_range() 가 있습니다.
==> 구글링하다보면 해당 방법을 사용할때는 꼭 디바이스 파일을 만들어서 사용하던데요. 꼭 그렇게 해야하는건가요?
커널 영역에서 kmalloc을 이용해 할당한 메모리를 사용자 영역에서 사용하려고 하거든요.
혹시나 가능하시면 예제도 좀 보여주시면 감사하겠습니다.
많이 배우고 싶습니다
답변
> 가능은 한 건가요?
> 구글링하다보면 해당 방법을 사용할때는 꼭 디바이스 파일을 만들어서 사용하던데요. 꼭 그렇게 해야하는건가요
꼭 그렇게 안 해도 되는데, 그렇게 하는 이유는 사용하기 편하기 때문입니다.
가장 근본적인 이유는, 커널과 유저 영역 사이에 공유 메모리를 만들기 위해서는 MMU Page Table을 조작해야 하기 때문입니다.
이런 한 목적으로 만들어진 함수들에 속하는 것이 드라이버안에 mmap과 remap_pfn_range 입니다.
가령 유저 영역과 커널 영역의 특정 PTE 값들을 하나의 동일한 struct page을 가리키도록 조작한다고 볼수 있습니다.
댓글 달기