시스템 호출, 메시지 전달 및 인터럽트 간의 관계는 무엇입니까?

시스템 호출, 메시지 전달 및 인터럽트 간의 관계는 무엇입니까?

Wikipedia 기사를 읽고 있어요공정 관리. 내 초점은 리눅스입니다. 시스템 호출, 메시지 전달, 인터럽트의 개념과 목적 사이의 관계와 차이점을 파악할 수 없습니다. 커널에서 리소스와 서비스를 요청하는 프로세스에 대한 것입니까?

기사의 일부 인용문과 기타 몇 가지:

  1. 프로그램 실행 중에 운영 체제는 할당 취소 또는 할당을 수행할 수 있도록 프로세서 제어권을 다시 얻는 두 가지 방법이 있습니다.

    1. 프로세스는 시스템 호출(소프트웨어 인터럽트라고도 함)을 발행합니다. 예를 들어 하드 디스크의 파일에 액세스하기 위해 I/O 요청이 발생합니다.
    2. 예를 들어 키보드의 키를 누르거나 타이머 시간이 초과되는 경우(선점형 멀티태스킹에 사용됨) 하드웨어 인터럽트가 발생합니다.
  2. 사용자 모드에서 실행되는 프로그램은 다음 두 가지 기술을 통해 커널에서 서비스를 요청할 수 있습니다.

    * System call
    * Message passing
    
  3. 인터럽트는 주의가 필요함을 나타내는 비동기 신호이거나 실행 변경을 나타내는 소프트웨어의 동기 이벤트입니다.

    하드웨어 인터럽트로 인해 프로세서는 실행 상태를 저장하고 인터럽트 핸들러 실행을 시작합니다. 소프트웨어 인터럽트는 일반적으로 명령어 세트의 명령어로 구현되며, 이로 인해 하드웨어 인터럽트와 유사한 인터럽트 핸들러로 컨텍스트가 전환됩니다.

답변1

  1. 모든 최신 운영 체제는 멀티태스킹을 지원합니다. 이는 시스템이 의사 병렬(단 하나의 CPU만 사용할 수 있는 경우) 또는 이제 멀티 코어 CPU(하나의 작업/코어)에서 보편적으로 병렬화되는 여러 프로세스를 동시에 실행할 수 있음을 의미합니다.

    단 하나의 CPU만 사용할 수 있는 더 간단한 경우를 생각해 보겠습니다. 즉, 두 가지 다른 프로세스(예: 웹 브라우저 및 음악 플레이어)를 동시에 실행하는 경우 시스템은 실제로 두 프로세스를 동시에 실행할 수 없습니다. 무슨 일이 일어나고 있는지는 CPU가 한 프로세스에서 다른 프로세스로 계속 전환하지만 이는 매우 빠르게 발생하므로 사용자는 이를 전혀 알아차리지 못할 것입니다.

    이제 이 두 프로세스가 실행되는 동안 재설정 버튼을 눌렀다고 가정해 보겠습니다. CPU는 수행 중인 작업을 즉시 중지하고 시스템을 다시 시작합니다. 축하합니다. 인터럽트가 발생했습니다.

    상황은 프로그래밍 중이고 CPU에 서비스를 요청하려는 경우와 유사합니다. 차이점은 이 경우 소프트웨어 코드, 즉 일반적으로 fopen시스템 호출(예: 파일 열기)을 수행하는 라이브러리 프로시저를 실행한다는 것입니다.

    따라서 1에서는 CPU의 주의를 끄는 두 가지 다른 방법을 설명합니다.

  2. 대부분의 최신 운영 체제는 사용자 모드와 커널 모드라는 두 가지 실행 모드를 지원합니다. 기본적으로 운영 체제는 사용자 모드에서 실행됩니다. 사용자 모드는 매우 제한적입니다. 예를 들어, 모든 I/O가 금지되어 있으므로 하드 디스크에서 파일을 열 수 없습니다. 물론, 파일을 열 때 운영 체제가 사용자 모드에서 커널 모드로 투명하게 전환되기 때문에 실제로는 이런 일이 발생하지 않습니다. 커널 모드에서는 하드웨어를 완전히 제어할 수 있습니다.

    이 두 가지 모드가 왜 존재하는지 궁금하다면 가장 간단한 대답은 보존입니다. MINIX 3과 같은 마이크로커널 기반 운영 체제는 대부분의 서비스가 사용자 모드에서 실행되므로 덜 유해합니다. 모놀리식 커널(예: Linux)의 거의 모든 서비스는 커널 모드에서 실행됩니다. 따라서 MINIX 3의 드라이버 충돌로 인해 전체 시스템이 다운될 가능성은 거의 없으며 이는 Linux에서 드문 일이 아닙니다.

    시스템 호출은 사용자 모드에서 커널 모드로 전환하는 데 사용되는 모놀리식 커널(공유 데이터 모델)의 기본 요소입니다. 메시지 전달은 마이크로커널(클라이언트/서버 모델)에서 사용되는 기본 요소입니다. 보다 정확하게는 메시징 시스템에서 프로그래머는 시스템 호출을 사용하여 CPU의 주의를 끌기도 합니다. 메시징은 운영 체제 개발자에게만 표시됩니다. 시스템 호출을 사용하는 모놀리식 커널은 더 빠르지만 안정성이 떨어지는 반면, 메시지 전달을 사용하는 마이크로커널은 느리지만 오류 격리가 더 좋습니다.

    따라서 2에서는 사용자 모드에서 커널 모드로 전환하는 두 가지 다른 방법을 언급합니다.

  3. 수정하려면 소프트웨어 인터럽트(트랩이라고도 함)를 생성하는 가장 일반적인 방법은 시스템 호출을 수행하는 것입니다. 반면에 인터럽트는 순전히 하드웨어에 의해 생성됩니다.

    소프트웨어나 하드웨어를 통해 CPU를 중단하면 현재 상태(실행 중이던 프로세스와 중지된 지점)를 어딘가에 저장해야 합니다. 그렇지 않으면 프로세스를 다시 전환할 때 이를 복원할 수 없습니다. 이것을 컨텍스트 전환이라고 하며 이는 의미가 있습니다. 다른 작업을 수행하기 위해 컴퓨터를 종료하기 전에 먼저 중단한 부분부터 다시 시작할 수 있도록 모든 프로그램/문서 등이 저장되어 있는지 확인해야 합니다. 다음번에 열어보겠습니다 :)

    따라서 3에서는 트랩이나 인터럽트를 실행한 후 수행해야 할 작업과 두 상황이 얼마나 유사한지 설명합니다.

답변2

시스템 호출, 메시지 전달(Wikipedia 기사에 설명된 대로) 및 인터럽트는 모두 다음과 같은 원인이 될 수 있습니다.컨텍스트 스위치또는 사용자 모드에서 커널 모드로 전환합니다. 당신은 알 수 있습니다:

  • 커널 모드: 프로그램에는 메모리에 대한 평면적 또는 실제 보기가 있으며 프로그램은 모든 메모리와 모든 하드웨어 장치를 제한 없이 직접 자유롭게 읽고 쓸 수 있습니다.

  • 사용자 모드: 프로그램에는 메모리에 대한 가상 보기가 있습니다. 프로그램은 모든 메모리를 자유롭게 읽고 쓸 수 없으며 하드웨어 장치를 직접 읽고 쓸 수도 없습니다. 더 많은 메모리를 확보하거나 하드웨어 장치에 액세스하려면 사용자 모드 프로그램이 다음을 수행해야 합니다.부르다핵심. 이를 달성하는 두 가지 방법은 시스템 호출과 메시지 전달입니다.

시스템 호출은 특정 CPU 명령어 또는 명령어 세트를 실행하는 것과 관련되어 CPU가 미리 정의된 주소(사용자 모드에 쓸 수 없음)로 점프(먼저 스택에 반환 주소 저장)하고 CPU를 사용자 모드에서 커널로 이동시킵니다. 모드(인텔 아키텍처에서는 루프 3을 링 0으로).

하드웨어 인터럽트는 거의 동일한 작업을 수행합니다. 즉, CPU를 미리 정의된 주소로 점프(먼저 스택에 반환 주소 저장)하고 CPU를 사용자 모드에서 커널 모드로 이동시킵니다. 따라서 많은 CPU에서 동일한 메커니즘이 소프트웨어("소프트웨어 인터럽트"라고 함)에 의해 호출될 수 있으며 CPU 호출에 사용될 수 있습니다.

메시지 전달은 (적어도 나에게) 커널이 메시지 스트림을 수신하는 "실행 프로세스"이고 그러한 메시지를 보내는 사용자 모드 액세스 기능이 있다는 것을 의미합니다. 또는 "전송" 함수가 값을 스택에 푸시하고 다음에 커널이 제어권을 갖게 되면(프로세스가 차단되거나 인터럽트가 발생하는지 여부) 스택에서 메시지를 팝하고 이에 따라 내부 루틴으로 디스패치합니다. .

마이크로커널 아키텍처에서 실제 "커널"은 매우 작으며 커널이 제공하는 대부분의 기능은 "서버" 프로세스로 이동됩니다. 이 프로세스는 모두 다중 CPU 시스템에서 동시에 실행될 수 있습니다. 평소보다 더 복잡합니다. 기존 시스템 호출 방법이 유용합니다. "메시지"를 해석하고 이를 적절한 커널 "서버"로 라우팅하는 것은 마이크로커널의 몇 안 되는 작업 중 하나입니다.

답변3

메시지 전달은 한 프로세스가 다른 프로세스에 메시지를 보내는 상위 수준 개념입니다. 이는 시스템(커널) 호출을 통해 구현되며 커널이 다른 프로세스에 메시지를 전달하도록 요구합니다. 시스템 호출을 위해서는 커널이 프로세스에 대한 다양한 서비스를 수행해야 합니다. 이는 소프트웨어 인터럽트/시스템 트랩을 통해 구현되며, CPU가 스택의 일부 상태를 저장하여 나중에 반환한 다음 커널 모드로 전환하고 커널 처리기로 점프합니다.

하드웨어와 소프트웨어 인터럽트 모두 CPU가 상태를 저장하고, 커널 모드로 전환하고, 인터럽트에 대해 정의된 핸들러로 점프하도록 합니다. 차이점은 키보드가 키를 눌렀음을 나타내는 것과 같이 주의가 필요할 때 외부 하드웨어에 의해 하드웨어 인터럽트가 생성된다는 것입니다. 그런 다음 키보드 핸들러는 키보드 IO 포트를 읽어 어떤 키를 눌렀는지 확인하고 적절한 조치를 취한 다음 중단된 프로그램으로 돌아갈 수 있습니다.

관련 정보