• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    해결됨

TLB에 대한 추가 질문이 있습니다.

21.04.16 20:10 작성 조회수 181

0

직전 질문에서 2번 질문에 대해 약간 모호하게 질문드린 것 같습니다. 괜찮으시다면 조금 더 구체적으로 질문드려보겠습니다. ㅠㅠ

제가 강의를 듣고 이해한 바로는 다음과 같습니다. 

1. 프로세스는 각자 별도의 page table을 메모리에 가집니다.

2. 메모리에 존재하는 page table에 접근해 mapping정보를 찾아 frame에 접근하는 방법은 RAM에 2회 접근하므로 느립니다.

3. 2의 방법을 개선하기 위해 page table을 TLB 캐시 메모리에 저장해 page-frame  mapping 정보를 빠르게 얻어냅니다.

제가 궁금하다고 생각하는 부분은 다음과 같습니다.
(과정을 잘못이해한 것일 수 있습니다.)

1. 어떤 프로세스 A가 수행되면, A의 page table을 TLB에 올립니다.

2. 프로세스 A가 수행되다 인터럽트가 발생해 프로세스 B가 CPU를 할당받습니다.

이 때 2의 과정에서 CPU는 프로세스 B를 수행하므로 CPU에서 발생하는 주소는 B의 logical address입니다.

즉, (제가 생각하기로는) B의 logical address로 A의 page table로 초기화되어있는 TLB에 접근하는 것은 올바르지 않다는 생각입니다.

따라서 어떤 방법으로 TLB를 B의 page table로 초기화하는지에 대해 궁금증이 생겨 드린 질문이었습니다. 

이렇게 작성하고 나니 꽤 깊은 질문을 굉장히 함축해서 드린 질문이었군요.. ㅎㅎ 죄송합니다.

ps. 만약 너무 깊은 내용이거나 추후 강의를 들어가며 이해할 수 있는 내용이라면 답변해주지 않으셔도 괜찮습니다. 언제나 좋은 강의 감사드립니다. 

답변 1

답변을 작성해보세요.

5

이제 질문을 이해했습니다.

Context Switch가 일어났을 때, TLB를 어떻게 처리할 것이냐가 질문의 핵심이군요.

질문하신 대로, A 프로세스가 B 프로세스로 context switch가 되면, TLB 정보는 더이상 유효하지 않습니다. 이것을 save한 후에 restore하는 방법도 있겠지만, 어차피 cache 메모리인데 굳이 그렇게까지 할 필요가 없지 않을까요? 즉, context out이 되면 TLB 정보를 invalidate 시켜 버리고, 새로 시작해도 크게 문제가 될 것이 없습니다.

다시 말해 A 프로세스가 쓰던 TLB 정보를 B 프로세스가 CPU를 획득하면 전부 flush 시켜 버리고, 그 때부터 페이지 액세스할 때 다시 TLB를 쓰면 됩니다.

이 또한 O/S 구현에 dependent한 문제라서, 딱 이렇게 해야 한다, 라는 법칙은 아니고, 일반적으로 그렇게 할 수 있다는 원론적인 답변이라고 생각하시면 좋겠습니다.