GDT와 세그먼트에 대한 질문이 있습니다.
글쓴이: HellBringer / 작성시간: 화, 2010/05/18 - 7:49오후
안녕하세요? 요즘 OS와 어셈블리어에 대해서 공부하는데 모호한 부분이 있어서 질문드립니다.
프로세스가 생성되면 4GB공간에 코드, 데이터, 스택, 힙 섹션이 세그먼트로 생성되는 것으로 알고 있습니다.
그러면 프로그램이 실행될때마다 GDT에 이 모든 세그먼트가 추가되는건가요?
Forums:
그냥 운영체제에서
그냥 운영체제에서 GDT에 코드, 데이터 등의 커다란 세그먼트를 몇 개 만들어서 그 세그먼트를 운영체제가 분할해 줍니다.
이런 식으로
이런 식으로 이해하면 될까요?
말씀하신대로 GDT에 코드, 데이터 등의 세그먼트를 커다랗게(예를 들어 100MB) 나누고, 프로세스A가 실행되면 그중의 10MB를 사용하게 하고, 프로세스 B가 실행되면 그다음부터의 10MB를 사용..
제가 가진 어셈블리어 책과 OS책에는 실행파일의 섹션과 GDT가 어떻게 관계되는지 설명이 충분하지 못해서(혹은 제가 이해를 못하거나요..-_-;) 이해가 잘 안되네요.
책이나 웹링크도 괜찮습니다. 알려주세요.
운영체제마다 다른
운영체제마다 다른 방식을 쓸 수 있긴 합니다.
(x86 기준으로 작성입니다.)
제가 말한 방식은 모든 태스크가 동일한 GDT의 세그먼트를 이용하며 각각은 다른 페이징 테이블을 이용하여 같은 논리 주소를 가져도 다른 물리 주소를 가질 수 있습니다.
예를 들어 유저모드에 2기가 커널모드에 2기가 선형으로 할당하고 이용 하는 부분에만 페이지를 연결 시키면 됩니다.
공유 메모리를 이용하는 부분은 물리메모리 주소 할당하면 되고요
그리고 운영체제는 페이지를 어떻게 할당하고 해제할지에 대해서만 고민하고 세그먼트에 대해서 신경을 거의 쓰지 않아도 됩니다.
페이징 디렉토리 테이블이나 페이징 테이블, 페이지 엔트리 등 어찌되었든 페이지관련을 교체할 때 TBL을 날려줘야 합니다. 그렇지 않으면 잘못된 위치를 찾아갑니다.
자세한 점은 아랫분께서 ^_^;; 물론 제가 틀린 부분 수정도 아랫분께서..
부탁좀 굽신굽신
댓글 달기