
링커(컴파일 후 링크를 수행하기 위한)와 로더(실행 파일을 실행하기 위한)의 존재는 Linux와 같은 운영 체제에 의존하지 않습니까? (Linux의 링커와 로더는 OS에서 제공하는 것으로 생각했거나 다른 응용 프로그램과 마찬가지로 소프트웨어로 제공하는 것으로 생각했습니다. 이제는 매우 특별하고 다르다고 생각합니다. 어떤 OS가 설치되어 있는지에 관계없이 동일할 수 있습니다.)
링커와 로더가 기계어, 즉 ISA 수준에 존재합니까? (그 수준에서는 OS가 없습니다.) 아니면 어셈블리 언어 수준인가요?
프로그래밍 소프트웨어의 관점에서 OS를 프로그래밍 라이브러리(라이브러리)로 생각하는 것이 맞나요?
감사해요.
컴퓨터 시스템의 레벨/레이어에 링커와 로더를 어디에 배치해야 하는지 알고 싶습니다.
컴퓨터 시스템의 레이어/레벨에 대해서는 Nisan의 The Elements of Computer Systems:를 참조하세요.
연결 및 로드에 대해서는 다음을 참조하세요.컴퓨터 시스템: 프로그래머의 관점
답변1
링커(컴파일 후 링크를 수행하기 위한)와 로더(실행 파일을 실행하기 위한)의 존재는 Linux와 같은 운영 체제에 의존하지 않습니까? (Linux의 링커와 로더는 다른 응용 프로그램과 마찬가지로 OS나 소프트웨어에서 제공하는 것으로 생각했습니다. 이제 그것들은 매우 특별하고 다르다고 생각합니다.)
링커와 로더는 다른 응용 프로그램과 마찬가지로 특정 목적을 가지고 있습니다. 이는 정적 프로그램을 구축하고 동적 프로그램을 구축 및 로드하는 데 중요하지만 "일반적인" 애플리케이션(또는 런타임 로더의 경우 라이브러리)입니다.즉복잡하기는 하지만 운영 체제의 특별한 지원에 의존하지는 않습니다.
따라서 한 운영 체제의 프로그램을 다른 운영 체제에 연결하는 것이 가능합니다(예를 들어Linux에서 Windows 프로그램을 빌드하거나 그 반대로), 한 시스템용으로 빌드된 동적으로 링크된 프로그램을 다른 시스템에서 로드합니다(Wine 참조). 운영 체제에 대한 주요 요구 사항은 새로운 실행 가능한 콘텐츠를 로드하는 방법을 제공한다는 것입니다(즉실행 중인 프로그램이 실행 가능한 메모리를 자체에 추가할 수 있도록 허용하고, 프로그램의 요구 사항(특히 실행 파일 및 라이브러리를 로드하기 위한 기본 주소)을 충족할 수 있도록 가상 주소 공간에 대한 충분한 제어를 허용합니다.
링커와 로더가 기계어, 즉 ISA 수준에 존재합니까? (그 수준에서는 OS가 없습니다.) 아니면 어셈블리 언어 수준인가요?
무엇이 이러한 질문을 하게 되었는지는 잘 모르겠지만 링커는 기호와 주소를 사용하여 작동합니다. 가져오고 내보낸 기호 테이블이 포함된 개체 파일과 링커에서 계산한 값이 채워지는 재배치 항목을 사용합니다.
OS를 프로그래밍 라이브러리(라이브러리)로 생각하는 것이 맞습니까?
그것은 매우 제한적입니다. 운영 체제는 그 위에서 실행되는 응용 프로그램에 일부 서비스를 제공하지만 매우 간단한 운영 체제(8비트 마이크로, MS-DOS 등)의 경우에도 그 이상을 수행합니다. 예를 들어, 하드웨어 인터럽트를 처리하고, 프로세스를 예약하고(멀티태스킹 시스템의 경우), 액세스 권한을 제어합니다(액세스 제어가 있는 다중 사용자 시스템의 경우).
나는 당신이 언급한 다이어그램이 컴퓨터 아키텍처를 이해하는 방법보다는 책 지도로서 더 유용하다는 인상을 받았습니다.