2014-03-12 7 views
-1

실제 시스템 호출이 어떻게 생성되는지에 대한 질문이 있습니다. 나는 C 라이브러리에서 시스템 콜의 마술 (읽기 등)을하지만 정확한 메커니즘을 이해하지 못한다는 것을 알고있다. 내 주요 문제는실제 시스템 호출은 어떻게 이루어 집니까?

  1. 입니다. c 라이브러리 루틴은 사용자 주소 공간에 있습니다. 그러면 인터럽트 서비스 루틴의 주소를 어떻게 얻을 수 있을까요? 인터럽트 서비스 루틴은 실제 메모리에서 미리 정의되어 있습니까?

  2. 어떻게 든 ISR 루틴이 호출 되더라도 주소 공간은 어떻게 변경됩니까? 우리가 ISR 실행을 시작하기 전에 '페이지 테이블 기본 레지스터'가 커널의 페이지 테이블을 가리 키도록 어떻게 변화할까요? 'C'루틴이 그것을한다면 커널의 페이지 테이블의 주소를 어떻게 알 수 있을까요?

  3. 사용자 공간에서 커널 공간으로 매개 변수가 복사되는 방식은 무엇입니까?

내 질문에 너무 기본적인 것이지만 나는 이것을 처음 사용하면 실례합니다. :)

감사 Rohit 대부분의 시스템에서

답변

0

는, 예를 들어, ARM에서 x86에서 intswi는 "소프트웨어를 요청합니다 (사용자 정의 인터럽트를 호출하는 사용자 코드를 실행할 수있는 명령이있다 일시 정지").

사용자 모드에서 실행되는 CPU는이 지침 중 하나를 볼 때 커널 모드로 전환하고 특정 인터럽트에 대해 미리 정의 된 ISR 위치로 점프합니다. 인터럽트 번호는 일반적으로 고정되어 있으며 해당 ISR은 커널에 대한 시스템 호출 핸들러입니다.

커널은 인터럽트가 호출 될 때 (컨텍스트 전환 중에 스택의 모든 레지스터를 저장하는 것과 비슷한 방식으로) 사용자 모드 레지스터와 스택을 검사하고에서 시스템 호출 인수를 가져올 수 있습니다. 그곳에.

+0

방법은 사용자로부터 ADRESS 공간 변화가 커널 모드로 않기 때문에 본질적으로 동일? – Rohit

0

가 좋아 나는 (적어도 난 그렇게 생각) questions about kernel space

1. C 라이브러리 루틴은 사용자 주소 공간에에 내가 답을 찾은 것 같아; 그러면 인터럽트 서비스 루틴의 주소를 어떻게 얻을 수 있을까요? 인터럽트 서비스 루틴은 실제 메모리에 미리 정의되어 있습니까?

ISR 위치는 위의 nneonneo가 대답하는 것으로 미리 정의되어 있습니다.

2. 어떻게 든 ISR 루틴을 호출해도 주소 공간이 어떻게 변경됩니까? ISR 실행을 시작하기 전에 ' 테이블 기본 레지스터'페이지가 커널의 페이지 테이블을 가리 키도록 어떻게 변경 될까요? 'C'루틴을 수행하면 커널 페이지 테이블의 주소를 어떻게 알 수 있습니까? 커널 공간으로 주소 공간에 변화가 없습니다

사용자 (보호 수준 단지 차이가)

관련 문제