2011-01-05 3 views
2

셸 및 시스템 호출 이외의 다른 방법으로 커널을 사용하여 프로그램을 실행할 수 있습니까?커널 프로그래밍

+2

이것은 매우 모호합니다 ... "커널 사용"은 커널 모드에서 *를 의미합니까? 또는 * 사용자 모드에서 커널 루틴 호출 *? Windows, Linux 또는 Mac에 관한 것입니까? 더 구체적으로 말하십시오. – Mehrdad

답변

3

항상 유닉스와 유도체에서 프로그램을 실행하는 유일한 방법은 실제로는 exec() 시스템 호출을 통해 이루어졌습니다. 맨 처음 (커널) 프로세스는 부트 로더에 의해 생성되었습니다. 모든 후속 프로세스는 fork()exec()으로 생성되었습니다. 물론 fork()은 원본 프로그램의 복사본 만 만들었습니다. exec() 시스템 콜이었습니다. C 소스 코드의 여러 폼 중 하나에서, 결국은 execve()과 같습니다. 현재 프로세스를 새로운 이미지로 대체하는 당나귀 작업을 수행했습니다.

요즘에는 거의 동일한 메커니즘을 달성하기 위해 별도의 시스템 호출을 사용하거나 사용하지 않을 수도있는 posix_spawn()과 같은 메커니즘이 있습니다.

0

예, 귀하의 프로그램을 소스로 사용하여 커널을 컴파일 할 수는 있지만 가장 현명한 방법은 아닙니다.

1

많은 커널이 런타임에 kernel modules 또는 drivers을 추가 할 수 있습니다. 커널 공간에서 일부 코드를 실행하려면 (아마 더 높은 권한이 필요하기 때문일 수 있습니다), 자신의 커널 모듈/드라이버를 작성하고 코드를로드하여 코드를 실행할 수 있습니다. 그러나 드라이버를 삽입한다고해서 코드가 실행되는 것은 아닙니다. 드라이버 구현에 따라 커널 공간에서 코드를 실행하기위한 트리거 메커니즘이 필요합니다.

0

모든 프로그램은 커널에 의해 내부적으로 실행됩니다. 커널 모듈을 찾으려면 시스템 호출을 사용하여 해당 모듈에 도달하고 커널 모드에서 작업을 수행해야합니다. 커널은 이벤트 구동이며 시스템 호출 만이 모듈 실행을 수신합니다 (네트워크 패킷 수신과 같은 일부 시스템 이벤트는 제외)

관련 문제