Linux는 프로세서 주변의 하드웨어와 어떻게 통신합니까?

Linux는 프로세서 주변의 하드웨어와 어떻게 통신합니까?

내 질문은 관리 자체보다는 Unix/Linux 개발과 더 관련이 있습니다.

내 생각에는 관리자보다는 Unix/Linux 하위 수준의 시스템 프로그래머를 대상으로 한 것 같습니다. 커널 개발을 시작하거나 Linux 시스템 개발을 이해하는 데 도움이 됩니다.

Linux가 하드웨어 주변 장치 및 모듈과 상호 작용하는 방법을 배우기 시작하려면 하드웨어에 대해 어떤 구체적인 정보가 필요합니까? 버스 아키텍처 및 컨트롤러와 통신하는 방법 등.

또한 Linux는 현재 대부분의 환경에서 가상 머신에서 실행되고 있다는 점을 언급하고 싶습니다. 따라서 OS가 아래에서 보는 것은 내가 의미하는 것입니다.

참고 자료나 공부를 시작하는 방법이 필요합니다.

나는 기본적인 x86 명령어를 이해하지만, 내 질문은 프로세서 자체를 둘러싼 메모리 및 버스 컨트롤러에 관한 것입니다. 나는 현대 병렬 프로그래밍 환경의 프로그래머 모델을 언급하고 있습니다.

답변1

작동 방식은 아키텍처/머신에 따라 크게 달라집니다. Linux(커널)는 부팅 시(그리고 삽입된 장치가 나타나거나 사라질 때) 사용 가능한 장치와 연결을 매핑하는 트리를 만듭니다. 정보의 출처는 기본 하드웨어에 따라 다릅니다.

동일한 시스템에서 실행되는 다른 운영 체제에는 이를 수행하는 고유한 방법이 있으며, 그 목적이 이식성이 뛰어난 경우 유사한 방법을 사용할 수 있습니다.

Original PC(또는 에뮬레이터)와 같은 도구를 사용하면 다양한 기능에 액세스할 수 있습니다.안정적인장치, 특정 상황에서의 액세스안정적인(또는 거의) 방법. 일부 Unices에 대한 시스템 개체 코드를 제공하게 되어 기쁘게 생각하며 장치를 추가/재구성한다는 것은 일부 C 파일을 편집하고 커널을 다시 컴파일하고 다시 링크하는 것을 의미합니다. 매우 흥미로운.

답변2

z80 프로토보드와 같은 것을 구입하고 직렬 포트에서 물건을 꺼내거나 dos를 사용하여 시뮬레이션된 ibm PC를 실행하고 DOS irqs를 사용하여 동일한 작업을 수행하십시오.

메모리 매핑된 텍스트 표시가 있는 구형 Z80 시스템에서는 최소한 텍스트도 쉽게 표시할 수 있었습니다.

다음 언어를 사용하여 이와 같은 작업을 수행하는 것이 가능합니다(쉽거나 다소 어렵거나 비실용적). 어셈블러, Pascal, Ada, C(왜 C++인지), BASIC 및 기타 여러 언어를 사용하면 많은 작업이 필요합니다!

상당한 양의 메모리를 지원할 수 있는 상당히 현대적인 프로세서의 경우 C/Assembler/Ada(예: Pascal을 생각해 보세요.)로 프로그래밍하려는 경우 이 프로세서 제품군이 상당히 간단한 메모리 아키텍처를 가지고 있기 때문에 이렇게 말하는 것입니다.

Grub의 소스 코드를 확인해보세요!

시작 시 프로그램이 로드되는 방식(부트로더)에 관심이 있거나 Space Invaders(베어 메탈에서 실행되는 Space Invaders의 복제품)와 같은 지저분한 게임을 확인해 보세요.

가상 머신에서 grub-invader를 시작할 수 있습니다애벌레 침입자 보기

관련 정보