2016-11-22 2 views
0

제 질문은 운영 체제가 RAM에 사용자 공간 응용 프로그램을로드하는 방법입니다. 컴퓨터가 켜졌을 때 부트 로더가 작동하는 방법 BIOS는 aa55 부트 로더 서명까지 512kb 데이터를 읽고 ram에 부트 로더를로드합니다. 이러한 방식으로 일반 사용자 공간 프로그램이 처리됩니까? 그렇다면 어떻게? BIOS로 부팅 한 부트 로더와 사용자 공간 프로그램이 운영 체제에서 어떻게 처리 되었습니까? 좀 더 구체적으로 execv()가 프로그램을 RAM에로드하고 사용자 공간에 대한 실행 지점을 시작하는 방법은 무엇입니까? 미리 감사드립니다.운영 체제 로더

+0

[운영체제의 로더는 어떻게 작동합니까?] (0120-139904) – xmojmr

+0

BIOS는 해당하지 않습니다. 512 킬로바이트를로드하지만 512 바이트 만로드합니다. – glauxosdever

답변

1

사용자 공간 프로그램은 바이오스처럼 처리되지 않으며, 커널은 사용자 공간 프로그램 실행에 관여합니다.

일반적으로 : 프로그램이 쉘에서 실행될 때, 쉘은 새 주소 공간에 새 태스크를 작성하고 실행 가능 바이너리를 읽고 실행을 시작하기 위해 시스템 호출을 호출합니다.

가 세부 사항을 이해하기 위해, 당신은 이해해야합니다

  1. 엘프 형식. 물론 Linux에서 사용할 수있는 다른 형식도 있습니다. elf는 가장 일반적인 형식이고 좋은 시작점입니다. elf를 이해하면 커널이 실행 바이너리를 정확하게 메모리에로드하는 방법을 이해하는 데 도움이됩니다.

  2. 리눅스 프로세스 관리; 이렇게하면 프로그램 실행 방법을 이해하는 데 도움이됩니다.

  3. 커널에서 관련 코드를 읽습니다. fs/exec.c는 큰 도움이 될 것입니다.

1

절차는 운영 체제에 따라 다릅니다. 어떤 시스템은 프로세스의 수명과 프로세스 자체에 존재하는 백그라운드 명령 인터프리터를 가지고있다. 프로그램이 실행될 때 명령 인터프리터는 백그라운드에 남아 있습니다 (사용자 모드 액세스로부터 보호됩니다). 프로그램이 완료되면 명령 인터프리터가 포 그라운드로 이동하고 동일한 프로세스에서 다른 프로그램을 실행할 수 있습니다.

Eunuchs-world에서 명령 인터프리터는 사용자 모드 프로그램입니다. 프로그램을 실행할 때마다 다른 프로세스가 시작됩니다.

두 시스템 모두 로더를 사용하여 프로그램을 실행하기위한 프로세스 주소 공간을 구성합니다. 실행 파일은 주소 공간을 배치하는 방법을 정의하는 지침 세트입니다.

이것은 부트 로더와 크게 다릅니다. 부트 로더는 저장된 데이터 블록을 맹목적으로 메모리에로드합니다. 프로그램 로더는 공유 라이브러리 처리 및 주소 픽스 업을 포함하는 프로세스 주소 공간을 레이아웃하기위한 복잡한 지침을 포함합니다.

+0

예제 코드 조각을 줄 수 있습니까? 그래서 나는 programm가 램에 어떻게 삽입되는지를 볼 수있다. 감사 –