프로세스 종료가 여전히 메모리 관리에 나쁜 것으로 간주됩니까?


18

그래서 나는 메모리 관리에 대해 상사와 약간의 토론을하고 있습니다.

프로세스를 죽이면 메모리 할당을 해제 할 수 없다고 들었습니다. 아직도 그런 일입니까, 아니면 몇 년 전입니까?

우리는 여기서 Windows와 OS X를 이야기하고 있습니다.


4
유효한 질문; 다시 열려면 투표하십시오. OP는 추론이나 토론이 아닌 OS (이 경우 2 개의 OS) 동작에 대한 특정 정보를 요청했습니다.
JRobert

와우,이 질문이 그렇게 빨리 많은 관심을 끌 것이라고는 생각하지 못했습니다.
Jeff

답변:


7

내가이 재료를 배운 지 오랜 시간이 지났지 만 여기에 간다.

운영 체제가 프로세스를 시작하면 가상 메모리 테이블에서 페이지를 할당합니다. 운영 체제는 가상 메모리 테이블에서 실제 메모리 또는 디스크의 스왑 공간으로의 맵을 유지 관리합니다. 프로세스가 종료되면 OS는 CPU주기를 중단하지 않습니다. 몇 가지 정리 항목을 수행하며 그 중 하나는 모든 메모리 페이지를 사용 가능한 것으로 표시합니다. 이를 통해 다른 응용 프로그램에서 재사용 할 수 있습니다. 또한 OS는 프로세스가 가진 모든 리소스 핸들을 정리하여 파일, 네트워크 연결, 프로세스 간 파이프 등을 자동으로 닫습니다. 이 프로세스는 전적으로 OS의 제어하에 있으며 프로세스가 어떻게 종료 되든 관계없이이 단계를 수행합니다.

이 모든 것이 운영 체제 프로세스에 적용됩니다. 가상 머신 방식이 있고 여러 가상 프로세스를 한 번에 실행중인 경우 VM은 가상 머신에 할당 및 할당 해제 방법을 결정해야합니다. 그러나 OS에서는 여전히 하나의 프로세스처럼 보입니다. 따라서이 경우 여러 프로세스를 실행하는 VM이 ​​있고 VM 내에서 그 중 하나를 종료하면 호스트 OS에서 즉시 메모리를 다시 얻지 못할 수 있습니다. 그러나 VM으로 다시 가져옵니다. 그러나 운영 체제 내에서 VM을 종료하면 OS가 VM을 종료하고 (이는 간접적으로 VM의 프로세스를 종료 함) 모든 메모리를 회수합니다 (가비지 수집기를 통과 할 필요가 없음, free ()). , 삭제 또는 기타 사항).

높은 추론 :

.NET이 동일한 VM에서 둘 이상의 .NET 앱이있는 가상 머신으로 실행되는 경우 .NET은 GC를 실행할 때까지 GCd가 아닌 메모리를 보유 할 수 있으며 Windows는 .NET이 실제보다 더 많이 사용합니다. (그리고 MS가 정말 매끄럽다면 Windows는 메모리가 부족한 상황에서 .NET을 GC에 알릴 수는 있지만 디스크 스왑 공간이 무엇인지는 거의 알 수 없습니다.)

.NET이 그런 식으로 작동했다면 OS는 여전히 OS 목적을위한 하나의 프로세스로 생각할 것입니다.이 프로세스는 유지할 것과 버릴 것을 결정하는 책임이 있으며, 프로세스에 필요한 것을 알리는 것은 일반적으로 Windows의 문제가 아닙니다. 메모리 할당 해제를 시작합니다. 이 시점에서 MS는 .NET 프로세스가 그렇지 않은 것을 제외하고는 .NET 프로세스가 Windows 프로세스처럼 보이도록 .NET 전용의 특수 API를 빌드 할 수 있습니다. 따라서 프로세스 메모리가 할당 해제되지 않았다고 생각할 수 있습니다. 정말입니다; 잘못된 프로세스를보고 있다는 것입니다.

.NET이 실제로 그렇게 작동한다고 말할 정도로 충분하지 않습니다. Java VM은 그렇지 않습니다.

추측의 끝.

편집 : 메모리 관리에 나쁜 프로세스를 죽이는 한 여러 프로세스가 동일한 풀에서 할당해야합니다 (즉, 실제 프로세스보다 스레드와 유사합니다). 프로세스가 끝난 후 메모리가 해제되지 않아야합니다. 죽었다. 가상 메모리와 선점 형 멀티 태스킹은 일반적으로 함께 구현 되었기 때문에 협력적인 멀티 태스킹 시스템이 거의 필요합니다. 가상 메모리가 있으면 OS 수준에서 프로세스 후에 정리하기가 쉽지 않습니다. 모든 페이지를 프로세스 풀에서 사용 가능한 풀로 이동하기 만하면됩니다.


훌륭한 답변; 당신이 몇 초만 앞서도 여전히 내 것을 게시했습니다. :)
Simon Richter

8

내 경험에 아무런 문제가 없습니다.

예를 들어, 4GB의 RAM이 있고 그 중 3GB가 게임에서 사용 중이고 게임 프로세스를 종료 한 경우 문제없이 게임을 다시 시작할 수 있으며 프로세스에 다시 3GB의 RAM이 있습니다.


동의한다. "정리"할 수 없다고 들리지만 Sirex가 말한 것처럼 문제가되지는 않았다. NT에서는 이러한 프로세스가 분리되어 있어야했지만, win98에서는 문제가되지 않았습니다. 당신이 그것을 죽일 수 있다면 그것은 대부분 사라질 것입니다. 논리적으로 시스템이 시스템을 닫거나 강제로 닫으려고 시도한 다음 마지막 기회가 주어지면 실제로 시스템을 강제 종료합니다.
Psycogeek

8

질문 태그 (Windows 및 OS X)에 나열된 운영 체제는 가상 메모리를 구현 합니다 . 여기서 각 프로세스에는 고유 한 주소 공간이 제공되며 OS에 의해 실제 메모리에 매핑됩니다. 이 맵핑 테이블은 프로세스가 종료 될 때 메모리 할당 정리에 사용되므로 메모리가 완전히 해제됩니다. 실제 페이지는 여러 프로세스간에 공유 될 수 있으며,이 경우 더 이상 사용자가 없을 때 해제됩니다.

일반적으로 파일 핸들과 같은 다른 리소스는 기능 의 형태로 프로세스에 제공됩니다 . 여기서 프로세스는 리소스에 대한 핸들을 받고 잘 정의 된 액세스 기능을 통해이를 처리합니다. OS는 함수를 제공하는 핸들 값에서 커널 내부 오브젝트로 테이블 맵핑을 유지합니다. 또한이 테이블은 프로세스가 종료 될 때 정리에 사용될 수 있습니다.

예를 들어 프로세스 간 통신에 사용할 수있는 영구 명명 된 공유 메모리 할당을 만드는 것이 가능합니다. OS가 여전히 필요한지 여부를 판단 할 수 없기 때문에 거의 사용되지 않습니다.

다른 운영 체제에서는 때때로 명확한 프로세스 분리가 없습니다. 따라서 개별 응용 프로그램을 정리해야합니다.

프로세스를 강제로 닫으면 프로세스를 정리할 기회를주지 않고 프로세스를 종료합니다. OS에 모든 리소스의 전체 목록이있는 경우 부작용이 없습니다.


5

그것은 메모리 관리가 널리 구현되기 전날이었습니다. 오늘날 당신이 놓칠 수있는 유일한 메모리는 드라이버와 커널 모듈이 사용하지 않은 메모리 또는 좀비로 남아있는 메모리이지만 실제로 땅콩입니다.

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