반응형


본 챕터 목표
: 다음 단골 CS 지식 문항에 대해 구체적으로 이해하고, 답변 준비하기

  1. 가상 메모리와 페이징 시스템에 대해 구체적으로 설명해주세요.
  2. 요구 페이징과 페이지 폴트에 대해 구체적으로 설명해주세요.
  3. MMU와 TLB에 대해 구체적으로 설명해주세요.



가상 메모리 (Virtual Memory System)
- 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기에 한계가 있음
- 메모리를 늘리면 성능이 좋아진다?

  • 예: 리눅스는 하나의 프로세스가 4GB임
  • 통상 메모리는 8GB? 16GB?

- 폰노이만 구조 기반이므로, 코드는 메모리는 반드시 있어야 함


폰노이만 구조 (컴퓨터 구조)

  • 폰 노이만이 제안한 구조
  • Memory에 프로그램과 데이터가 저장
  • 하나씩 꺼내어 CPU: Arithmetic Logic Unit로 연산



가상 메모리가 필요한 이유
· 하나의 프로세스만 실행 가능한 시스템 (배치 처리 시스템 등)

  • 프로그램을 메모리로 로드 (load)
  • 프로세스 실행
  • 프로세스 종료 (메모리 해제)

· 여러 프로세스 동시 실행 시스템

  • 메모리 용량 부족 이슈
  • 프로세스 메로리 영역간에 침범 이슈



현업, IT 기술과 컴퓨터공학의 이해
· 예1. 프로세스 하나는 4GB를 할당하지만 개인 PC 메모리는 보통 16GB

  • 프로그램을 두 세개만 실행하는 경우는 없음
  • 운영체제와 관련된 프로그램들만 해도 10여개가 넘음

· 예2. 스마트폰에 딱 하나 앱을 실행하는 경우도 많지 않음
즉, 가상 메모리 구조는 필수임


가상 메모리
· 메모리가 실제 메모리보다 많아 보이게 하는 기술

  • 실제 사용하는 메모리는 작다는 점에 착안해서 고안된 기술
  • 프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있음



가상 메모리 기본 아이디어

  • 프로세스는 가상 주소를 사용하고, 셀제 해당 주소에서 데이터를 읽고/쓸 때만 물리 주소로 변경해주면 된다.
  • virtual address (가상 주소): 프로세스가 참조하는 주소
  • physical address (물리 주소): 실제 메모리 주소


MMU(Memory Management Unit)

  • CPU에 코드 실행 시, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치



가상 메모리와 MMU
· CPU는 가상 메모리를 다루고, 실제 해당 주소 접근 시 MMU 하드웨어 장치를 통해 물리 메모리 접근

  • 하드웨어 장치를 이용해야 주소 변환이 빠르기 때문에 별도 장치를 둠




페이징 시스템 (paging system)
· 페이징(paging) 개념

  • 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리
  • 하드웨어 지원이 필요
  • Intel x86 시스템(32bit)에서는 4KB, 2MB, 1GB 지원
  • 리눅스에서는 4KB로 paging
  • 페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록/사용



페이징 시스템 (paging system)

  • 프로세스(4GB)의 PCB에 Page Table 구조체를 가리키는 주소가 들어 있음
  • Page Table에는 가상 주소와 물리 주소간 매핑 정보가 있음



페이징 시스템 구조
· page 또는 page frame: 고정된 크기의 block (4KB)
· paging system

  • 가상 주소 v = (p, d)
  • p: 가상 메모리 페이지 번호
  • d: p안에서 참조하는 위치

· 페이지 크기가 4KB 예

  • 가상 주소의 0비트에서 11비트가 변위 (d)를 나타내고,
  • 12비트 이상이 페이지 번호가 될 수 있음



참고: 모든 것은 결국 bit와 연결

  • 본래 프로세스가 4GB를 사용했던 이유 - 32 bit 시스템에서의 2의 32승이 4GB



현업, IT 기술과 컴퓨터공학의 이해

  • 윈도우즈 64bit/32bit 시스템



페이지 테이블 (page table)
· page table

  • 물리 주소에 있는 페이지 번호와 해당 페이지 첫 물리 주소 정보를 매칭한 표
  • 가상 주소 v = (p, d) 라면
  • p: 페이지 번호
  • d: 페이지 처음부터 변위 d만큼 움직인 위치


· paging system 동작

  • 해당 프로세스에서 특정 가상 주소를 엑세스하려면
  • 해당 프로세스의 page table에 해당 가상 주소가 포함된 page 번호가 있는지 확인
  • page 번호가 있으면 이 page가 매핑된 첫 물리 주소를 알아내고(p')
  • p' + d가 실제 물리 주소가 됨



페이징 시스템과 MMU(컴퓨터 구조)
· CPU는 가상 주소 접근 시

  • MMU 하드웨어 장치를 통해 물리 메모리 접근


· 프로세스 생성 시, 페이지 테이블 정보 생성

  • PCB 드에서 해당 페이지 테이블 접근 가능하고, 관련 정보는 물리 메모리에 적재
  • 프로세스 구동 시, 해당 페이지 테이블 base 주소가 별도 레지스터에 저장 (CR3)
  • CPU가 가상 주소 접근 시, MMU가 페이지 테이블 base 주소를 접근해서, 물리 주소를 가져옴



참고: 다중 단계 페이징 시스템
미리 페이징 정보를 만들어놓지 않고, 특정 페이징 주소 영역(디렉토리)에 대해서만 만들어 놓는다.
· 32bit 시스템에서 4KB 페이지를 위한 페이징 시스템은

  • 하위 12bit는 오프셋
  • 상위 20bit가 페이징 번호이므로, 2의 20승 (1048576)개의 페이지 정보가 필요함

· 페이징 정보를 단계별로 나누어서 생성

  • 필요없는 페이지는 생성하지 않으면, 공간 절약 가능



참고: 다중 단계 페이징 시스템

  • 페이지 번호를 나타내는 bit를 구분해서, 단계를 나눔 (리눅스는 3단계, 최근 4단계)




MMU와 TLB(컴퓨터 구조)

  • MMU가 물리 주소를 확인하기 위해 메모리를 갔다와야 함

현업, IT 기술과 컴퓨터공학의 이해
메모리 계층 구조상, 메모리 접근이 CPU 측면에서는 상당한 시간이 걸림 (예: 200 cycle)

  • TLB(Translation Lookaside Buffer): 페이징 정보 캐쉬



페이징 시스템과 공유 메모리 (IPC)

  • 프로세스간 동일한 물리 주소를 가리킬 수 있음 (공간 절약, 메로리 할당 시간 절약)



요구 페이징 (Demand paging 또는 Demanded paging)
· 프로세스에 모든 데이터를 메모리에 적재하지 않고, 실행 중 필요한 시점에서만 메모리를 적재함

  • 선행 페이징(anticipatory paging 또는 prepaging)의 반대 개념: 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행하는 개념
  • 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장 (페이지 교체 알고리즘 필요)



페이지 폴트 (page fault)

  • 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
  • 운영체제가 page fault가 일어나면, 해당 페이지를 물리 메모리에 올림



페이지 폴트와 인터럽트



사용자/커널 모드와 프로세스, 인터럽트



인터럽트와 IDT
· 인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있음

  • 어디에? IDT(Interrupt Desciptor Table)에 기록
  • 언제? 컴퓨터 부팅 시 운영체제가 기록
  • 어떤 코드? 운영체제 내부 코드


· 다시 예를 보면,

  • 항상 인터럽트 발생 시, IDT를 확인
  • 시스템콜 인터럽트 명령은 0x80 번호가 미리 정의
  • 인터럽트 0x80에 해당하는 운영체제 코드는 system_call()이라는 함수
  • 즉, IDT에는 0x80 -> system_call() 과 같은 정보가 기록되어 있음



생각해보기
· 페이지 폴트가 자주 발생되면?

  • 실행되기 전에, 해당 페이지를 물리 메모리에 올려야 함

· 페이지 폴트가 발생되지 않게 하려면?

  • 향후 실행/참조될 코드/데이터를 미리 물리 메모리에 올리면 됨




페이지 교체 정책 (page replacement policy)
· 운영체제가 특정 페이지를 물리 메모리에 올려야 하는데, 물리 메모리가 가득 차있다면?

  • 기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고 (저장)
  • 새로운 페이지를 해당 물리 메모리 공간에 올린다.

어떤 페이지를 물리 메모리에서, 저장 매체로 내릴 것인가? -> Page Replacement(Swapping) Algorithm


페이지 교체 알고리즘 (FIFO)
· FIFO Page Replacement Algorithm

  • 가장 먼저 들어온 페이지를 내림



페이지 교체 알고리즘 (OPT)
· 최적 페이지 교체 알고리즘 (OPTimal Replacement Algorithm)

  • 앞으로 가장 오랫동안 사용되지 않을 페이지를 내리자
  • 일반 OS에서는 구현 불가



페이지 교체 알고리즘 (LRU)
· LRU(Least Recently Used) Page Replacement Algorithm

  • 가장 오래 전에 사용된 페이지를 교체
  • OPT 교체 알고리즘이 구현 불가하므로, 과거 기록을 기반으로 시도



현업, IT 기술과 컴퓨터 공학의 이해

  • 메모리 지역성



페이지 스왑 알고리즘 (LFU)
· LFU(Least Frequently Used) Page Replacement Algorithm

  • 가장 적은 횟수로 사용된 페이지를 교체



페이지 스왑 알고리즘 (NUR)
· NUR(Nou Used Recently) Page Replacement Algorithm

  • LRU와 마찬가지로 최근에 사용하지 않은 페이지부터 교체하는 기법
  • 각 페이지마다 참조 비트(R), 수정 비트(M)을 둠 (R, M)
  • (0, 0), (0, 1), (1, 0), (1, 1) 순으로 페이지 교체



현업, IT 기술과 컴퓨터 공학의 이해
· 스레싱(Thrashing)

  • 반복적으로 페이지 폴트가 발생해서, 과도하게 페이지 교체 작업이 일어나, 실제로 아무일도 하지 못하는 상황



기술면접 운영체제 단골 문제 정복

  1. 프로세스 구조에 대해 가능한 상세하게 설명해주세요.
  2. 컨텍스트 스위칭에 대해 가능한 상세하게 설명해주세요.
  3. 프로세스 간에는 어떤 기술을 사용해서 통신하는지, 왜 해당 기술을 사용해서 통신해야 하는지를 스레드와 비교애서 설명해주세요.
  4. 프로세스와 스레드의 차이점에 대해 설명해주세요.
  5. 언제 멀티 프로세스를 사용하고, 언제 멀티 스레드를 써야하는지 가능한 구체적으로 설명해주세요.
  6. 스레드 동기화란 무엇이며, 왜 사용해야하는지 예를 들어 설명해주세요.
  7. 뮤텍스와 세마포어의 차이점에 대해 간략히 설명해주세요.
  8. 가상 메모리 페이징 시스템에 대해 구체적으로 설명해주세요.
  9. 요구 페이징과 페이지 폴트에 대해 구체적으로 설명해주세요.
  10. MMU와 TLB에 대해 구체적으로 설명해주세요.



반응형

+ Recent posts