그래서 제가 명확하지 않은 한 가지는 사용자 공간에서 커널 공간으로의 변환이 아키텍처에 따라 달라지는 이유입니다. 예를 들어,Linux 커널 v5.4 시스템은 커널 공간에 들어가는 코드를 호출합니다.이는 아키텍처가 다른 x86과 다르며 C 코드뿐만 아니라 아키텍처 종속 어셈블리 지침도 포함합니다.
왜 이런거야? 왜 전체 Linux 커널을 C로 직접 작성할 수 없습니까?
어떤 아이디어라도 감사하겠습니다.
감사해요.
답변1
커널 모드사용자 모드와는 매우 다릅니다. 커널은 원하는 것은 무엇이든 할 수 있고 하드웨어의 모든 부분에 액세스할 수 있지만 사용자 공간은 그렇지 않습니다. 코드가 하드웨어에 모드 간 전환을 지시하는 방법은 아키텍처에 따라 다릅니다. 따라서 전환 메커니즘은 기계어 코드로 구현되지만 C 라이브러리에 캡슐화됩니다. 운영 체제가 하드웨어와 인터페이스하는 모든 곳, 즉 장치 드라이버에서 동일한 것을 찾을 수 있습니다.
C는 운영 체제를 작성하고 아키텍처 간 이식성을 제공하기 위한 언어입니다.