내 질문과 비슷한 질문이 있습니다.https://stackoverflow.com/questions/43819072/does-the-kernel-stop-running-on-its-own-when-the-os-is-complete-loaded, 그러나 답변이 상충됩니다(따라서 이 질문을 중복으로 표시하지 마십시오).
내 질문으로 돌아갑니다. 컴퓨터 전원이 켜지면 BIOS가 실행되기 시작하고 BIOS가 부트로더를 실행하며 부트로더가 커널을 실행한다는 것을 알고 있습니다.
이제 커널은 일반 프로그램으로 실행되기 시작합니다("일반 프로그램"이란 커널이 다른 프로그램에서 호출하는 함수 집합이 아니라 독립적으로 실행되는 프로그램이기도 함을 의미함). 이제 커널은 다음 작업을 수행합니다.
- 하드웨어 및 커널 데이터 구조를 초기화합니다.
- 보호 모드로 전환합니다.
- 인터럽트 설명자 테이블을 초기화합니다.
- 잠깐만 (이것은기사커널에서 수행되는 추가 작업을 나열합니다.
커널이 이러한 작업을 완료한 후 운영 체제가 로드되고 사용자는 이를 사용할 수 있습니다.
내 질문은: 이제 OS가 로드되었으므로 커널이 일반 프로그램으로 계속 실행됩니까, 아니면 이런 방식으로 실행을 중지하고 인터럽트가 발생할 때만 실행됩니까?
답변1
모든 커널은 "일반 프로그램"과 거의 정반대입니다. 마이크로커널 사람들은 사용자 애플리케이션과 동일한 수준의 프로세스로 실행되는 운영 체제 서비스에 대한 아이디어를 좋아할 수 있지만 커널은언제나그렇지 않은 부분도 포함해야 합니다. 다른 것이 없다면 프로세스 간 예약 및 전환과 프로세스 간 통신을 처리하는 운영 체제의 일부가 있어야 합니다.
특히 Linux에서는 커널이 모든 프로세스의 주소 공간에 매핑되는데, 주소 공간의 상위 부분에 위치한다. 일부 프로세스가 커널 코드를 실행하는 동시에 다른 프로세스가 사용자 공간 코드를 실행할 수 있다는 점에서 이는 모든 프로세스의 일부입니다.
커널이 일반 프로그램으로 실행된다고는 말할 수 없지만, 사용자 공간 코드가 커널 루틴을 호출할 수도 있기 때문에 인터럽트 시 "만" 실행되지는 않습니다. 이것이 바로 시스템 호출입니다. 인터럽트가 전혀 예외가 아니기 때문에 "only"에 대한 따옴표, 일종의 정기적인 타이머 틱이 일반적입니다.
답변2
단일 프로세서 시스템에서 프로세서는 한 번에 하나의 프로그램만 실행할 수 있으므로 운영 체제나 다른 프로그램이 주어진 시간에 실행됩니다.
운영 체제는 이러한 프로그램의 실행 일정을 담당하는 개체이므로 일반 프로그램으로 실행되지 않습니다. 프로그램이 실행되는 동안 운영 체제는 아무 작업도 수행하지 않으며 인터럽트, 시스템 호출 또는 시간 초과가 발생하면 다시 호출됩니다. 그런 다음 자체적으로 작업할지 아니면 자신이 담당하는 다른 프로그램을 실행할지 결정할 수 있습니다.
귀하의 답변이 왜 서로 충돌하는지 이해가 되지 않습니다. 운영 체제에서 실행되는 일부 프로세스는 더 높은 수준의 권한을 가진 커널 구성 요소일 수 있습니다.