freeing unused kernel memory..
여러 플렛폼에서 저 위의 값이 각각 다르게 나오는걸 발견했습니다.
제가 사용해본 IBM440GX는 220k, mips는 48k이더군요.
물론, 두 칩의 클럭과 메모리가 다르지만, mips의 경우에는 다른 메모리 상황(256, 128, 64)에서도 역시 48K가 나오더군요.
저 다른 수치가 정확히 어떤것에 대한 지표인지 잘 모르겠습니다.
제가 알기로 커널의 메모리 사용은 일정부분을 가지고 있고, 만약 모자르면 조금씩 늘려서 사용하는것으로 알고 있는데요. 그렇다면 저 unused kernel memory만큼 사용할 수 있다는 것인가요?
- mips core, 128M
Memory: 125396k/129020k available (1409k kernel code, 3624k reserved, 75k data, 48k init, 0k highmem)
...
Freeing unused kernel memory: 48k freed
- mips core, 64M
Memory: 60820k/63484k available (1411k kernel code, 2664k reserved, 75k data, 48k init, 0k highmem)
...
Freeing unused kernel memory: 48k freed
- IBM core, 256M
Memory: 256988k available (1220k kernel code, 372k data, 220k init, 0k highmem)
...
Freeing unused kernel memory: 220k init
부팅시 init 영역의 메모리 삭제..
부팅 시에 출력되는 메시지 같군요..
커널이 부팅될 때만 사용하는 함수/변수들이 있습니다.
이러한 함수/변수는 __init 또는 __initdata 라는 매크로를 사용하여 선언하며
링크 과정에서 특정 영역으로 (.init.text 혹은 .init.data) 링크됩니다.
이 영역의 코드/데이터는 부팅 이후 커널이 동작하는 동안에는 필요치 않기 때문에
커널의 부팅이 끝날 무렵에 init 쓰레드가 실행되는 과정에서
free_initmem() 함수를 통해 해제됩니다.
시스템의 메모리 크기가 달라져도
부팅 과정에서 사용되는 메모리의 양은 동일할 것이므로
해제되는 메모리의 크기는 같게 됩니다.
pasttime님이 잘 설명하셨는데, 커널을 초기화할 때만 필요한 코드와
pasttime님이 잘 설명하셨는데, 커널을 초기화할 때만 필요한 코드와 데이터는 별도의 section에 들어 있어서 커널은 초기화를 마치고 그 메모리를 해제하는데, 아키텍쳐에 따라서 초기화 코드의 양이 틀리기 때문에 아키텍쳐에 따라서 해제되는 메모리의 양이 틀린 것입니다.
Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.
댓글 달기