메모리 메니지먼트...추가 질문...?
글쓴이: kkojiband / 작성시간: 수, 2003/06/25 - 12:22오후
먼저, 저기 밑에 답변해주신 분께 감사드립니다^^
메모리 메니지먼트에 대해서는 이론적으로는 공부한적이 있습니다. 그래서 gdt, ldt이런거에 대해 대충 개념은 알고 있는데, 실질적으로 프로그램 디버깅해보면 이게 어떻게 되는거지 하고 알쏭달쏭한 경우가 많습니다...--;
만약에 프로그램이 실행되면, 각 프로그램들은 자신들의 ldt 를 만들잖아요
그 때 .text, .rodata, .data 같은 각각의 섹션들을 하나의 entry 로 해서 만드는건가요?
실행 파일을 디버깅이나 덤프해서 보면 나오는 주소들은 어떻게 나온 것들인가요?
예를 들어, call 0x080482bc 이렇게 되있다면,
옆에 머신코드를 보니까 e8 49 ff ff ff 이런식으로만 나오던데요...
너무 어렵네요...T.T
아시는 분들 좀 도와주세요~ 부탁드립니다~
Forums:
리눅스에서는 ldt를 안 쓰는 걸로 알고 있습니다.음... 혹시나
리눅스에서는 ldt를 안 쓰는 걸로 알고 있습니다.
음... 혹시나, 자세히 아시는 분 설명좀...
그럼 고운 하루되시길...
=========================
CharSyam ^^ --- 고운 하루
=========================
리눅스에서는 GDT만 쓰고요. (몇개 안써요.)특권레벨 0 과 3
리눅스에서는 GDT만 쓰고요. (몇개 안써요.)
특권레벨 0 과 3만 사용합니다.
커널은 0을 쓰고 App들은 3을 사용합니다.
전부 선형 메모리를 사용하고요.
Task를 관리하는 방법은
INTR시 iret에 의하여
리턴하기전에 Schedule 구조체 (레지스터들을 담고 있고)
를 현재 레지스터에 세팅하고 리턴하게 되어 Task가 전환됩니다.
당연히 이전의 레지스터는 저장하고 current = current->next가 수행되겠죠.
즉, LDT를 사용할 이유가 거의 없게 되죠.
만약 LDT를 사용한다면 Process수가 8192를 넘지 못하죠.
항상 DS와 ES는 같다고 보시면 되고요.
SS는 기본적으로 DS,ES와 같지만 경우에 따라서 스택을 바꿔치기 하는
경우를 사용할수 있으므로 반드시 같다고 볼수 없습니다.
8의 배수로 CS,DS,ES,SS 가 지정되고 커널에서는 하위 2비트가 0이고
User들은 3을 갖습니다.
FS, GS는 기본적으로 특별히 사용하지 않으므로 0으로 되어 있습니다.
댓글 달기