misc.c의 extern int end 변수에 대해서....

송형주 2007.04.16 06:49 조회 수 : 5423 추천:133



에구구...저녁먹고, 이제야 복습하게 되네요..

misc.c의 extern int end 변수를 커널 2.4를 이용해서 테스트좀 해봤습니다.

우선, /usr/src/linux에서 압축하기전의 커널(vmlinux)에서,
'end' 심볼을 찾아봤습니다.
_______________________________________________________________
[root@localhost linux-2.4]# nm vmlinux | grep -w end
[root@localhost linux-2.4]#
[root@localhost linux-2.4]# nm vmlinux | grep -w _end
c048eb18 A _end
[root@localhost linux-2.4]#
_______________________________________________________________

그런데, 위와 같이 end라는 심볼은 없고, _end만 있더군요...
(이건, 저희가 스터디에서, vmlinux에서 end라는 심볼이 있다고, 가정한 것과는 다른 결과죠???)

그래서, 압축된 커널인 bvmlinux에서 end 라는 심볼을 찾아봤습니다.
end, _end 심볼이 모두 보이더군요.
이 심볼은 head.o와 misc.o에서 모두 참조할 수 있는 주
_______________________________________________________________
[root@localhost compressed]# nm bvmlinux | grep -w end
00270360 A end
[root@localhost compressed]# nm bvmlinux | grep -w _end
00270360 A _end
[root@localhost compressed]#
_______________________________________________________________


그래서 이 결과를 종합해보면, 다음과 같은 결론이 나올것 같습니다.

ld(링커)에서 -T 옵션을 사용해서, 링커 스크립트를 명시적으로 지정하지 않는 한,
내부 링커 스크립트(Interal Linker Script)를 사용하더군요.

분명 내부 링커 스크립트에는, 아래와 같이 _end와 end가 명시되어 있습니다.

(생략)

  _end = .;
  PROVIDE (end = .);         // 여기서 PROVIDE (end)는 _end와 같은 위치를 가진, end 심볼을 만든다.

(생략)


head.o misc.o piggy.o 를 링킹해서 bvmlinux를 만들 때는, 내부 링커 스크립트에 의해
_end, end가 삽입될 것 같습니다.
그래서인지, misc.c 에서 end를 참조할 수 있을 것 같구요..
그렇다면, end는 압축된 커널(bvmlinux)의 크기를 나타내느 것이 맞을 듯 싶은데요??

/usr/src/linux에 있는 vmlinux는 vmlinux.lds 라는 자체 링커 스크립트를 사용하고,
그 파일에선 end 심볼이 정의되어 있지 않은 것도 논리적으로 맞을 것 같구요..


즉 end는 스터디에서 예기했던, 압축하기 전의 커널 오브젝트의 크기가 아닌, 압축후의
커널 오브젝트의 크기가 맞을 것 같습니다.

그런, 의미로 low buffer와 high buffer를 setup하고 압축을 푸는 과정을 다시 그림으로 그려봤습니다.

물론, 커널 2.6에서는 정확히 테스트 해보지는 않았지만요..
혹, 누가 해보셨다면 결과를 알려주시면 감사하겠습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2200
1645 오 이런;; 김종화 2007.04.14 4502
1644 Makefile를 보다가.. [1] file 김종화 2007.04.15 4982
1643 compressed/misc.c 의 end 라는 심볼에 대하여 지현구 2007.04.15 3427
1642 인터넷 공유기.. 박경태 2007.04.15 2893
» misc.c의 extern int end 변수에 대해서.... [9] file 송형주 2007.04.16 5423
1640 저번주 참석을 못하게 되었네요.. ㅜ.ㅜ [1] 김정수 2007.04.16 2971
1639 x86_64 컴파일 하신분?? [4] 송형주 2007.04.17 9805
1638 이번주 21일 불참입니다 [2] 김강년 2007.04.18 4632
1637 저도 21일 불참.. ㅡ.ㅡ; [2] 정필섭 2007.04.19 4433
1636 저희 이번주 스터디? [1] 변유준 2007.04.20 4539
1635 이번주는 휴강하도록 하죠... [2] 정찬성 2007.04.20 4613
1634 저도 불참하겠습니다. 변유준 2007.04.21 4632
1633 죄송 합니다. 제가 좀 많이 늦을꺼 같습니다. !!!!! 강형석 2007.04.21 3340
1632 Intel 아키텍쳐 매뉴얼 배송받는 방법 [6] 김정수 2007.04.22 5803
1631 mov init_rsp(%rip),%rsp 에 대해.. [3] 송형주 2007.04.23 5350
1630 AMD64 메뉴얼 제본 하실분들 댓글 남겨주세요~ [15] 남현우 2007.04.23 3776
1629 안녕하세요 [1] 이수연 2007.04.23 3473
1628 음... 저번주엔 모이질 않았군요. [1] 정필섭 2007.04.24 4666
1627 이름 매칭.. [9] 박경태 2007.04.25 3744
1626 AMD64 페이징 관련 한글 번역... [1] 박경태 2007.04.25 4002
XE Login