
그의 자서전에서는재미로, Linus는 Linux를 Minix 및 기타 UNIX 복제품에 대한 경쟁력 있는 경쟁자로 만드는 데 중추적인 역할을 한 "페이지-디스크" 기능을 언급합니다.
12월에 독일에 RAM이 2MB밖에 안 되는 사람이 있었는데, 커널을 컴파일하려고 했으나 당시 GCC에 1MB 이상이 필요했기 때문에 GCC를 실행할 수 없었던 사람이 있었던 것으로 기억합니다. 그는 나에게 많은 메모리가 필요하지 않은 더 작은 컴파일러로 Linux를 컴파일할 수 있는지 물었습니다. 그래서 나는 특정 기능이 필요하지 않더라도 그에게 필요한 기능을 제공하기로 결정했습니다. 이는 페이지-디스크(page-to-disk)라고 하며, 이는 RAM이 2mg만 있어도 디스크를 메모리로 더 많이 사용하는 것처럼 보이게 할 수 있음을 의미합니다. 때는 1991년 크리스마스쯤이었다.
Page-to-disk는 Minix가 한 번도 해본 적이 없는 일이었기 때문에 상당히 큰 일이었습니다. 이는 1992년 1월 첫째 주에 출시된 버전 0.12에 포함되었습니다. 즉시 사람들은 Linux를 Minix뿐만 아니라 Mark Williams Company에서 개발한 소규모 Unix 클론인 Coherent와 비교하기 시작했습니다. 처음부터 페이지를 디스크에 추가하는 행위로 인해 Linux는 경쟁에서 우위를 점하게 되었습니다.
그때 리눅스가 시작되었습니다. 갑자기 Minix에서 Linux로 전환하는 사람들이 생겼습니다.
그는 본질적으로 여기서 이야기하고 있습니까 swapping
? Linux에 대한 역사적 관점을 가진 사람들은 아마 알 것입니다.
답변1
예, 이는 사실상 교환입니다. 인용하면0.12 릴리스 노트:
가상 메모리.
이제 "mkfs" 프로그램 외에도 루트 디스크에 "mkswap" 프로그램이 있습니다. 구문은 "mkswap -c /dev/hdX nnn"과 동일하며, 다시 말하지만 이는 파티션 위에 기록되므로 주의하세요. 그러면 부팅 이미지의 오프셋 506에 있는 단어를 원하는 장치로 변경하여 스와핑을 활성화할 수 있습니다. 루트 파일 시스템 설정과 동일한 프로그램을 사용하십시오(물론 508 오프셋을 506으로 변경하십시오).
메모! 이것은 2M 머신을 가지고 있는 Robert Blum에 의해 테스트되었으며 많은 메모리 없이도 gcc를 실행할 수 있게 해줍니다. 그러나 내 디스크 공간이 beta-gcc-2.0에 의해 소모되었기 때문에 사용을 중단해야 했습니다. 그래서 여전히 작동하는지 듣고 싶습니다. 심지어 기본적인 스왑 파티션도 만들 수 없었습니다. 크리스마스 때부터 테스트 중입니다. 따라서 새로운 변경 사항이 VM에서 역효과를 낳을 수도 있지만 의심스럽습니다.
0.12에서 페이징은 장치로의 교체뿐만 아니라 요구 로딩(사용되는 바이너리에서 페이지만 로드), 공유(프로세스 간 공통 페이지 공유) 등 다양한 기능에 사용됩니다.
답변2
네, 그게 바로 알려진 개념입니다.페이징 또는 스와핑. (오래 전에는 이 용어들이 약간 다른 의미를 가지고 있었지만 21세기에는 일부 비 Unix 운영 체제의 맥락을 제외하고는 동의어입니다.)
분명히 말하면, 교환은 혁신적인 기능이 아니었습니다. 대부분의 "심각한" Unix 시스템에는 교환 기능이 있었고 이 기능은 Unix보다 오래되었습니다. Linux에서 스와핑이 한 일은 Linux를 "진지한" Unix로 바꾸는 것인 반면, MINIX는 교육 목적을 위한 것입니다.
오늘날의 교환은 여전히 같은 개념입니다. 저장할 페이지와 저장 시기를 결정하는 경험적 방법은 훨씬 더 복잡해졌지만 기본 원칙은 그대로 유지됩니다.
답변3
스와핑은 가상 메모리와 심지어 메모리 보호보다 앞서 나온 개념입니다. 이는 단지 다른 프로세스를 위한 공간을 확보하기 위해 디스크에 프로세스를 배치하는 것을 의미합니다. 원래 유닉스에는 두 가지 특징이 있었습니다. 즉, 프로그램 코드를 메모리에 한 번만 유지하고 데이터 섹션만 교체하는 "공유 텍스트" 프로그램이었습니다. 그리고 메모리 이미지를 교체하지 않고 복사본(자식)을 계속 실행하면서 프로세스를 디스크로 교체하는 "포크" 시스템 호출이 있었습니다.
스와핑과 달리 페이지-디스크를 사용하면 실제 메모리에 맞지 않는 프로세스를 실행할 수 있습니다. 보호 가능한 모든 메모리, 가상 주소를 물리적 주소로 매핑하는 메모리, 매핑되지 않은 가상 주소에서 합리적으로 선택 가능한 물리적 주소로 매핑을 변경하고 중단해야 했던 명령을 재개할 수 있는 재시작 가능한 페이지 오류 메커니즘이 필요합니다. 매핑이 누락되었습니다.
UNIX는 MMU 없이 68000 프로세서(스와핑 포함)에서 실행될 수 있었고 메모리 보호를 위해 MMU를 효과적으로 활용했지만 실제로 페이지 오류 후 프로그램을 재개할 수 있는 메커니즘을 갖추려면 68010이 필요했습니다.
80386은 여러 면에서 형편없고 시대에 뒤떨어진 디자인이었습니다. 그러나 내장된 MMU와 적절한 페이지 오류 기능 덕분에 단순히 스왑이 아니라 페이지-디스크로의 전환이 가능한 UNIX 계열 시스템에서 즉시 더 많은 실행 가능성을 갖게 되었습니다.
현대 시스템의 신들에게 실리콘(완전한 MMU 및 가상 가능 CPU 설계가 상당한 다이 공간을 차지함)을 희생하는 일이 주로 취미생활자에 의해 이루어졌다는 것은 일종의 역사적 아이러니입니다. Xenix 및 OS/2와 같은 "큰 물고기"는 결국 길가로 떨어졌습니다.
"페이지에 포함되지 않았으나 실행 예정이 없는 것"을 "교체됨"과 동일하게 부를 수 있지만 실제로는 "교체됨"의 원래 의미처럼 전부 아니면 전무라는 제안은 아닙니다.
수요 페이징은 일반 스와핑보다 훨씬 더 유용하고 확장성이 뛰어나 필요한 CPU 및 MMU 기능이 일반화되면 이를 대체했기 때문에 그 이후 수십 년 동안 차이가 사라졌습니다. 보고 느끼다.