오늘날의 디지털 시대에서는 빠른 시작과 효율적인 시스템 운영이 사용자에게 매우 중요합니다. Windows 시스템은 짧은 시간 내에 많은 서비스를 시작할 수 있습니다. 그 뒤에는 서비스 제어 관리자(SCM)라는 시스템 프로세스가 있습니다. SCM의 작동은 시스템 시작 속도를 개선하는 데 매우 중요합니다. 이 프로세스가 어떻게 작동하는지 자세히 살펴보겠습니다.
SCM은 Windows NT 시리즈 운영 체제의 특수 시스템 프로세스입니다. Windows 서비스 프로세스를 시작, 중지 및 관리하는 역할을 합니다.
SCM 실행 파일은 %SystemRoot%\System32\services.exe에 있으며, 주요 작업은 자동으로 시작되도록 구성된 모든 서비스를 시작하는 것입니다. 시스템이 시작되면 Wininit 프로세스가 SCM을 조기에 시작하고 일련의 초기화 작업을 시작합니다.
시작 프로세스 동안 SCM은 먼저 레지스트리에서 서비스에 대한 정보를 읽습니다. 여기에는 두 가지 주요 레지스트리 항목이 포함됩니다. <저>
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List - 서비스 그룹의 이름과 시작 순서를 포함합니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - 서비스 및 장치 드라이버의 실제 데이터베이스입니다. 이 정보는 SCM이 각 서비스의 시작 순서와 상호 종속성을 결정하는 데 도움이 됩니다. SCM은 또한 부팅 프로세스 중에 시작되어야 하는 장치 드라이버가 성공적으로 로드되었는지 확인하고, 실패한 드라이버를 ScFailedDrivers라는 목록에 저장합니다.
모든 비지연 자동 시작 서비스가 처리된 후 SCM은 지연 자동 시작 서비스를 로드하기 시작합니다. 이는 Windows Vista 이후로 도입된 새로운 기능으로 시스템 시작 속도를 높이기 위해 도입되었습니다. 일반적으로 이러한 지연된 서비스는 시스템 시작 후 약 120초 후에 초기화됩니다.SCM은 자동으로 시작된 각 서비스를 처리할 때 순환 종속성이 발생하지 않도록 로드 순서의 종속성도 고려합니다.
시작할 각 서비스에 대해 SCM은 ScStartService() 함수를 호출하여 프로세스가 실행되는 계정이 서비스에서 지정한 계정과 일치하는지 확인합니다. 이 프로세스 중에 서비스가 시스템 계정으로 실행되고 있지 않으면 SCM은 LSASS 함수 LogonUserEx()를 호출하여 필요한 사용자 로그인 정보를 얻습니다. 이 정보는 HKLM\SECURITY\Policy\Secrets\ 레지스트리 키에 저장되며, 전체 액세스 권한이 있는 서비스만 이러한 "비밀" 비밀번호를 얻을 수 있습니다.
서비스 프로세스는 생성될 때 일시 중단 상태가 되며, 파이프라인 연결이 설정될 때까지 실행이 재개되지 않습니다.
서비스 프로세스가 성공적으로 시작되면 SCM은 명명된 파이프를 만들어 서비스 프로세스와 통신 채널을 설정합니다. 서비스 프로세스는 StartServiceCtrlDispatcher() 함수를 호출하여 이 채널에 가입하고, SCM은 서비스에 "시작" 명령을 보냅니다.
지연된 자동 시작 서비스가 있으면 시스템 시작의 균형이 크게 향상됩니다. 이러한 서비스는 기술적으로 일반적인 자동 시작 서비스와 크게 다르지 않지만, 원활한 시스템 작동을 보장하기 위해 시스템 시작의 여러 단계에서 초기화되도록 설계되었습니다.
SCM은 또한 장치 드라이버를 관리합니다. 이러한 서비스의 서비스 유형은 레지스트리에서 SERVICE_KERNEL_DRIVER 또는 SERVICE_FILE_SYSTEM_DRIVER로 표시됩니다. 이러한 경우 SCM은 ScLoadDeviceDriver() 함수를 호출하여 해당 드라이버를 시스템에 로드합니다. 이를 위해 일반적으로 NtLoadDriver 시스템 호출을 호출해야 합니다.
SCM은 Windows 탐색기와 같은 GUI 애플리케이션에 메시지를 보내 네트워크 드라이브 문자 연결의 변경 사항을 알릴 수도 있습니다.
간단히 말해서, Windows 시스템의 서비스 제어 관리자는 시스템 시작 프로세스에서 없어서는 안 될 역할을 합니다. 필요한 서비스와 장치 드라이버를 효율적으로 로드하여 전체 시스템의 빠른 응답과 안정적인 작동을 유지합니다. 우리가 이런 기술을 사용할 때, 그 기술들의 작동 원리와 기술적 과제들을 고려했는가?