커널의 페이지 테이블.
글쓴이: bigbaby / 작성시간: 토, 2006/12/09 - 1:25오전
공부하다가 궁금증이 생겼습니다.
제가 배우기로는 커널에서 유저 프로세스의 페이지 테이블을 관리한다고 배웠습니다.
근데, 이 유저 프로세스의 페이지 테이블의 주소는 커널의 페이지 테이블을 통해 맵핑되어 있다고 배웠구요.
근데, 방금 찾아보니, 커널은 가상주소->물리주소로 변환될 필요없이, 그냥 바로 물리주소를 사용한다고 읽었습니다.
페이지 테이블이 가상주소->물리주소로 바꾸는데 사용되는데, 그럼, 커널은 자신의 페이지 테이블이 필요없지 않나요?
제가 잘못 이해 하고 있는건 아닌지...아 그리고 커널의 페이지 테이블은 누가, 어떻게 관리가 되나요?!!
답변 좀 부탁드립니다. 좋은 밤 되세요.
Forums:
자세히 기억은 안나지만...
커널에서 가상->물리 변환이 일어납니다.
3단계 테이블을 쓰는데 i386같은 경우는 2개만 사용했던걸로 기억합니다.
자세한것은 다른분들께 패스~
ps : 리눅스 커널의 오해(이해)랑 커널 소스를 뒤져보세요.
master kernel page table
kernel이건 user mode이건
logical address -> linear(virtual) address -> physical address
로 변환됩니다.
단, kernel(32-bit 체제인 경우) 은 physical address == virtual address - 3 GB
관계입니다.
/***************************************
Being the one is just like being in love.
***************************************/
이 말은 각각의
이 말은 각각의 프로세스의 커널모드가 다른 logical address 를 가진다는 말인가요?
각각의 프로세스의 커널 모드가 있나요??
제가 이해하고 있기로는 커널 그 자체가 이미 작동중인 프로세스(용어가 맞는지 모르겠습니다 ;)이기 때문에 따로 떼어서 생각할 수 없는 것으로 알고 있습니다.
Virtual Memory를 4GB(32bit system) 중에서 커널 자체가 1GB를 할당 받고(컴파일 옵션에 따라 틀려지더라고요..) 나머지 3GB를 유저모드에서 사용하는 것으로 알고 있습니다... 음..
그럼 한 프로세스당 virtual memory가 4GB로 인식된다고 하더라도 그중 1GB는 항상 커널에게 할당되어있는 값이 아닐까요???
아시는 분의 확실한 대답을 기다리겠습니다... 음... ^^;;
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
커널 페이지 테이블
그럼 커널 페이지 테이블은 누가 관리하나요?
자기 자신이 관리하나요?
페이지 관리
여기서 자기 자신이라면 커널을 뜻하는 것입니까?
만일 커널을 뜻한다면 그렇다고 할 수 있겠죠.
페이지 테이블을 아신다면 처음 부팅때 인터럽트 설정에 관련된 사항을 아실겁니다.
이때 각 인터럽트에 대한 설정을 해주어야만 동작이 가능합니다.
page fault도 이 인터럽트중에 한가지로 알고 있습니다.(관련 부분을 본지 오래되어서
조금 헷갈리네요.)
즉, 범위를 벗어나는 메모리 참조가 일어나면 그때 page fault가 일어나고 이때
미리 설정해 두었던 인터럽트 루틴으로 분기가 일어나 메모리관리를 하게 된다고
알고 있습니다.
저도 예전에 이쪽 부분을 공부하려다가 도저히 해당 의미를 이해할 수가 없어서
그만뒀었지만 자원에 대한 모든 관리는 커널이 한다고 생각하시면 됩니다.
(여기서 자원이란 컴퓨터 시스템에 붙어있는 장비들을 뜻합니다.)
물론 알 수 없는 장비들도 있지만 이러한 장비들은 module이라는 것을 통해서
관리가 가능하니 이것도 커널의 한 영역이라고 생각해도 될런지 모르겠지만...
------------------------------
좋은 하루 되세요.
------------------------------
좋은 하루 되세요.
커널 같은 경우는
커널 같은 경우는 페이지 테이블을 사용하지 않아도 될 듯 하군요.
커널마다 구현 나름이겠지만, MS윈도우즈를 보면 커널도 swap in/out이 발생합니다.
이런 것을 보면 MS윈도우즈는 커널도 페이지 테이블을 사용한다는 것을 알 수 있는데요.
리눅스나 다른 유닉스는 어떻게 구현되어 있는지 모르겠군요.
하지만 유닉스 계열 OS를 보면 shell에서 실시간으로 프로세스의 max fd나 stack 사이즈 등을 변경할 수 있는 것을 보면
프로세스 정보를 담는 메모리의 크기는 부팅시 결정되는 아니라 프로세스 생성시에 결정된다는 것을 유추할 수 있습니다.
그렇다면 커널도 자신이 사용하는 메모리가 동적으로 변할 필요가 있을 것이고요.
동적으로 변할려면 페이징 기법을 활용해야겠죠? 그렇지 않고 free 메모리를 많이 남겨두었다면 메모리 낭비가 심할테니깐요.
음.. 그럼 결론은 unix 계열 커널도 페이지 테이블을 사용해야한다 인가요? ^^;
댓글 달기