링커와 로더의 존재 여부는 리눅스 등 운영체제에 따라 달라지는 것 아닌가요?

링커와 로더의 존재 여부는 리눅스 등 운영체제에 따라 달라지는 것 아닌가요?

링커(컴파일된 링크를 수행하기 위한)와 로더(실행 파일을 실행하기 위한)의 존재는 Linux와 같은 운영 체제에 의존하지 않습니까? (저는 예전에는 Linux의 링커와 로더가 운영 체제에서 제공되거나 다른 응용 프로그램과 같은 소프트웨어에서 제공된다고 생각했습니다. 이제는 매우 특별하고 다르다고 생각합니다. 어떤 운영 체제를 설치하더라도 아마도 동일할 것입니다.)

링커와 로더가 기계어(예: ISA 수준)에 존재합니까? (그 수준에서는 운영체제가 없습니다.) 아니면 어셈블리 언어 수준인가요?

프로그래밍 소프트웨어 관점에서 운영 체제를 프로그래밍 라이브러리로 생각하는 것이 맞습니까?

감사해요.

레벨/레이어에서 링커와 로더가 컴퓨터 시스템의 어디에 설치되어 있는지 알고 싶습니다.

컴퓨터 시스템의 수준에 대한 자세한 내용은 Nisan의 "컴퓨터 시스템 요소"를 참조하세요.

여기에 이미지 설명을 입력하세요.

연결 및 로드에 대해서는 다음을 참조하세요.컴퓨터 시스템: 프로그래머의 관점

답변1

링커(컴파일된 링크를 수행하기 위한)와 로더(실행 파일을 실행하기 위한)의 존재는 Linux와 같은 운영 체제에 의존하지 않습니까? (저는 Linux의 링커와 로더가 운영 체제에서 제공되거나 다른 응용 프로그램과 같은 소프트웨어에서 제공된다고 생각했습니다. 이제는 매우 특별하고 다르다고 생각합니다.)

다른 응용 프로그램과 마찬가지로 링커와 로더도 특정 용도로 사용됩니다. 이는 정적 프로그램을 구축하고 동적 프로그램을 구축 및 로드하는 데 중요하지만 "일반적인" 애플리케이션(또는 런타임 로더의 경우 라이브러리)입니다.복잡하기는 하지만 운영 체제의 특별한 지원에 의존하지 않는다고 할 수 있습니다.

따라서 한 운영 체제의 프로그램을 다른 운영 체제에 연결할 수 있습니다(예를 들어Linux에서 Windows 프로그램을 빌드하고 그 반대의 경우도 마찬가지입니다. 한 시스템용으로 빌드된 동적 링커를 다른 시스템에 로드합니다(Wine 참조). 운영 체제의 주요 요구 사항은 새로운 실행 가능한 콘텐츠를 로드하는 방법을 제공하는 것입니다(실행 중인 프로그램이 자체적으로 실행 가능한 메모리를 추가할 수 있도록 하고 프로그램의 요구 사항(특히 실행 파일과 라이브러리를 로드하는 데 사용되는 기본 주소)에 맞게 가상 주소 공간을 충분히 제어할 수 있도록 합니다.

링커와 로더가 기계어(예: ISA 수준)에 존재합니까? (그 수준에서는 운영체제가 없습니다.) 아니면 어셈블리 언어 수준인가요?

이러한 문제의 원인이 무엇인지는 잘 모르겠지만 링커는 기호와 주소를 사용하여 작동합니다. 가져오기 및 내보내기 기호 테이블이 포함된 개체 파일과 링커에서 계산한 값으로 채워진 재배치 항목을 사용합니다.

운영 체제를 프로그래밍 라이브러리로 생각하는 것이 맞습니까?

이것은 매우 제한적입니다. 운영 체제는 실행 중인 응용 프로그램에 일부 서비스를 제공하지만 매우 간단한 운영 체제(8비트 마이크로프로세서, MS-DOS 등)의 경우에도 그 이상을 수행합니다. 예를 들어 하드웨어 인터럽트, 예약 등을 처리합니다. 프로세스(멀티태스킹 시스템용), 액세스 권한 제어(액세스 제어 기능이 있는 다중 사용자 시스템용)...

내 생각에는 당신이 언급한 다이어그램이 컴퓨터 아키텍처를 이해하는 방법보다는 책 지도로 더 유용하다는 것입니다.

관련 정보