안녕하세요, 오늘 가입하고 첫 질문을 하게 되었네요^^
제가 궁금한것은 zImage를 압축해제 할 때 CacheOn을 하고 start_kernel()을 호출하기 직전에 Cache_off를 하는 이유입니다
저의 얕은 지식으로는 zImage를 압축해제 할 떄 Cache를 사용하여 빠르게 압축해제하기 위해 Cahce를 On하는것이고,
Cache를 Off하는 이유는 Kernel로 진입하면 이전에 Cache에 남아있던 데이터들이 있으면 start_kernel이 시작되고 새로운 데이터를를
메모리로부터 Load해야 되는데, Cache에서만 계속 데이터를 Hit하게 되고, 잘못된 데이터만 반복해서 가져오게 되기 때문에
Cache를 Off하고 나중에 다시 On하려는 의도인것 같은데,
여기에 대해 정확하게 답변해주시면 정말 감사하겠습니다!^^
.
start_kernel 직전에는 캐쉬를 다시 켜게 되는데... 아마 _enter_kernel 부분 직전에 캐쉬를 끄는 부분을
말씀하시는 것 같네요.
제 생각엔 _enter_kernel 내부에서 주로 수행하는 일이 페이지 테이블을 만드는 일이기 때문인 것 같습니다.
페이지 테이블을 새로 갱신하면 그 부분의 데이터 캐쉬를 클린하여 메모리에 반영시켜주어야 하는데,
이 작업을 매번 하기 귀찮으니까 그냥 끈 상태에서 진행하는 것 같습니다.
_enter_kernel 에서 생성하는 페이지 테이블의 구조는 복잡한 연산 없이 간단히 만들어 지기 때문에 캐쉬를 꺼도
크게 상관 없는 것 같구요..
반면에, C로 된 커널 내부에 나오는 복잡한 페이지 테이블을 만드는 함수들에서는 캐쉬를 켠 상태에서 진행하지만,
테이블을 만들때마다 캐쉬 클린 작업을 일일히 수행해 주는 것을 볼 수 있습니다.