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


14

프로세스 관리에 대한 Wikipedia 기사를 읽고 있습니다. 저의 초점은 Linux입니다. 개념과 목적에서 시스템 호출, 메시지 전달 및 인터럽트 간의 관계와 차이점을 알 수 없습니다. 리소스와 서비스를 위해 커널에 요청하는 프로세스입니까?

기사의 일부 인용문과 다른 인용문 :

  1. OS가 할당 해제 또는 할당을 수행하기 위해 프로그램을 실행하는 동안 OS가 프로세서 제어를 다시 얻는 방법에는 두 가지가 있습니다.

    1. 프로세스는 시스템 호출을 발행합니다 (소프트웨어 인터럽트라고도 함). 예를 들어, 하드 디스크의 파일에 대한 액세스를 요청하는 I / O 요청이 발생합니다.
    2. 하드웨어 인터럽트가 발생합니다. 예를 들어 키보드에서 키를 눌렀거나 타이머가 소진되었습니다 (예비 멀티 태스킹에 사용).
  2. 사용자 모드에서 실행되는 프로그램이 커널 서비스를 요청할 수있는 두 가지 기술이 있습니다.

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

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


2
아주 좋은 질문입니다!
Stéphane Gimenez

답변:


12
  1. 모든 최신 운영 체제는 멀티 태스킹을 지원합니다. 이는 시스템이 동시에 여러 프로세스를 실행할 수 있음을 의미합니다. 의사 병렬 (하나의 CPU 만 사용 가능한 경우) 또는 오늘날 멀티 코어 CPU가 병렬로 공통입니다 (하나의 작업 / 코어).

    하나의 CPU 만 사용할 수있는 간단한 사례를 살펴 보겠습니다. 즉, 동시에 두 개의 서로 다른 프로세스 (웹 브라우저와 음악 플레이어라고 함)를 실행하면 시스템에서 실제로 해당 프로세스를 동시에 실행할 수 없습니다. CPU가 항상 한 프로세스에서 다른 프로세스로 전환하고 있습니다. 그러나 이것은 매우 빠르게 일어나므로 결코 눈치 채지 못할 것입니다.

    이제 두 프로세스가 실행되는 동안 재설정 버튼 (bad boy)을 누른다 고 가정하겠습니다. CPU는 모든 작업을 즉시 중지하고 시스템을 재부팅합니다. 축하합니다 : 인터럽트를 생성했습니다.

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

    따라서 1은 CPU에서 주목을받는 두 가지 방법을 설명합니다.

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

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

    시스템 호출은 사용자에서 커널 모드로 전환하기 위해 모 놀리 식 커널 (공유 데이터 모델)에서 사용되는 기본 요소입니다. 메시지 전달은 마이크로 커널 (클라이언트 / 서버 모델)에서 사용되는 기본 요소입니다. 더 정확하게 말하면 메시지 전달 시스템 프로그래머는 시스템 호출을 사용하여 CPU의 관심을 끌게됩니다. 메시지 전달은 운영 체제 개발자 만 볼 수 있습니다. 시스템 호출을 사용하는 모 놀리 식 커널은 더 빠르지 만 신뢰성은 떨어지지 만 메시지 전달을 사용하는 마이크로 커널은 느리지 만 결함 격리가 더 좋습니다.

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

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

    우리가 (소프트웨어 또는 하드웨어에 의해) CPU를 중단 할 때, 현재 상태 (어딘가에서 실행중인 프로세스와 중지 된 시점)를 저장해야합니다. 그렇지 않으면 다시 전환 할 때 프로세스를 재개 할 수 없습니다 . 이를 상황 전환이라고하며 다음과 같은 의미가 있습니다. 다른 작업을 수행하기 위해 컴퓨터를 끄기 전에 먼저 모든 프로그램 / 문서 등을 저장했는지 확인해야합니다. 다음에 켤 때 :)

    따라서 3은 트랩 또는 인터럽트를 실행 한 후 수행해야 할 작업과 두 경우의 유사성을 설명합니다.


1
감사! (1) 1에서 CPU에서 주목을받는 두 가지 방법은 소프트웨어 인터럽트 (시스템 호출 예제가있는 프로그램)와 하드웨어 인터럽트 (리셋 키 예제)라는 것을 의미합니까? (2) 2에서 시스템 호출과 메시지 전달이 소프트웨어 인터럽트의 두 가지 방법이라는 것을 의미합니까? (3) 소프트웨어 인터럽트의 목적이 요청 커널 서비스 및 자원에 대한 프로세스입니다 정확하고, 하드웨어 인터럽트의 목적은 하지 ? 그렇다면 하드웨어 인터럽트의 목적은 무엇입니까?
Tim

1
(1) 맞습니다. (2) 시스템 호출과 메시지 전달은 프로세스 간 통신을 달성하는 데 사용할 수있는 두 가지 기술입니다. 그러나 둘 다 소프트웨어 기반이므로 CPU에서주의를 끌기 위해 트랩 (소프트웨어 인터럽트)을 실행합니다. (3) 어떤 의미에서는 그렇습니다. 커널 서비스를 요청하는 예 creat는 새 파일 작성 과 같은 라이브러리 프로 ​​시저 (하나 이상의 시스템 호출로 변환 됨)를 실행하는 것 입니다. 인터럽트의 예는 프린터가 CPU에 신호를 보내 인쇄가 완료되었음을 알리는 신호입니다.
sakisk

1
감사! (3)에 관해서는 어떤 의미에서 아니오를 의미합니까? 하드웨어 인터럽트 및 소프트웨어 인터럽트의 일반적인 목적은 무엇입니까?
Tim

1
시스템 리셋은 인터럽트가 아닙니다. 이후에 다시 시작하기 위해 상태를 저장하지 않습니다.
psusi

1
@faif reset 및 NMI (Non Maskable Interrupt)는 CPU에서 서로 다른 두 개의 핀입니다. 후자는 인터럽트를 일으켜 상태를 저장하고 핸들러로 점프합니다. 전자는 전원을 켤 때와 마찬가지로 CPU를 의도적으로 초기화합니다 (의도적으로 모든 상태를 버림). 인터럽트 정의의 일부는 상태를 저장한다는 것이므로 재설정이 해당 정의를 충족시키지 못합니다.
psusi

9

시스템 호출, 메시징 전달 (Wikipedia 기사에서 설명) 및 인터럽트는 컨텍스트 전환 또는 사용자 모드에서 커널 모드로 전환되는 모든 요인입니다 . 아시다시피

  • 커널 모드 : 프로그램은 메모리를 평평하거나 실제적으로 볼 수 있으며 프로그램은 제한없이 모든 메모리와 모든 하드웨어 장치를 자유롭게 읽고 쓸 수 있습니다.

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

시스템 호출은 특정 CPU 명령어 또는 명령어 세트를 실행하여 CPU가 스택에 처음으로 저장 주소를 저장하여 미리 정의 된 주소 (사용자 모드로 쓸 수 없음)로 이동하고 CPU를 사용자 모드에서 커널 모드 (링)로 이동시킵니다. 3은 0에서 0으로 울림).

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

메시지 전달은 커널이 메시지 스트림을 수신하는 "실행중인 프로세스"이며 이러한 메시지를 보내는 사용자 모드 액세스 기능이 있음을 나타냅니다. 또는 "보내기"기능은 스택에 값을 표시하고 다음에 커널이 제어를 제어 할 때 (프로세스가 차단되거나 인터럽트가 발생하는 경우) 스택에서 메시지를 팝하고 그에 따라 내부 루틴으로 디스패치 할 수 있습니다.

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


3
커널 모드는 동일한 페이지 테이블을 사용하며 사용자 모드와 동일한 가상 메모리보기를 제공합니다. 차이점은 커널 모드로 제한되는 것으로 표시된 페이지에 액세스 할 수 있다는 것입니다.
psusi

5

메시지 전달은 한 프로세스가 다른 프로세스로 메시지를 보내는 상위 개념입니다. 커널이 메시지를 다른 프로세스에 전달하도록 요청하는 시스템 (kernel) 호출로 구현됩니다. 시스템 호출은 커널에게 프로세스에 대한 다양한 서비스를 수행하도록 요청합니다. 그것들은 소프트웨어 인터럽트 / 시스템 트랩에 의해 구현되어 CPU가 스택에 일부 상태를 저장하여 나중에 돌아올 수 있도록 한 다음 커널 모드로 전환하고 커널 처리기로 이동합니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.