누군가 "Hello World!"를 설명해 줄 수 있나요? 최신 Linux 또는 Unix 시스템의 최신 소프트웨어 및 하드웨어 스택과 관련이 있습니까? $ strace
다음 helloworld.c 프로그램에 의해 생성된 바이너리 파일에 대해 실행하면 write()
시스템 호출로 끝납니다. 전문가가 되고자 하는 우리 중 누군가가 운영 체제, 로드된 장치 드라이버, CPU, GPU, PCIe 및 USB-C 포트(외부 모니터에 연결됨)와 같은 하드웨어 간의 차이점을 이해하도록 안내할 수 있기를 바랍니다. 사이에 발생하는 모든 상호작용은 "Hello World!"입니다. helloworld 프로그램의 가상 메모리에서 복사됩니다. 다양한 소프트웨어 및 하드웨어 트랜잭션을 시작하는 사람과 인터럽트, 버스 트랜잭션 등과 같이 이들이 상호 작용하는 방식을 아는 것이 더 좋습니다.
#include<stdlib.h>
#include<stdio.h>
int main() {
puts("Hello World!");
return EXIT_SUCCESS;
}
참고: 이 질문은 어떤 면에서는 지나치게 광범위해 보일 수 있지만 실제로는 매우 구체적입니다. 이는 "Hello World!"를 묻는 12바이트 프로세스일 뿐입니다. helloworld 프로그램의 가상 메모리부터 모니터에 연결된 USB-C 포트까지.
답변1
X11:
프로그램 -> 가상 콘솔 -> 터미널 애플리케이션 -> 터미널 애플리케이션에서 GTK/Qt 렌더링 루틴 호출 -> X11 렌더링 -> Xorg의 컴포지터(선택 사항) -> Xorg의 GPU 드라이버(현재 일반적으로 KMS) -> 커널 GPU 드라이버 -> 디스플레이
웨이랜드:
프로그램->가상 콘솔->터미널 애플리케이션->터미널 애플리케이션 호출 GTK/Qt 렌더링 루틴->Wayland의 버퍼->Wayland Compositor->커널 GPU 드라이버->디스플레이