Linus가 자서전에서 이야기한 "페이지에서 디스크로" 기능은 본질적으로 오늘날 우리가 사용하는 스와핑 개념입니까?

Linus가 자서전에서 이야기한 "페이지에서 디스크로" 기능은 본질적으로 오늘날 우리가 사용하는 스와핑 개념입니까?

그의 자서전에서는재미로, Linus는 Linux를 Minix 및 당시의 다른 UNIX 복제품에 대한 심각한 경쟁자로 만드는 데 결정적인 "페이지-디스크" 기능을 언급했습니다.

지난 12월 독일에 RAM이 2MB밖에 없는 한 남자가 있었는데 그가 커널을 컴파일하려고 했을 때 GCC를 실행할 수 없었습니다. 당시 GCC에는 1MB 이상이 필요했기 때문입니다. 그는 나에게 많은 메모리를 필요로 하지 않는 더 작은 컴파일러를 사용하여 Linux를 컴파일할 수 있는지 물었습니다. 그래서 저는 이 특정 기능이 필요하지 않더라도 그를 위해 만들어 주기로 결정했습니다. 이것을 페이지 투 디스크(page to disk)라고 하는데, 이는 누군가 RAM이 2mg만 있어도 디스크를 메모리로 더 많이 사용하는 것처럼 보이게 할 수 있다는 의미입니다. 1991년 크리스마스쯤이었다.

Page-to-disk는 Minix가 한 번도 해본 적이 없는 일이기 때문에 꽤 큰 일입니다. 1992년 1월 첫 주에 출시된 버전 0.12에 포함되었습니다. 즉시 사람들은 Linux를 Minix뿐만 아니라 Mark Williams의 회사에서 개발한 소규모 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를 "심각한" Unix로 바꾸는 것인 반면 MINIX는 교육 목적입니다.

Exchange는 오늘날에도 여전히 동일한 개념입니다. 저장할 페이지와 시기를 결정하는 경험적 방법은 더욱 복잡해졌지만 기본 원칙은 그대로 유지됩니다.

답변3

스와핑은 가상 메모리와 심지어 메모리 보호보다 먼저 나온 개념입니다. 이는 단순히 하나의 프로세스를 디스크에 배치하여 다른 프로세스를 위한 공간을 확보하는 것을 의미합니다. 이와 관련하여 원래 Unix에는 두 가지 특징이 있었습니다. "공유 텍스트" 프로그램은 프로그램 코드를 메모리에 한 번만 유지하고 데이터 부분만 교환했습니다. 여기에는 메모리 이미지를 교체하지 않고 복사본(하위 프로세스)을 계속 실행하면서 프로세스를 디스크로 교체하는 "포크" 시스템 호출이 있습니다.

스와핑과 달리 디스크로 페이징하면 실제 메모리에 맞지 않는 프로세스를 실행할 수 있습니다. 보호 가능한 모든 메모리, 가상 주소를 물리적 주소로 매핑하는 메모리, 매핑되지 않은 가상 주소에서 합리적으로 선택 가능한 물리적 주소로 매핑을 변경하고 누락으로 인해 필요한 중단된 명령을 복원할 수 있는 재시작 가능한 페이지 오류 메커니즘이 필요합니다. 매핑.

UNIX는 MMU(스왑 포함) 없이 68000 프로세서에서 실행될 수 있었고 MMU를 최대한 활용했습니다(메모리 보호가 가능한 경우). 페이지 폴트 후 복구.

80386은 여러 면에서 열악하고 구식 디자인입니다. 그러나 내장된 MMU와 페이지 오류 수정 기능으로 인해 스와핑뿐만 아니라 페이지-디스크 작업도 지원하는 UNIX 계열 시스템에 즉시 더 적합해졌습니다.

현대 시스템 신들(가상 기능을 갖춘 본격적인 MMU 및 CPU 설계가 상당한 칩 공간을 차지함)에 대한 실리콘의 엄청난 희생이 주로 취미 생활자들에 의해 수행되었다는 것은 역사적인 아이러니입니다. 그리고 "Xenix 및 OS/ 2는 결국 쓸모없게 되었습니다.

"페이지를 가져오지 않고 실행하도록 예약하지 않음"을 "스왑"과 동일시할 수 있지만 실제로는 "스왑"의 원래 의미처럼 전부 아니면 전무라는 제안은 아닙니다.

그 이후로 수십 년이 지나면서 요청 페이징이 일반 스와핑보다 더 유용하고 확장성이 뛰어나며 필요한 CPU 및 MMU 기능이 보편화되자 일반 스와핑을 대체했기 때문에 이러한 차이는 사라졌습니다. 상황. 보고 느끼다.

관련 정보