Relocation과 PIC

프로그램이 여러 개의 오브젝트 파일로 구성되어 있는 경우 서로의 데이터를 접근하거나 코드를 호출해야 하는데, 링킹을 하기 전까지는 정확한 주소를 알 수 없다. 그래서 컴파일때 이러한 부분들을 적절히 기록해놓고 링킹 때 코드를 수정하여 올바른 주소를 가리키도록 하는 일련의 과정이 필요한데, 이를 Relocation이라고 한다. 다음 예시를 보자. bar.c에서 foo를 접근하는데 아직 foo의 주소를 모르는 상황이다. 그래서 foo를… Continue reading Relocation과 PIC

mmap의 최소 주소값

앞선 ELF 글에서 신경쓰지 않았던 부분이 있는데, 링크시에 text 섹션의 위치를 조절하여 프로그램이 로드되는 가상 주소와 entry point를 조절할 수 있다. 그런데 text 섹션의 위치를 0x10000 보다 낮게 설정하면 segfault가 발생하는 것을 볼 수 있다. 결론부터 말하자면, 파일 내용을 가상 주소에 올릴때 mmap을 사용하는데 매핑 가능한 최소 주소가 높게 설정되어 있을 수 있다. 이 값을… Continue reading mmap의 최소 주소값

ELF 스터디

ELF(Executable and Linkable Format)은 executable file, object file 등에 널리 사용되는 포맷이다. C 컴파일러로 컴파일한 .o 파일이나 링킹까지 마친 a.out 등이 ELF로 되어있다. 리눅스에서 밥먹듯이 사용하는데 내부 구조를 살펴본 적은 없어서 간단하게 공부해 보았다. File Header 다른 파일 포맷과 마찬가지로 첫 부분은 파일 헤더가 차지한다. 32-bit 주소를 사용할 경우 52-byte, 64-bit 주소를 사용할 경우 64-byte를… Continue reading ELF 스터디

Linux 관리

Linux 서버 관리 하면서 만나는 상황들 적는 글. 계속 업데이트 됨. Package Management – Ubuntu Package Version 버전 요구사항이 가장 까다로운 Lustre를 먼저 체크해서 OS, kernel, OFED 버전을 정하자. 예를 들어, 제공되는 설치파일 경로가 아래와 같다 치자. 그러면, OFED-4.7-1.0.0.1, Ubutun 18.04, Linux kernel 4.15.0-64를 맞추어 설치해야 된다. Minor version까지는 달라도 될 수 있지만 (예를 들어,… Continue reading Linux 관리

AMD 망했으면

AMD GPU 관련해서 조우한 문제점들 적는 글. 계속 업데이트 됨. mpirun Hang AMD GPU가 탑재된 서버에서 뜬금없이 mpirun이 안되는 경우가 있다. 원인분석을 위해 strace를 따봤더니 /tmp/.X11-unix/X0 소켓에 연결 후 응답을 기다리고 있었다.서버에 설치된 X 서버가 Xorg임을 확인하고 로그를 확인하니 오류가 있었다. Xorg 잘못인지 AMD 잘못인지는 시간이 없는 관계로 더 추적해보지는 않았다. 또한 왜 mpirun이 굳이… Continue reading AMD 망했으면

컴퓨터 업그레이드

지금 기숙사에서 쓰는 컴퓨터 스펙이다. 2015년 3월에 샀으니 거의 6년을 썼는데, 잔고장 한번 없이 잘 버텨주었다. 끔찍한 파랑색 LED가 달린 케이스 빼고는 훌륭한 구성이다. 그런데 요즘 들어서 브라우저 + 안드로이드 에뮬레이터 + 게임 + 스트리밍 이런식으로 작업을 잔뜩 틀어놓고 쓰다보니 GPU는 괜찮은데 CPU 병목이 심해서 60프레임이 안뽑히는 경우가 많았다.라이젠이 그렇게 잘 뽑혔다고들 하니, 다른 부품은… Continue reading 컴퓨터 업그레이드

블로그 시작

글과 사진으로 기록을 남기는 것이 중요하다고 생각한다. 그래서 여러번 블로그를 시작했지만 2~3개의 글을 쓴 후 귀찮음으로 버려두곤 했다. 글 쓰기 장벽을 최대한 낮추어 다시 시도해본다. 새 블로그를 구축하면서 고려한 사항은 다음과 같다. WordPress도 괜찮지만 무거운 감이 있어서, Jekyll을 사용하기로 했다. 테마는 자주 보던 블로그를 본따 Jekyll Now를 사용했다. 다 좋은데, ruby 기반인게 개인적으로 맘에 안든다.… Continue reading 블로그 시작