링커, 로더, 실행 파일

100개의 프로세스가 같은 공유 라이브러리를 사용하고 있을 때, 물리 메모리 사용 방식으로 올바른 것은?

  1. A바뀌지 않는 코드 페이지는 하나의 사본을 공유하고, 쓰기가 일어나는 데이터 페이지는 프로세스마다 가진다
  2. B코드도 데이터도 프로세스마다 100개의 사본을 가진다
  3. C데이터 페이지까지 포함해 모두 하나를 공유하며, 프로세스끼리 값이 보인다
정답과 해설 보기

정답: A. 바뀌지 않는 코드 페이지는 하나의 사본을 공유하고, 쓰기가 일어나는 데이터 페이지는 프로세스마다 가진다

OS는 각 프로세스의 가상 주소 공간에 공유 라이브러리를 대응시키고, 바뀌지 않는 코드나 상수의 페이지는 같은 물리 페이지를 가리키게 합니다. 변수 같은 쓰기 데이터 페이지는 쓰기가 일어난 시점에 사본을 만드는(카피 온 라이트) 등의 방법으로 프로세스마다 따로 둡니다. 이렇게 해서 100개의 프로세스라도 라이브러리 코드 몫의 메모리는 하나로 충분합니다.

  • A. 올바릅니다. 가상 메모리로 같은 물리 페이지를 대응시킵니다.
  • B. 코드까지 복사하면 공유 라이브러리의 이점이 없어집니다.
  • C. 데이터는 프로세스마다 분리됩니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. 오브젝트 파일을 역어셈블했더니 외부 함수 printf를 호출하는 명령의 분기 대상이 0 같은 임시 값으로 되어 있었다. 이 값은 언제 올바르게 채워지는가?
  2. 임베디드 개발에서 사용하는 링커 스크립트의 역할로 올바른 것은?
  3. OS가 없는 마이컴에서 전원을 켠 직후, 시작 코드가 main을 호출하기 전에 수행하는 처리로 올바른 것은?
  4. ELF 파일에서 「섹션」과 「세그먼트」의 차이로 올바른 것은?
  5. 메모리 페이지에 「쓰기 가능」과 「실행 가능」을 동시에 허용하지 않는(W^X, 쓰기와 실행의 분리) 것으로 막기 쉬워지는 공격은?

이 분야의 비교