2012-02-02 4 views
0

사실 하위 및 상위 프로세스에 대한 내용을 이해하지 못했습니다. 하위 프로세스 내부의 전역 변수를 변경하면 이러한 변경이 상위 프로세스에 영향을 미치지 않습니다. 이 웹 사이트에서 문장을 보았습니다. 그것은 말합니다 : "부모 또는 자녀의 모든 변수를 수정해도 다른 하나의 변수가 변경되지 않습니다." 더 많은 정보를 제공해 주시겠습니까? 고맙습니다.전역 변수, 하위 프로세스 및 상위 프로세스

+0

그런데 다른 의견을 읽었습니다. 그것은 자식 프로세스와 부모 프로세스가 메모리에서 다른 공간을 가지기 때문에 변경이 효과가없는 이유입니다. 그것이 사실인지 아닌지 나는 모른다. –

+1

프로세스는 동일한 가상 메모리 주소 공간을 공유하지 않으므로 서로의 변수에 액세스 할 수 없습니다. – onit

답변

4

나는 프로세스스레드 사이의 차이로 혼란스러워하고 있다고 생각합니다.

프로세스은 여러 스레드를 포함 할 수 있습니다. 프로세스는 자체 주소 공간과 시스템 변수 (예 : 파일 핸들)를 가지고 있습니다. 프로세스는 IPC 메커니즘을 통해서만 상호 작용할 수 있으며 다른 프로세스 변수를 직접 다룰 수는 없습니다. 모든 프로세스에는 OS가 식별하는 데 사용하는 PID가 있습니다 (적어도 Linux에서는). 프로세스는 프로세스의 최상부에서 실행되는 많은 스레드를 가질 수 있습니다.

스레드은 프로세스 내부에서 실행할 수있는 고유 한 구조입니다. 각 스레드는 고유 한 스택 포인터 (어셈블리 실행을 가리킴)와 고유 한 레지스트리 값을가집니다. OS가 스레드간에 전환하면 현재 실행 라인을 전환하고 해당 스레드와 함께 저장된 모든 복원 값을 복원합니다. 그러나 프로세스의 스레드는 모두 동일한 메모리를 공유하므로 스레드 간의 전역 변수와 클래스 변수를 수정할 수 있으며 영향을받습니다.

누구나 차임을하고 싶다면 할 수 있습니다. 이것은 프로세스와 스레드의 차이를 이해하는 것 사이의 중요한 점 중 일부라고 생각하는 것에 대한 간략한 요약입니다.

+0

나는 당신이 말하는 것을 이해했습니다. 그래서 1 개의 프로세스를 가질 수 있지만 그 안에는 여러 개의 스레드가있을 수 있으며 동일한 메모리 공간을 공유하므로 변경 사항이 모두 영향을줍니다. 좋아, 알았다. 감사! –

+0

@AhmetTanakol 도움이 될만한 대답을 받아 들여야합니다. 내가 물어 본 질문에 대해 당신이 받아들이지 않았다는 것을 알았습니다. – onit

2

fork가 호출 된 후 parent의 정확한 복제본이 생성됩니다 (자세한 내용은 맨 페이지를 참조하십시오). 따라서 자식과 부모 모두 별도의 프로세스 테이블을 가지고 있습니다. & 주소 공간이 다릅니다. 따라서 진술 내용은 modifying any variables in the parent or child will not see the changes also being made to the other one.

정확한 내용은 manpage of fork()을 참조하십시오.

관련 문제