초기 부팅부터 데스크톱 GUI 사용자 영역 코드까지 Linux 소스 코드를 추적할 수 있습니까?

초기 부팅부터 데스크톱 GUI 사용자 영역 코드까지 Linux 소스 코드를 추적할 수 있습니까?

Linux는 100% 오픈 소스이므로 Linux의 한 줄씩 지침을 따르고 운영 체제의 전체 작동 원리를 관찰하여 운영 체제가 시작되는 방식을 더 잘 이해할 수 있는지 알고 싶습니다. 프로세스 로드, 타임 슬라이스 프로세스/추가 작업 관리, 드라이버 로드, 시스템 호출 수행, API를 통한 작동, 드라이버의 사용자 모드 스레드 액세스, GUI/X 윈도우 시스템 연결 및 드라이버 간 상호 작용.

소스에서 이 작업을 수행하는 것이 가능합니까? 즉, 소스를 선형적으로 추적하는 것이 얼마나 실현 가능합니까? 선형입니까?

답변1

나는 이것이 Michael Kjörling과 OP가 상상했던 것보다 더 어렵다고 생각합니다.

OP는 CPU 작업을 작업이 순차적으로 실행되는 직선, 단일 타임라인으로 보는 것 같습니다. 이러한 인상은 Michael Kjörling에 의해 더욱 강조되는데, 그는 특정 코어가 사이클당 하나의 명령을 엄격하게 실행한다는 점을 지적합니다.

이는 미시적 수준(오늘날의 PC에는 여러 개의 CPU가 있음)에서는 확실히 불완전하며 중간/매크로 수준에서는 도움이 되지 않습니다.

우리는 매크로 변수의 관점에서 모든 복잡한 시스템을 설명합니다. 이는 때때로 이것이 우리가 액세스할 수 있는 변수일 뿐이지만 그 유용성은 주로 액세스 가능하다는 데 있지 않기 때문입니다. 모든 관련 입자의 위치와 속도를 기술하여 가스를 설명하는 대신 압력/부피/온도/엔트로피를 사용합니다.

마찬가지로 CPU 명령을 통해 기계 상태를 특성화하는 것이 아니라 실행 중인 작업 및 서비스를 통해 시스템 상태를 특성화합니다. 따라서 언제든지 여러 프로세스가 실행되고 정보를 교환하며 공통 목표를 달성하기 위해 협력적으로(불행하게도 때로는 경쟁하기도 함) 행동하는 경우가 많습니다.

컴퓨터 과학의 압력/부피/엔트로피/온도는 작업을 수행하는 에이전트의 실제 구현과 관계없이 기계가 수행하는 작업을 단순화하여 표현하는 추상화 계층과 동일합니다. AL은 HAL부터 OSI 계층 및 그 이상까지 컴퓨터 과학 전반에 걸쳐 존재합니다.

컴퓨터 작업의 단계적 표현을 요구하는 것은 다중 입자 유체 설명을 선호하여 난류 이론의 스트레인지 어트랙터를 포기하는 것과 같습니다. 아니면 화학 결합을 연구하여 인간 게놈을 해독해 보세요. 하나는 다른 하나를 기반으로 구축되지만 새로운 추상화 계층은 다른 방법으로는 상상할 수 없는 통찰력을 제공합니다.

답변2

소스 코드를 보고 시스템 작동 방식을 이해할 수 있습니다(C/C++ 및 어셈블리에 익숙한 경우). 내가 아는 한 코드는 선형이 아닙니다.

답변3

아마도 얻을 수 있는 가장 큰 것은 온라인 디버깅 및 systemd의 로깅 데몬일 것입니다. 이 데몬은 아주 초기부터(기존 로깅 도구보다 오래 전에) 모든 것을 기록합니다.

이것이 충분하지 않고 더 낮은 수준에서 시스템을 추적하려는 경우 가상 환경(예: QEMU)에서 Linux를 실행할 수 있습니다. 이를 통해 내부에 대한 깊은 통찰력을 얻을 수 있으며 라이브 커널에서 gdb를 사용할 수 있습니다. 실시간 커널 및 전체 이미지 디버깅을 위해 QEMU를 설정하는 방법에 대한 몇 가지 튜토리얼이 있습니다.http://www.cs.rochester.edu/~sandhya/csc256/locationments/qemu_linux.html

커널 내부 디버깅 도구에 대한 stackowerflow 질문도 참조하세요.https://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used

답변4

나는 그것을 당신에게 지적하고 싶습니다 bootchart. bootchartinit 대신 첫 번째 프로세스로 시작하여 실행되는 항목과 실행하는 데 걸리는 시간을 모니터링합니다.

안내도

이것이 모니터링하고 싶은 전부는 아니지만 매우 좋은 그래픽 출력을 제공하므로 시도해 볼 가치가 있습니다.

예를 들어, 시스템 호출을 모니터링하려면 perf record초기 시작 시 수행할 수 있지만 수백만 줄을 해석하는 방법에 따라 달라집니다.

관련 정보