X가 매우 큰 경우 "X의 segfault" 커널 로그 메시지는 무엇을 의미합니까?

X가 매우 큰 경우 "X의 segfault" 커널 로그 메시지는 무엇을 의미합니까?

내 장치의 메모리가 부족합니다. 밤새 memtest를 실행하면 모든 실패한 주소가 0x7d0000000 - 0x7f0000000이 범위 내에 있는 것으로 나타났습니다. RAM을 교체할 계획이지만 그때까지는 주변의 2GB 청크를 비활성화했습니다 memmap=.

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.5.0-25-generic root=UUID=5277c53f-b2cd-4301-8fdf-0b2119430870 ro memmap=2G$0x0000000790000000 quiet splash vt.handoff=7

다음 명령줄 옵션은 커널에서 인식되는 것 같습니다.

[    0.000000] user-defined physical RAM map:
[    0.000000] user: [mem 0x0000000000000000-0x000000000009efff] usable
[    0.000000] user: [mem 0x000000000009f000-0x00000000000fffff] reserved
[    0.000000] user: [mem 0x0000000000100000-0x0000000019e6a017] usable
[    0.000000] user: [mem 0x0000000019e6a018-0x0000000019e7ae57] usable
[    0.000000] user: [mem 0x0000000019e7ae58-0x000000002cb82fff] usable
[    0.000000] user: [mem 0x000000002cb83000-0x000000002ed2ffff] reserved
[    0.000000] user: [mem 0x000000002ed30000-0x000000002edacfff] ACPI data
[    0.000000] user: [mem 0x000000002edad000-0x000000002f29bfff] ACPI NVS
[    0.000000] user: [mem 0x000000002f29c000-0x000000002fd0efff] reserved
[    0.000000] user: [mem 0x000000002fd0f000-0x000000002fd0ffff] usable
[    0.000000] user: [mem 0x000000002fd10000-0x000000003cffffff] reserved
[    0.000000] user: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] user: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[    0.000000] user: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] user: [mem 0x00000000fed00000-0x00000000fed03fff] reserved
[    0.000000] user: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] user: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] user: [mem 0x0000000100000000-0x000000078fffffff] usable
[    0.000000] user: [mem 0x0000000790000000-0x000000080fffffff] reserved
[    0.000000] user: [mem 0x0000000810000000-0x00000008beffffff] usable

그러나 표면적으로는 예약된 주소 범위 내에서 여전히 세그폴트가 발생합니다.

Mar 09 20:47:40 srv0 kernel: udisksd[656]: segfault at 7fe974786218 ip 00007fe974786218 sp 00007ffcd10d1848 error 7 in libbd_swap.so.3.0.0[7fe974785000+2000] likely on CPU 7 (core 3, socket 0)

~에 따르면이 페이지, 이는 udiskd가 예약된 주소에 쓰려고 시도하는 것으로 해석해야 합니다 0x7fe974786218(오류 7). 언뜻 보기에 이 0x7f주소는 memtest에서 발견한 불량 RAM과 일치하는 것처럼 보이지만 140TB의 값을 가리키므로 크기가 몇 자릿수 다릅니다. 내 컴퓨터에는 32GB가 있습니다.

메모리 주소가 아니라면 segfault at X이 값은 무엇을 나타냅니까?

답변1

여기 주소 공간이 혼란스럽습니다.가상 메모리~의udisks프로세스의 프로세스 주소 공간. 예약하셨습니다물리적 주소 공간.

세그폴트는 프로세스가 물리적 페이지에 매핑되지 않거나 액세스가 허용되지 않는 가상 메모리 주소에 액세스하려고 시도할 때 발생합니다.

물리적 주소와 가상 주소는 서로 관련이 없습니다. 가상 주소를 물리적 주소에 매핑하는 테이블을 유지하는 것이 프로세서의 기능입니다.메모리 관리 유닛. 여기서 문제는 소프트웨어가 잘못된 메모리 주소에 액세스했다는 것입니다. 즉, 버그입니다.

물론, 버그는 소프트웨어 버그가 아닐 수도 있지만, 예약하지 않은 손상된 RAM으로 인해 발생한다는 사실은 아무도 알 수 없습니다. 어젯밤의 메모리 테스트가 오늘도 여전히 유효하다는 보장은 없습니다. 특히 여러 물리적 주소 범위에 문제가 있는 경우에는 더욱 그렇습니다. 솔직히 말해서, 당신이 하고 있는 일은 매우 위험합니다. 당신은 당신의 메모리가 무작위로 데이터를 손상시킬 수 있다는 것을 알고 있으며, 문제가 되는 모든 메모리를 이상적으로 잡아서 그 사용을 방지하고 싶습니다. 컴퓨터를 사용하여 수행하는 경우문제, 난 그렇게 하지 않을 거예요. 메모리를 교체할 예정이라고 했으니 RAM 모듈 전체를 삭제하세요.지금, 가능하면 다시 작업을 시작하거나 RAM을 빨리 교체하세요.

관련 정보