로더(컴퓨팅)

Loader (computing)

컴퓨터 시스템에서 로더는 프로그램라이브러리로드하는 운영 체제의 일부입니다.프로그램을 메모리에 저장하고 실행을 준비하기 때문에 프로그램을 시작하는 과정에서 필수적인 단계 중 하나입니다.프로그램을 로드하는 것은 프로그램 명령을 포함하는 실행 파일의 내용을 메모리에 읽고 실행 파일을 실행하기 위해 준비 작업을 수행하는 것을 포함한다.로드가 완료되면 운영체제는 로드된 프로그램 코드에 제어 권한을 넘겨 프로그램을 시작합니다.

프로그램 로딩을 지원하는 모든 운영체제는 로더를 갖추고 있지만, 고도로 특수한 컴퓨터 시스템은 고정 프로그램 세트만 갖추고 있습니다.임베디드 시스템에는 일반적으로 로더가 없습니다.대신 코드는 ROM 등에서 직접 실행됩니다.operating system 자체를 로드하려면 , 기동시의 일부로서 전용의 부트로더를 사용합니다.가상 메모리를 지원하는 일부 운영 체제에서는 페이지 가능한 메모리 영역에 로더를 배치할 수 있지만 대부분의 운영 체제에서는 로더가 메모리에 영구적으로 상주합니다.

가상 메모리를 지원하는 운영 체제의 경우 로더는 실제로 실행 파일의 내용을 메모리에 복사하는 것이 아니라 실행 중인 프로그램의 코드를 포함하도록 할당된 메모리 영역과 관련된 실행 파일의 내용 사이에 매핑이 있음을 가상 메모리 서브시스템에 선언할 수 있습니다.le. (메모리 매핑파일 참조)가상 메모리 서브시스템은 프로그램 실행이 실제로 메모리 미충족 영역에 도달했을 때 메모리 영역을 가진 페이지를 온 디맨드로 채울 필요가 있음을 인식합니다.이것은 프로그램 코드의 일부가 실제로 사용될 때까지 실제로 메모리에 복사되지 않고 사용되지 않은 코드가 메모리에 전혀 로드되지 않을 수 있음을 의미합니다.

책임

Unix에서는 로더는 시스템콜핸들러입니다 execve()Unix Loader의 태스크는 다음과 같습니다.[1]

  1. 검증(허가, 메모리 요건 등)
  2. 메모리 디스크에서 메인 메모리에 실행 가능한 오브젝트를 저장한다.
  3. 명령줄 인수를 가상 메모리에 복사한다.
  4. 레지스터 초기화(예: 스택 포인터);
  5. 프로그램 진입점으로 점프(_start).

Microsoft Windows 7 이상에서는 로더는LdrInitializeThunkntdll.dll에 포함된 함수는 다음과 같습니다.

  1. DLL 자체의 구조 초기화(, 중요 섹션, 모듈 목록)
  2. 로드할 실행 파일의 유효성 검사
  3. (함수를 통해) 의 생성RtlCreateHeap);
  4. 환경 변수 블록 및 PATH 블록 할당
  5. 모듈 목록에 실행 파일 및 NTDLL 추가(복수 링크 목록)
  6. KERNAL32 로드.를 들어 몇 가지 중요한 함수를 얻기 위한 DLLBaseThreadInitThunk;
  7. 실행 파일의 Import(즉, 동적 링크 라이브러리)를 재귀적으로 로드한다(imports의 Import, Import 등을 체크한다).
  8. 디버깅 모드에서 시스템 브레이크 포인트 상승
  9. DLL 초기화
  10. 가비지 수집
  11. 부르기NtContinue로더 기능에 주어진 컨텍스트 매개 변수(즉, 로 점프)RtlUserThreadStart실행 파일을 기동합니다).

로더의 재배치

일부 운영 체제에서는 로더를 재배치해야 합니다.로더는 로딩이 시작되는 주소의 변화를 보상하기 위해 실행 파일의 주소(포인트)를 조정합니다.로더를 재배치할 필요가 있는 운영체제는 프로그램이 항상 주소 공간의 동일한 위치에 로드되지 않고 포인터가 프로그램의 기본 주소에서 오프셋이 아닌 절대 주소인 운영체제이다. 알려진 예로는 IBM의 System/360 메인프레임용 OS/360과 z/Architecture 메인프레임용 z/OS를 포함한 후속 제품이 있습니다.

OS/360 및 파생 모델

반면(non-privileged)LOADER한 적용 그리고 전적으로 OS는 감독자에 비록 확실히 사람을 사용하여 외부의 동일한 기능의, 멋진 사람들은 링키지 에디터의 많은 수행할 수 있OS/360과 후손 장치에서(특권)운영 체제 설비 IEWFETCH,[2]과 OS는 감독자의 내부 구성 요소로 불린다.S:업바이저 서비스)를 참조해 주세요.

IEWFETCH는 고도의 전문 채널 프로그램을 이용하기 때문에 이론상으로는 DASD 미디어의 1회전 이내에 실행 파일 전체를 로드하여 재배치할 수 있습니다('레거시' 3,600 rpm 드라이브의 경우 최대 약 16.6밀리초, 평균 8.3밀리초).크기가 트랙을 초과하는 로드 모듈의 경우 미디어의 회전수를 잃지 않고 모듈 전체를 로드 및 재배치할 수도 있습니다.

IEWFETCH는, 이른바 오버레이 구조용의 기능을 짜넣어, 최소의 메모리 모델(OS 의 일부 버전에서는 44 KB 로 작은 것이 일반적이지만, 88 KB 와 128 KB 가 일반적입니다.

OS의 핵(슈퍼바이저의 항상 상주하는 부분) 자체는 IEWFETCH의 제거 버전과 호환되도록 포맷되어 있습니다.일반 실행 파일과 달리 OS의 핵은 "산란 로드"되어 있습니다.핵의 일부는 메모리의 다른 부분에 로드됩니다.특히, 특정 시스템 테이블은 초기 64KB 미만으로 배치되어야 하며, 다른 테이블과 코드는 다른 곳에 배치되어야 합니다.

시스템의 Linked Editor 어플리케이션은 IEWL이라고 [3]불립니다.IEWL의 주요 기능은 로드 모듈(실행 가능한 프로그램)과 오브젝트 모듈(예를 들어 어셈블러 및 컴파일러로부터의 출력)을 IEWCH에 의해 가장 효율적으로 로드될 수 있는 포맷으로 연결하는 것입니다.많은 편집 옵션이 있지만, 종래의 애플리케이션에서는, 이 중 몇개만이 일반적으로 채용되고 있습니다.

로드 모듈 형식에는 첫 번째 "텍스트 레코드"가 포함되며, 그 직후에 해당 텍스트 레코드의 "위치 변경 및/또는 제어 레코드"가 포함되며, 모듈이 끝날 때까지 텍스트 레코드와 재배치 및/또는 제어 레코드 쌍의 더 많은 인스턴스가 포함됩니다.

텍스트 레코드는 보통 매우 큽니다.IEWFETCH의 3개의 재배치 및/또는 제어 레코드 버퍼는 260바이트로 고정되어 있기 때문에 재배치 및/또는 제어 레코드는 작습니다(확실히 작은 재배치 및/또는 제어 레코드는 가능하지만 260바이트는 최대이며 IEWL은 애드 삽입에 의해 이 제한을 확실히 충족시킵니다).필요에 따라 다음 텍스트 기록 이전의 임시 재배치 기록(필요한 경우), 이 특별한 경우 기록의 순서는 ..., 텍스트 기록, 재배치 기록, ..., 제어 기록, 텍스트 기록, 텍스트 기록, ...)이 될 수 있다.

재배치 및/또는 제어 레코드 버퍼 내의 특수 바이트는 "비활성 비트 스핀" 통신 영역으로서 사용되며, 고유 값으로 초기화된다.해당 재배치 및/또는 제어 레코드의 읽기 CCW에는 Program Controlled Interrupt 비트가 설정되어 있습니다.따라서 특별한 IOS 출구를 통해 채널에 의해 CCW가 액세스되면 프로세서에 통지됩니다.이 시점에서 프로세서는 "비활성 비트 스핀" 루프('세계에서 가장 짧은 루프'라고도 함)에 들어갑니다.바이트가 초기화 값에서 변경되면 재배치 및/또는 제어 레코드와 다음 텍스트 레코드 사이의 미디어 내 "갭" 동안 CPU는 비트 스핀을 종료하고 재배치됩니다.다음 레코드 전에 재배치가 완료되면 Read에 이은 NOP CCW가 TIC로 변경되고 로드 및 재배치가 다음 버퍼를 사용하여 진행됩니다.그렇지 않은 경우 채널은 다른 특별한 IOS 출구를 통해 IEWFETCH에 의해 재시작될 때까지 NOP CCW에서 정지합니다.3개의 버퍼는 연속된 순환 큐에 있으며, 각각은 다음 버퍼와 마지막 버퍼를 가리키며, 3개의 버퍼는 로드 및 재배치가 진행됨에 따라 항상 재사용됩니다.

따라서 IEWFETCH는 가능한 한 짧은 시간에 실제 크기의 부하 모듈을 로드 및 재배치할 수 있습니다.

다이내믹 링커

동적 링크 로더는 공유 라이브러리(.so 파일, .dll 파일 또는 .dylib 파일 등)를 로드하여 이미 로드된 실행 중인 프로그램에 링크하는 또 다른 유형의 로더입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "exec". The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. The Open Group. Retrieved 2008-06-23.
  2. ^ IBM Corporation (1972). IBM OS MVT Supervisor (PDF).
  3. ^ IBM Corporation (1972). IBM OS Linkage Editor and Loader (PDF).