병렬 어셈블리

Side-by-side assembly

병렬 어셈블리(Microsoft Windows의 경우 SxS 또는 WinSxS) 테크놀로지는 Windows 98 Second Edition, Windows 2000 및 그 이후의 Windows 버전에서 Microsoft에서 Dynamic-Link Library(DLL; 동적 링크 라이브러리) 사용으로 인해 발생하는 문제(이하 "DLL Hell")를 완화하는 실행 파일의 표준입니다.이러한 문제에는 버전 충돌, DLL 누락, 중복 DLL 및 잘못된 등록 또는 누락이 포함됩니다.이 경우 Windows는 여러 버전의 DLL을 Windows 디렉터리의 하위 디렉터리에 저장하고 필요에 따라 로드합니다.따라서 병렬 매니페스트를 포함하는 응용 프로그램의 종속성 문제가 줄어듭니다.

Microsoft Visual C++ 2005 및 2008은 모든 C 런타임 라이브러리와 함께 SxS를 사용합니다.그러나 Visual C++ 2010 런타임 라이브러리는 더 이상 이 기술을 사용하지 않습니다. 대신 파일 이름에 DLL 버전 번호가 포함됩니다. 즉,[1][2] DLL의 다른 버전이 기술적으로 완전히 다른 DLL이 됩니다.

SxS는 등록이 필요 없는 COM 활성화의 기술적 기반이기도 합니다.이 방법으로 활성화할 수 있는 것은 처리 중인 COM 서버뿐입니다.

작동

SxS를 사용하는 응용 프로그램에는 매니페스트가 있어야 합니다.매니페스트는 일반적으로 응용 프로그램의 실행 파일에 포함된 섹션이지만 외부 파일일 수도 있습니다.운영 체제가 응용 프로그램을 로드하고 매니페스트의 존재를 감지하면 운영 체제 DLL 로더는 매니페스트에 나열된 DLL 버전을 지원합니다.매니페스트가 없는 경우 DLL 로더는 모든 DLL 종속성의 기본 버전을 로드합니다.DLL이 COM 서버인 경우 등록이 필요 없는 액티베이션이 성공하려면 DLL 자체의 매니페스트가 있어야 합니다.

Windows Vista 이후에서는, SxS 의 설정 오류로 인한 애플리케이션 기동시의 장해의 진단에 도움이 됩니다.

사용자가 매니페스트 지정 어셈블리를 덮어쓰는 경우(예를 들어 라이브러리에 적용된 보안 패치의 경우) 퍼블리셔 컨피규레이션파일은 어셈블리를 글로벌하게 리다이렉트 할 수 있습니다.디지털 서명은 이러한 [3]리다이렉트의 정당성을 보증할 수 있습니다.

매니페스트 형식

응용 프로그램 매니페스트는 내부적으로 XML로 나타납니다. SxS 매니페스트와 관련된 URN은 "urn:schemas-microsoft-com:asm.v1"입니다.

ClickOnce와 같은 다른 최신 Microsoft 기술도 동일한 매니페스트 형식을 사용합니다.

매니페스트 예시

다음은 C 런타임 DLL에 의존하는 응용 프로그램의 매니페스트의 예입니다.

<?xml version='1.0' 인코딩='UTF-8' 스탠드아론='yes?' > <어셈블리> xmlns='urn: schemas-schemas-com:asm.v1' manifest Version ='1.0'>   <의존성>     <의존 어셈블리>       <어셈블리>신원 입력='win32' 이름='마이크로소프트'VC90.CRT' 버전='9.0.21022.8' 프로세서 아키텍처 ='x86' 공개 키토큰='1fc8b3b9a1e18e3b' />     </의존 어셈블리>   </의존성> </어셈블리> 

액티베이션콘텍스트

위와 같은 매니페스트는 SxS 로더에 의해 액티베이션콘텍스트로 해석됩니다.각 스레드 또는 파이버에는 액티베이션콘텍스트 스택이 있어요API를 사용하면 이러한 컨텍스트를 프로그래밍 방식으로 조작할 수 있습니다.라이브러리(DLL)는, 예를 들면, 발신자의 액티베이션콘텍스트를 사용하는 대신에, 자신의 사용을 위해서 다른 라이브러리의 특정 버전을 필요로 하는 경우 등, 액티베이션콘텍스트를 변경할 필요가 있는 경우가 있습니다.이러한 유형의 문제를 (활성화 컨텍스트) [4]오염이라고 부르기도 합니다.액티베이션콘텍스트의 오염을 방지하기 위해 DLL에 매니페스트를 리소스로 포함할 수 있습니다.매니페스트는 DLL이 로드될 때 해석됩니다.로더가 [5]매니페스트를 찾으려면 이 매니페스트가 이미지 파일의 리소스 ID 2에 있어야 합니다.

WinSxS(Windows 컴포넌트 스토어)

Vista 이후 Windows 운영체제는 핵심 컴포넌트로 WinSxS를 사용합니다.디렉토리내의 operating system 파일은, Windows 디렉토리 구조내의 통상적인 장소로부터 하드 링크 됩니다.의 서브디렉토리내의 파일은, 복수의 장소(디렉토리 및 애플리케이션 디렉토리등)로부터 링크 할 수 있습니다.Windows 탐색기는 이러한 [6]파일이 차지하는 디스크 공간을 이중으로 계산합니다.이는 fsutil 명령줄 [7]프로그램을 사용하여 입증할 수 있습니다.링크 수를 표시하는 일부 서드파티 탐색기 확장 기능도 있습니다.

단, 의 모든 파일이 이러한 방식으로 "라이브" 운영 체제 파일에 투영되는 것은 아닙니다.예를 들어, 일부 Windows 업데이트를 설치한 후에도 업데이트로 대체된 이전 파일 버전은 "라이브" Windows 디렉터리에 더 이상 연결되어 있지 않아도 에 유지됩니다.이를 통해 [8]업데이트를 안전하게 제거할 수 있습니다.

이 디렉토리의 중요성은 높아지기 때문에 Vista 이후부터는 신뢰할 수 있는 설치 서비스 SID가 디렉토리를 소유합니다.기본적으로는 관리자라도 먼저 소유권을 취득하지 않고 내용을 수정할 수 없습니다.애플리케이션을 언인스톨 해도, 디렉토리의 빈 공간은 곧바로 확보되지 않습니다.사용하지 않는 어셈블리의 공간은, 인스톨러 [9]서비스에 의해서 시간이 경과해 가비지가 수집됩니다.

공식적으로 문서화되어 있지는 않지만 디렉토리 내에 존재하는 디렉토리 이름을 생성하는 알고리즘은 MSDN Microsoft 직원의 블로그에 공개되어 있습니다.XP에서 Vista로 [10]이행하면서 알고리즘이 변경되었습니다.

Windows7;[11]post-SP1 업데이트를 통해 디스크 정리 도구(cleanmgr.exe)[12]고 다운 받을 수 있는 이것은 시스템 행정에 WindowsUpdate정리를 더하면 Windows자동 설치 키트 도구 배포 이미지 Servicing과 파일은 대체된 OS업데이트 필요가 있거나 시스템을 재부팅하는 것 없이 신뢰할 수 있는 설치 관리자 근로자 서비스를 이용함으로써 사용을 제거할 수 있는 관리(DISM)를 포함한다.업데이트 준비 tem툴(CheckSUR)[13]을 사용하면 컴포넌트 스토어 오류를 복구하고 손상된 OS 파일이나 누락된 OS 파일을 정상적인 버전으로 교체할 수 있습니다.Windows 8은 복구 기능을 DISM 툴에 통합하고 있습니다.DISM 툴은 Windows Update 또는 오프라인 WIM 이미지에서 유효한 OS 파일을 복사할 수 있으며 컴포넌트 스토어를 최신 버전의 OS [14]컴포넌트만 포함하도록 리셋할 수 있습니다.윈도우즈 10은 구성 요소 [15]저장소를 정리하는 자동 태스크를 실행합니다.

이점

  • SxS를 사용하여 구축된 응용 프로그램의 경우 동일한 DLL의 다른 버전에 의존하는 여러 응용 프로그램이 공존할 수 있습니다.이는 공유 시스템 폴더의 원래 DLL을 나중에 동일한 DLL의 다른 버전에 의존하는 다른 프로그램을 설치하면 덮어쓸 수 있는 비 SxS DLL 환경과는 대조적입니다.
  • 매니페스트의 XML 형식은 사람이 읽을 수 있으므로 개발자가 애플리케이션과 버전의 종속성을 쉽게 판단할 수 있습니다.

단점들

  • Windows XP 에서는, 의 버그로 인해 힙이 파손되어 애플리케이션의 크래시가 발생합니다.이 문제는 XP Service Pack에서는 해결되지 않았습니다.사용자는 적절한 [16]업데이트를 수동으로 설치해야 합니다.
  • 의 내용 대부분이 다른 곳에 있는 파일에 대한 추가 하드 링크일 뿐이지만 디스크 공간 소비량이 상당히 높습니다.
  • 보안 업데이트는 중요한 시스템 구성 요소의 여러 새 버전을 저장소에 추가하기 때문에 크기가 커짐에 따라 디렉터리 및 윈도우즈 업데이트 로그가 손상될 수 있습니다.Windows Vista 에서는,[8] 디렉토리의 사이즈를 큰폭으로 줄일 수 있는 방법은 서포트되고 있지 않습니다.

디스크 용량

디렉토리는 매우 크고 여러 버전의 파일이 포함되어 있지만 Windows 폴더(예: [17])에는 디렉토리 내의 파일에 대한 하드링크인 파일이 몇 개 있습니다.따라서 Windows 폴더의 크기를 추정하는 프로그램에서는 이미 [18]하드링크를 카운트한 후 파일에 하드링크의 크기를 추가하지 않도록 주의해야 합니다.

DIR 및 탐색기는 하드 링크를 확인하지 못하기 때문에 동일한 파일을 여러 번 카운트하여 인식되는 디스크 사용량에 잘못된 값을 추가할 수 있습니다.이들 2개의 프로그램에서 보고되는 디스크 사용량은 각 하드링크가 실제 [19]파일인 것처럼 나타납니다.

Windows 8.1 이후 DISM 도구를 사용하여 컴포넌트 저장소를 분석하고 실제 [20]크기를 보고할 수 있습니다.

레퍼런스

  1. ^ Visual C++의 변경에 대한 섹션 "Visual C++ Libraries"를 참조하십시오.2010년 9월 10일에 취득.
  2. ^ Deployment in Visual C++ 2010」의 「Visual C++ 2008과 Visual C++ 2010의 차이」섹션을 참조해 주세요.2010년 9월 10일에 취득.
  3. ^ 퍼블리셔 설정(Windows)
  4. ^ Wiswall, Jon (2006-01-07). "Fixing Activation Context Pollution". Nothing ventured, nothing gained. Microsoft.
  5. ^ Wiswall, Jon (2006-01-17). "DLLs and resource ID 2 manifests". Nothing ventured, nothing gained. Microsoft.
  6. ^ "KB 2592038: How to Alleviate Disk Space Pressure Caused By a Large Windows Component Store (WinSxS) Directory". support.microsoft.com. Archived from the original on 2012-10-14.
  7. ^ joscon (2010-08-06). "Should you delete files in the \WinSXS directory? And what's the deal with VSS?". The Windows Servicing Guy.
  8. ^ a b Huges, Jeff (2008-09-17). "What is the WINSXS directory in Windows 2008 and Windows Vista and why is it so large?". Microsoft Corporation. Retrieved 15 March 2011.
  9. ^ Wiswall, Jon (2007-01-02). "Deleting from the WinSxS Directory". Nothing ventured, nothing gained. Microsoft.
  10. ^ Wiswall, Jon (2005-12-28). "What's that Awful Directory Name Under Windows\WinSxS?". Nothing ventured, nothing gained. Microsoft.
  11. ^ Microsoft TechNet: 도입 이미지 서비스 및 관리란?
  12. ^ Shelbourne, Charity (2013-10-08). "Breaking News! Reduce the size of the WinSxS Directory and Free up Disk Space with a New Update for Windows 7 SP1 Clients". Ask Premier Field Engineering (PFE) Platforms. Microsoft.
  13. ^ Microsoft TechNet: 서비스 파손 진단 및 복구를 위한 고급 가이드라인
  14. ^ "DISM – Repair a Windows Image". TechNet. Microsoft.
  15. ^ "Clean Up the WinSxS Folder". Docs.Microsoft.com. 2017-05-02.
  16. ^ "KB 943232: An application that uses the Sxs.dll file crashes when you run the application on a Windows XP-based computer". support.microsoft.com. Archived from the original on 2012-10-27.
  17. ^ "Manage the Component Store". TechNet. Microsoft.
  18. ^ joscon (2011-01-06). "How hard links work". The Windows Servicing Guy.
  19. ^ Sinofsky, Steven (2008-11-19). "Disk Space". Engineering Windows 7. Microsoft.
  20. ^ "Determine the Actual Size of the WinSxS Folder". TechNet. Microsoft.

외부 링크