Linux 커널이 RAM 디스크에 액세스할 수 있는지, 그렇다면 어떻게 비활성화할 수 있는지 알려줄 수 있는 사람이 있나요?
나는 정보에 액세스하고 정보를 변경할 수 있는 유일한 사람이고 OS가 이를 조작하지 못하도록 하는 RAM 디스크를 원합니다.
편집: RAM 디스크를 마운트하여 하드 드라이브로 사용할 수 있다는 것을 알고 있지만 프로세스에 추가 RAM이 필요할 때 운영 체제가 해당 RAM 디스크에 액세스하고 해당 내용을 조작할 수 있습니까?
운영 체제에서 액세스할 수 없는 메모리 블록을 예약하는 다른 방법이 있습니까?
편집 2: RAM 디스크 데이터가 스왑 공간으로 이동하는 것을 방지하는 방법이 있습니까? 이 RAM 디스크에 쓴 데이터가 항상 RAM(메모리)에 남아 있는지 확인하고 싶습니다.
커널이나 다른 프로세스가 RAM 디스크 데이터를 덮어쓰는지 알고 싶습니다. 더 많은 메모리가 필요할 경우를 대비해!
답변1
RAM 디스크를 생성하고 관리하는 것은 Linux 커널이기 때문에 불가능합니다.
귀하의 질문에 대한 후속 수정 사항에 응답하려면 다음을 요청하십시오.운영 체제에서 액세스할 수 없는 메모리 블록을 예약하는 방법입니다.운영 체제는 하드웨어에 대한 모든 액세스를 관리합니다. 정의에 따르면 이는 목적의 일부입니다. 따라서 아니요. OS가 메모리 블록을 예약하지 않으면 메모리 블록을 예약하는 것이 불가능합니다.
RAM 디스크에 메모리 일부를 할당한 경우 RAM 디스크에 기록된 내용을 덮어쓰지 않습니다. 사용 가능한 메모리는 RAM 디스크와 다른 모든 장치 간에 공유됩니다.
답변2
일반적으로 RAM 디스크라고 부르는 것은 Linux에 있습니다.임시 파일 시스템파일 시스템. 오늘,ramfs
시대에 뒤쳐진ramfs
, 따라서 활용하는 것이 더 나은 이유가 없습니다 .tmpfs
(그러나 실제로는 이미과거실제 RAM "디스크" 하드웨어를 구입하세요. AFAIK는 오래된 기술이므로 SSD를 구입하는 것이 좋습니다.
tmpfs
Linux에서의 파일 시스템 사용법가상 메모리, 기억이 아닙니다. 따라서 스왑 공간이 충분하고 RAM이 부족한 경우(예: 일부 프로세스가매핑(2)with MAP_ANONYMOUS
, 아마도 ...) 커널은 일부 데이터를 스왑 공간으로 malloc
옮깁니다.tmpfs
페이징하위 시스템.
또한 읽어보세요Linuxatemyram.
왜 "운영 체제에 액세스할 수 없는 메모리 조각을 예약"하려는지 이해가 되지 않습니다. 당신은 단지쓰레기RAM은 정의에 따라 해당 메모리 블록에 액세스할 수 있는 항목이 아무것도 없기 때문입니다(모두정의에 따르면 메모리는 다음으로 구성됩니다.운영 체제). 유일한 사용 사례는 RAM의 일부 부분이 물리적으로 손상되었음을 알고 있는 경우입니다(그리고 어떤 부분과 어떤 부분을 알고 있는지 알고 있음).물리적주소). 그런 다음 이를 방지하도록 시스템을 구성할 수 있습니다(그러나 세부 사항을 잊어버렸습니다). 아니면 Linux를 실행하고 있을 수도 있습니다.관리 프로그램다른 시스템 가상 머신에서 해당 RAM을 사용하고 있습니까? 예를 들어 FreeBSD와 같은 다른 OS를 실행하고 있습니까?
내 느낌은 당신이 무엇을 이해하지 못한다는 것입니다운영 체제, 운영 체제 란 무엇입니까?핵심,무엇인가요시스템 호출, 무엇인가요가상 메모리,무엇인가요주소 공간,ㅏ프로세스, 이것페이지 캐시(그래서 귀하의 질문은 그다지 의미가 없습니다!). 많이 읽어야합니다. 에서 시작하다고급 Linux 프로그래밍그리고 여기에 제가 제공한 모든 링크를 클릭하세요.
tmpfs
특정 응용 프로그램에 대해 파일 시스템을 보존 할 수 있습니다 . chown
이러한 응용 프로그램을 전담하는 특정 사용자가 파일 트리를 사용할 수 있도록 만들 수 있습니다 . 바라보다바우처(7),능력(7), ....
당신은 관심이 있을 수도 있습니다시계 잠금(2)(일부 가상 메모리 세그먼트를 물리적 RAM에 잠급니다.)매핑(2),미친 웨스(2),동기화(2),최소 코어(2), 또는 (프로세스 파일 내용)posix_fadvise(2)
일부 (가상) 메모리를 얻고 그것이 RAM에 있는지 확인하려면 mmap
(예를 들어, 파일 세그먼트가 주어진 경우 MAP_ANONYMOUS
with 를 사용하여) 해당 메모리 범위를 가져온 다음 중간( 암시적으로 사용하지 않는 한)MAP_FILE|MAP_LOCKED|MAP_SHARED
mlock
mmap
MAP_LOCKED
mlock
문제와 관련된 일부 명령과 코드를 표시하지 않으면 도움을 받을 수 없습니다.