TIL_085 : Context Switching, 가상메모리

김펭귄·2025년 12월 19일

Today What I Learned (TIL)

목록 보기
85/142

1. Context Swithcing

  • CPU/코어에서 실행 중이던 프로세스/스레드를 다른 것으로 바꾸는 것

  • 멀티프로세싱을 가능하게 해줌

1.1. 발생 조건

  • 자신에게 주어진 timeslice를 다 사용하여 다른 프로세스/스레드에 넘길 때

  • I/O 작업을 기다려야해서 다른 프로세스/스레드에 넘길 때

  • interrupt가 발생하였을 때 등등

1.2. 동작

  • 먼저 user mode에서 kernel 모드로 변경

  • 레지스터 값들(PC, SP 등)을 PCB나 TCB에 저장

  • 스케쥴러에 의해 다음 작업을 선정하고, 해당 작업의 PCB/TCB에서 레지스터값을 복원

  • 다시 user mode로 바뀌며 작업 진행

1.3. 프로세스와 스레드에서의 context swithcing 차이

  • 스레드는 code, data, heap메모리를 공유하기에 따로 메모리 관련해서 바꿔줘야 하는 것은 없음

  • 프로세스는 각자 독립적인 메모리를 사용하고 있다 생각함. 그래서 가상메모리도 서로 따로 사용. 그래서 MMU가 현재 보고 있는 Paget Table도 스위칭하면서 해당 프로세스의 PT로 바꿔줘야함.

  • Page Table은 커널 메모리에 프로세스 개수만큼 존재. PCB에서 Page Table 찾아서 바꿈.

  • 그리고 MMU의 TLB도 수정해야하는데 전통방식은 아예 flush해서 싹 지움. 그래서 초반에 캐시 히트가 0%여서 성능 안 좋음. 요즘은 TLB에 주소랑 프로세스 ID를 같이 입력해서 태그가 있으니 어떤 프로세스의 PT 캐시인지를 알음. 그래서 flush비용이 안 듦

  • 대신에 태그넣으니까 안 그래도 부족한 TLB양이 더 부족해짐. 또 한 프로세스가 메모리 해제하면 코어별로 있는 MMU의 TLB에서 다 찾으면서 수정해줘야함. 동기화 문제도발생하는 단점이 있음.

  • 둘 다 그냥 캐시는 안 바꿔서 context swithcing 발생하면 cache pollution(대량의 캐시 미스)이 발생할 수 있음. 물론 프로세스 context swithcing이 훨씬 발생 가능성 높음

2. 가상메모리

  • 프로세스가 메모리를 혼자 사용하게 하는 것처럼 보여주는 기법

  • 한정된 자원인 RAM에 여러 프로세스가 동시에 load되어 사용할 수 있게 해줌

  • 프로세스 가상 메모리를 page 단위로 쪼개고, 이를 RAM의 frame에 load하여 사용 (external fragmentation 예방)

  • CPU가 가상주소를 읽으려 하면, MMU(Memory Management Unit)가 페이지 테이블을 통해 물리 주소로 매핑

  • 페이지 테이블 역시 메모리에 있으므로, 메모리에 2번 접근하게 됨. 따라서 MMU 부에 TLB 캐시를 사용하여 TLB에 없으면 페이지 테이블 가능 방식으로 오버헤드를 줄임

  • 필요한 페이지만 RAM(프레임)에 그때 그때 로딩하자라는 개념이 demand paging

  • 이 개념을 통해 읽으려고 하는 가상메모리가 RAM에 없을 시 디스크에서 다시 가져오는게 페이지 폴트

  • 스와핑으로 덜 사용된 페이지를 디스크로 내쫓아 공간을 확보

2.1. 페이지 폴트

  • 프로세스가 참조한 가상 메모리 페이지가 현재 물리 메모리(RAM)에 적재되어 있지 않을 때 발생 (TLB, Page Table로 확인)

  • OS가 인터럽트 발생하고 Storage에서 해당 페이지를 읽어 와 RAM에 올린 뒤, 다시 명령을 재실행

  • I/O 작업이므로 오버헤드가 발생

2.2. 스왑

  • 메모리가 꽉차서 더 이상 RAM에 페이지를 적재 불가능한 상황

  • RAM에 적재된 페이지 중에 하나 골라 Storage의 스왑 영역으로 이동(swap-out)

  • 그리고 Storage에서 페이지를 RAM에 로드(swap-in)

  • 성능 하락

2.3. Thrasing

  • RAM크기가 부족해 OS가 계속 디스크와 램사이에서 페이지를 나르기만(swap)하는 현상

  • 성능 하락

  • 메모리 크기를 늘리면 해결됨

2.4. 장단점

  • 멀티태스킹 지원, 메모리 보안, 부족한 RAM을 효율적으로 사용, 외부 단편화 방지, 개발 용이함

  • 내부 단편화 발생, 페이지 폴트로 인한 오버헤드

  • 페이지테이블에 보안 비트를 사용하여, 해당 코드 또는 데이터가 읽기전용 영역인지를 알 수 있어, 보안을 제공

profile
반갑습니다

0개의 댓글