셸 및 시스템 호출 이외의 다른 방법으로 커널을 사용하여 프로그램을 실행할 수 있습니까?커널 프로그래밍
커널 프로그래밍
답변
항상 유닉스와 유도체에서 프로그램을 실행하는 유일한 방법은 실제로는 exec()
시스템 호출을 통해 이루어졌습니다. 맨 처음 (커널) 프로세스는 부트 로더에 의해 생성되었습니다. 모든 후속 프로세스는 fork()
및 exec()
으로 생성되었습니다. 물론 fork()
은 원본 프로그램의 복사본 만 만들었습니다. exec()
시스템 콜이었습니다. C 소스 코드의 여러 폼 중 하나에서, 결국은 execve()
과 같습니다. 현재 프로세스를 새로운 이미지로 대체하는 당나귀 작업을 수행했습니다.
요즘에는 거의 동일한 메커니즘을 달성하기 위해 별도의 시스템 호출을 사용하거나 사용하지 않을 수도있는 posix_spawn()
과 같은 메커니즘이 있습니다.
예, 귀하의 프로그램을 소스로 사용하여 커널을 컴파일 할 수는 있지만 가장 현명한 방법은 아닙니다.
많은 커널이 런타임에 kernel modules
또는 drivers
을 추가 할 수 있습니다. 커널 공간에서 일부 코드를 실행하려면 (아마 더 높은 권한이 필요하기 때문일 수 있습니다), 자신의 커널 모듈/드라이버를 작성하고 코드를로드하여 코드를 실행할 수 있습니다. 그러나 드라이버를 삽입한다고해서 코드가 실행되는 것은 아닙니다. 드라이버 구현에 따라 커널 공간에서 코드를 실행하기위한 트리거 메커니즘이 필요합니다.
모든 프로그램은 커널에 의해 내부적으로 실행됩니다. 커널 모듈을 찾으려면 시스템 호출을 사용하여 해당 모듈에 도달하고 커널 모드에서 작업을 수행해야합니다. 커널은 이벤트 구동이며 시스템 호출 만이 모듈 실행을 수신합니다 (네트워크 패킷 수신과 같은 일부 시스템 이벤트는 제외)
- 1. NT 커널 프로그래밍
- 2. 초보자를위한 리눅스 커널 프로그래밍
- 3. Linux 커널 - 블록 번호를 프로그래밍 방식으로 검색합니다.
- 4. CUDA : 커널 CRT 문서?
- 5. Java 또는 C 언어로 프로그래밍 된 OS (커널)
- 6. 시스템/커널 수준에서 프로그래밍 학습을위한 텍스트 북/온라인 리소스
- 7. 리눅스 커널 프로그래밍, 코딩 또는 읽기 학습을 시작하는 방법은 무엇입니까?
- 8. 어떻게 커널 C 프로그래밍 코드를 더 잘 이해할 수 있습니까?
- 9. 커널 API 또는 커널 API 사용
- 10. 커널 모듈
- 11. 커널 구성
- 12. 변경 커널
- 13. CUDA 커널
- 14. 커널 개발
- 15. 커널 작업간에 데이터를 공유하는 방법은 무엇입니까? (커널/커널 태스크가있는 게임 엔진)
- 16. 비 커널 헤더를 포함하여 Linux 커널 (2.6) 모듈을 컴파일
- 17. 커널 스레드를 이해하는데 문제가 있습니다. 실제로 커널 스레드는 무엇입니까?
- 18. 출구 장치 용 커널 sk_buff 빌드 리눅스 커널
- 19. 비 gpl 커널 모듈에서 어떤 커널 API를 사용할 수 있습니까?
- 20. 커널 스레드에 의한 커널 주소 공간에서의 임의의 읽기는 공황 상태가됩니까?
- 21. 왜 리눅스 커널 업그레이드 후 VM웨어 커널 모듈을 다시 컴파일해야합니까?
- 22. 리눅스 커널 개발
- 23. 리눅스 커널 개발
- 24. POSIX 호환 커널 작성
- 25. 리눅스 커널 뮤텍스
- 26. 리눅스 커널 스케쥴링
- 27. C++ 마이크로 커널 문제
- 28. SAP의 SAP 커널 릴리스
- 29. Linux 커널 타이머 변경
- 30. setscheduler()는 리눅스 커널
이것은 매우 모호합니다 ... "커널 사용"은 커널 모드에서 *를 의미합니까? 또는 * 사용자 모드에서 커널 루틴 호출 *? Windows, Linux 또는 Mac에 관한 것입니까? 더 구체적으로 말하십시오. – Mehrdad