2017-12-31 44 views
0

커널 공간은 운영 체제의 핵심이 실행되고 서비스를 제공하는 메모리 섹션이며 사용자 공간은 사용자 프로그램이 실행되는 공간입니다. 또한 프로세스의 자체 주소 공간에 스택, 힙, 데이터 및 텍스트 섹션이 있음을 알고 있습니다. 하지만 사용자 스택커널 스택의 개념과 혼동 스럽습니다. 내 질문은 :

커널 공간과 커널 스택의 관계는 무엇입니까?

  1. 내가 앞서 언급 한 프로세스 스택은 사용자 스택 및 커널 스택으로 구성되어 있습니까?
  2. 커널 스택은 커널 공간의 일부입니까?
  3. 두 개의 스택이 프로세스의 가상 메모리 주소로 분리되어 있습니까?
  4. 코드 세그먼트에서 : void main(){user_mode_call(); system_call()} 두 호출의 스택 프레임은 각각 사용자 스택과 커널 스택에 있습니까?


관련 서적 및 링크는 도움이 될 것입니다.
(제 질문은 순진 할 수도 있지만 더 전문적인 방법으로 입력하는 즉시 알려 드리겠습니다)

+2

답변을 얻으려면 전체 도서가 필요합니다. [* 운영 체제 : Three Easy Pieces *] (http://pages.cs.wisc.edu/~remzi/OSTEP/) - 무료로 다운로드 할 수 있습니다. 귀하의 질문이 너무 광범위합니다. [가상 주소 공간] (https : //en.wikipedia.org/wiki/Virtual_address_space)는 너무 순진합니다. 터미널에서'cat/proc/$$/maps'을 시도해보십시오. [proc (5)] (http://man7.org/linux/man-pages/man5/proc .5.html) –

답변

2

스택 구조는 일반적으로 프로세서에 의해 지정됩니다. 각 프로세스는 일반적으로 프로세스 당 하나의 스택 (사용자, 커널 + 프로세서가 사용하는 다른 것)과 프로세서 당 하나의 인터럽트 스택 (다른 커널 스택)을 가지고 있습니다.

앞서 언급 한 프로세스 스택은 사용자 스택과 커널 스택으로 구성되어 있습니까?

아니요. 커널 스택은 사용자 모드 액세스로부터 보호되어야합니다.

커널 스택은 커널 공간의 일부입니까?

사용자 공간에서 보호 메모리 일 수도 있고 보호 메모리 일 수도 있습니다.

두 개의 스택이 프로세스의 가상 메모리 주소로 분리되어 있습니까?

예.

코드 세그먼트에서 : void main() {user_mode_call(); system_call()} 두 호출의 스택 프레임은 각각 사용자 스택과 커널 스택에 있습니까?

"코드 세그먼트"는 교수법 구조입니다. 두 스택의 스택 프레임은 사용자 스택에 있습니다. 시스템 호출은 레지스터 값을 설정하는 래퍼 함수를 ​​호출 한 다음 프로세서를 커널 모드로 전환하는 예외를 발생시킵니다. 이 시점에서 대부분의 프로세서는 기본 스택을 커널 모드 스택으로 변경합니다. 사용자 스택이 커널 모드에서 SP 레지스터를 통해 직접 액세스 할 수 없기 때문에 매개 변수를 시스템 호출에 전달해야합니다.

+0

그래서 우리가 일반적으로 말하는 스택은 무엇을 의미합니까? 사용자 스택입니까? – Mark

+0

첫 번째 단락에서 "프로세스 별"은 "스레드 당"이어야합니다. –

+0

"스택"은 일반적으로 사용자 스택입니다. 그리고 당신은 "쓰레드 당"또는 프로세서의 관점에서 볼 때 동일한 주소 공간을 공유하는 여러 프로세스가있는 프로세스 당 여전히 있다고 말할 수 있습니다. 프로세서 설명서는 스레드가 아닌 프로세스 관점에서 이야기합니다. – user3344003