
운영 체제가 하위 프로세스에 사용 가능한 메모리 양을 알려주는 방법이 궁금합니다.
전체 컴퓨터에 1GB RAM 메모리가 내장되어 있다고 가정해 보겠습니다. 운영 체제가 실행되고 100MB를 사용합니다(운영 체제가 실제로 얼마나 많이 사용하는지 모르겠습니다). 그럼 900MB가 남았네요.
그런 다음 10개의 프로그램을 실행합니다. 각 프로그램은 10개의 하위 프로세스를 생성합니다. 문제는 이러한 상위 및 하위 프로세스가 사용 가능한 총 메모리를 무엇으로 보는가입니다.
좀 더 복잡하게 만드는 질문의 두 번째 부분으로, 응용 프로그램이 한동안 실행되어 이제 컴퓨터에서 500MB를 사용할 수 있다고 가정해 보겠습니다(운영 체제는 100MB를 더 사용하고 응용 프로그램은 300MB를 더 사용한다고 가정해 보겠습니다. 이 수준인 500MB에 도달하려면). 이제 문제는 이러한 상위 및 하위 프로세스가 이 시점에서 사용 가능한 메모리로 무엇을 보는가입니다. 이전과 같다면, 아니면 다르다면, 어떻게 다른지.
질문의 이유는 내가 읽었 기 때문입니다.가상 메모리이는 다음과 같이 말합니다.
가상 메모리[는] "사용자에게 매우 큰 (주) 메모리에 대한 환상을 만들어내는" "주어진 시스템에서 실제로 사용할 수 있는 저장소 리소스의 이상화된 추상화"를 제공하는 기술입니다.
따라서 기본적으로 (1)의 경우 각 프로세스는 "사용 가능한 메모리가 1GB입니다" 또는 "사용 가능한 메모리가 900MB입니다"라는 메시지가 표시되는 것처럼 들립니다. 실제로 무슨 말을 하게 될지는 잘 모르겠지만, 만약에총전체 컴퓨터 또는 전체 - 운영 체제의 사용량.
그런 다음 (2)의 경우에는 "1GB 사용 가능", "900MB 사용 가능", "600MB 사용 가능" 또는 "500MB 사용 가능"으로 표시됩니다. 같은 상황인데 무슨 말인지 모르겠네요.
해당 값과 다를 수도 있습니다. 운영 체제는 100개의 하위 프로세스 각각에 대해 사용 가능한 메모리를 대략적으로 계산하여 균등하게 나눌 수 있습니다. 따라서 컴퓨터에 500MB가 남아 있다면 각 프로세스에는 "500 / 100 == 5MB의 사용 가능한 공간이 있습니다"라는 메시지가 표시됩니다. 하지만 이런 경우라면 하나의 프로세스가 5MB를 사용하고 아직 495MB가 남아 있다면 이를 사용하여 시작할 수 있는지 궁금해하고 사용 가능한 항목에 대한 새로운 숫자를 알려줍니다. 이것이 내가 이것이 일반적으로 수행되는 방식이 아니라고 생각하는 이유이며 오히려 OS가 알려줄 것 같습니다.아마컴퓨터에서 사용할 수 있는 것전체적으로(그래서 1GB).
또한 항상 "1GB"라고 생각하는 이유는 단일 프로세스가 사용하는 메모리 양을 확인할 수 있는 방법이 있는지(또는 운영 체제가 사용 중인 메모리 양을 알고 있는지) 확실하지 않기 때문입니다. OS의 경우하다자체적으로 얼마나 많이 사용하고 있는지 알면 900MB를 보고하는 것 같습니다.
혼란스러운 또 다른 부분은 메모리 사용량이 지속적으로 변하고 OS가 각 프로세스에 총 메모리(사용된 메모리)를 알려주는 경우 액세스를 시도할 때 사용 가능한 메모리 양을 지속적으로 확인해야 한다는 것입니다. 더 많은 메모리. 즉, 프로그램이 시작될 때 메모리 사용량을 캐시할 수 없습니다. 프로그램이 몇 시간 동안 유휴 상태로 있을 때 "컴퓨터에" 100MB의 메모리가 있는 상태로 시작하지만 그 후 다시 확인하면서 "잠깐만 사용 가능한 메모리가 5MB밖에 없습니다"라는 것을 발견할 수도 있습니다. 어떤 이유로 바람직하지 않은 행동처럼 보이지만 확실하지 않습니다.
OS가 다양한 시점에 사용 가능한 메모리 양을 하위 프로세스에 알리는 방법을 일반적으로 이해하는 데 도움이 될 것입니다. 감사합니다.
답변1
OS는 여유 메모리에 대해 프로그램에 "알려주지" 않습니다.
모든 프로그램은 전체 프로그램에 액세스할 수 있는 자체 가상 메모리 영역에서 작동합니다.잠재적인허용되는 메모리 주소 공간. 32비트 프로세스의 경우 "메모리"라고 알려진 것은 주소 지정이 가능한 메모리의 전체 4GB이며, 64비트의 경우 공간이 훨씬 더 큽니다. 프로세스는 해당 영역에서 메모리를 할당할 수 있으며, 그런 다음 해당 주소 공간의 영역을 물리적 메모리로 백업하여 읽고 쓸 수 있도록 해야 한다고 운영 체제에 알립니다. 그러나 프로그램은 (이론적으로) 메모리만큼을 가집니다. 그것은 원한다.
RAM이 1GB만 있는 시스템에서 이는 실제 메모리가 가득 차면 운영 체제가 데이터를 스왑 파일이나 파티션으로 밀어내기 시작한다는 것을 의미합니다. 이는 메모리가 페이징되는 실제 프로세스의 개입 없이 수행됩니다. 프로세스가 페이지 아웃된 메모리에 액세스하려고 시도하면 운영 체제는 프로세스를 중단하고 디스크에서 데이터를 다시 가져온 다음 프로세스를 다시 시작합니다.
프로그램은 다음을 수행할 수 있습니다.질문메모리가 부족한 상황에서 스스로 제한할 수 있도록 사용 가능한 물리적 RAM의 양은 얼마입니까? 그러나 물리적 RAM 및 스왑 공간이 부족하지 않는 한 운영 체제에 의해 인위적으로 제한되지 않습니다. 이 경우 프로그램을 시도할 때 오류가 발생합니다. 메모리를 할당합니다.
답변2
최신 OS에서 실행할 때 가장 좋은 점 중 하나는 애플리케이션이 시스템에 RAM이 얼마나 있는지, 사용 가능한 RAM이 얼마나 되는지 알 필요가 없다는 것입니다. 실제로 대부분의 응용 프로그램은 RAM 세부 사항, CPU에 있는 코어 수, 물리적 드라이브의 크기 및 수, 컴퓨터가 네트워크에 연결되어 있는지 인터넷에 연결되어 있는지 등을 전혀 모르고 있습니다. 이것은 그래야만합니다. OS는 이런 방식으로 사용되도록 설계되었습니다.
OS는 하드웨어와 독립적인 표준 가상화 환경을 애플리케이션에 제공합니다. RAM에 직접 액세스하는 대신 애플리케이션은 RAM 크기와 무관한 가상 주소 공간에만 액세스합니다. 애플리케이션에 있어 메모리는 바로 메모리입니다. RAM은 단지 성능 최적화(현재 기술이 필요한 경우)이자 구현 세부 사항일 뿐입니다. 애플리케이션 코드 및 데이터의 일부는 RAM, 페이지 파일 또는 원본 파일에 있습니다. 이는 애플리케이션 요구사항 및 리소스 가용성에 따라 변경될 수 있습니다. 이러한 세부 정보는 OS에 의해 관리되며 원하더라도 찾을 수 없는 애플리케이션에는 보이지 않습니다.
이 정보가 필요한 애플리케이션의 경우 OS에서 하드웨어 세부 정보를 요청할 수 있지만 요청하는 경우는 거의 없습니다. 대부분의 경우 시스템 유틸리티에만 이 정보가 필요합니다. 대부분의 응용 분야에서는 일반 운전자가 점화 시기나 연료 혼합물에 대해 알아야 하는 만큼 이에 대한 필요성이 거의 없습니다.
이 모든 것은 좋은 것입니다. 이는 응용 프로그램 개발자가 응용 프로그램이 실행되는 하드웨어의 복잡한 세부 사항을 처리할 필요 없이 응용 프로그램의 요구 사항에 시간을 할애할 수 있음을 의미합니다. 이것이 바로 OS의 목적입니다. 이는 4MB RAM을 갖춘 Windows 95용으로 설계된 적절하게 작성된 응용 프로그램이 많은 GB RAM을 갖춘 최신 Windows 10 시스템에서 실행될 수 있음을 의미합니다. 그리고 애플리케이션은 동일하게 작동하며 차이점을 인식하지 못합니다. 모든 애플리케이션이 그렇게 잘 작성된 것은 아닙니다. 물론 최신 시스템은 더 나은 성능을 발휘하고 사용자에게 더 많은 기능을 제공하지만 애플리케이션은 이에 대해 아무것도 모릅니다.
이는 OS 설계자와 개발자에게 엄청난 작업량을 의미하지만 수백만 명의 사용자가 이점을 누리고 있습니다.