2014-12-26 4 views
2

리눅스 컴퓨터에서 프로세스를로드 할 때 로더의 역할은 무엇입니까? 그것은 단지 가상 주소 공간을 만들거나 스택 포인터를 설정하고, BSS 세그먼트를 0으로 초기화하는 등의 다른 작업도 수행합니까? 아니면 C 런타임 라이브러리가 그 작업과 관련이 있습니까?로더의 역할

+0

다른 초기화 된 전역 변수뿐만 아니라 BSS가 프로세스의 메모리 공간에로드 된 실행 가능 이미지의 일부가 될 것으로 기대합니다. 따라서 이러한 변수에 런타임 초기화가 필요하지 않습니다. 그런데 스택 포인터는 하나뿐입니다. 실행 가능한 이미지가 잘 정의 된 세그먼트에서 프로그램의 초기 실행과 관련된 값을 포함하므로 OS가 레지스터를 올바르게 설정할 수 있습니다 (예 : SP = 스택 기본 주소, PC = 'main'의 주소 등). –

+2

@barakmanos : 단일 스레드 프로세스는 단일 스택 포인터 만 갖기 때문에 (시작 프로세스는 단일 스택 포인터 만 갖습니다), 다중 스레드 프로세스는 각 스레드에 대해 별도의 스택 포인터를 갖습니다. –

+0

@barakmanos : ELF 실행 파일에는 BSS 세그먼트가 없습니다. BSS 세그먼트는 로더 또는 런타임 초기화에 의해 설정됩니다. - 제 질문입니다. 스택이 고려되는 한, 주소 공간은 랜덤 화되므로 스택에는 컴파일러가 알고있는 고정 주소가 없습니다. – tapananand

답변

1

주소 공간을 생성하지 않습니다. 그것이 커널의 일입니다. 커널은 또한 스택을 설정합니다. 로더는 BSS 세그먼트에 0을 매핑하는 것을 포함하여 프로그램과 라이브러리를 주소 공간에로드합니다. 대부분의 Linux 시스템/프로그램은 GNU C 라이브러리 glibc와 함께 제공되는 로더를 사용합니다.

+0

그러면 런타임 초기화는 무엇을합니까? – tapananand

+0

@TapanAnand : 무엇이든지해야합니다. 로더는 실행 파일과 라이브러리를 주소 공간에로드하고 수행해야 할 재배치를 처리합니다. libc를 포함한 다른 라이브러리는 적절하게 초기화되도록 남아 있습니다. – SamB

+0

누가 bss를 0으로 초기화하고 스택을 누가 설정합니까? – tapananand

관련 문제