정글 개발일지week09

2024. 5. 21. 14:45·SW 정글 일지
목차
  1. OS별 페이지 테이블 엔트리(PTE) 개수의 차이
  2. 데이터와 물리, 가상 주소
  3. KERN_BASE & USER_STACK의 용량 계산
  4. Swap File(Area)
  5. Page Table의 위치 
  6. Context switching을 하면서 vm은 어떻게 바뀌는지?
  7. Process 별로 pml4 table을 만드는데 base_pml4를 복사하는 과정이 포함된 이유

OS별 페이지 테이블 엔트리(PTE) 개수의 차이

  • Page Table의 크기 : page단위로 할당되고 pintos에서는 page의 크기를 4KB로 하고 있기 때문에 4KB(2¹²Byte)다.
  • Page Table Entry의 크기 : 포인터의 크기를 가지기 때문에 각 운영체제 별로 다르다.
    • 32bit OS에서의 포인터 크기 : 4byte(2²)
    • 64bit OS에서의 포인터 크기 : 8byte(2³)
  • PTE에 들어갈 수 있는 PTE의 개수는 N
    • Page Table의 크기를 Page Table Entry의 크기로 나눈 값
    • N = sizeof(PT)/sizeof(PTE)
    • 따라서 OS별로 PT에 들어가는 PTE의 개수는 다음과 같다.
      • 32bit는 2¹²/2² = 1024개
      • 64bit는 2¹²/2³ = 512개

데이터와 물리, 가상 주소

데이터는 물리 메모리에 존재하고 그곳을 가리키는 주소는 단 하나의 물리주소와 여러개의 가상주소들을 가질 수 있다.

KERN_BASE & USER_STACK의 용량 계산

  • 위 그림에서 확인 할 수 있듯이 가장 상위에 값이 1인 bit 다음에 만나게 되는 값이 1인 bit는 값이 무시할 수 있을 정도로 작다.
  • VM은 주소당 1byte의 cell로 구성되기 때문에, 특정 주소 아래에 위치한 영역의 크기는 주소*Byte다.
  • Pintos에서 VM의 va(유저영역)은 KERN_BASE 아래 영역이며 그 위의 영역은 kva(커널영역)이다. 유저 스택은 USER_STACK 아래 영역이다.(실제로는 점점 내려오다가 heap에서 멈추지만 일단 USER_STACK아래로 가정하자 )
    • kva - 커널영역의 크기 : 256TB - 512GB
    • va - 유저영역의 크기 : 512GB
    • 유저스택의 크기 : 1GB

Swap File(Area)

  • vm를 위한 공간은 disk에 있고, disk는 data를 file의 형태로 저장하기 때문에 Swap "File" 이라고 한며 Swap Area라고도 한다.
  • 페이징 기법은 프로그램을 페이지 크기로 자른다. 그리고 당장 필요한 최소한의 페이지들만 Frame으로 올리고, 나머지 페이지들은 Swap File에 저장한다.

Page Table의 위치 

  • 메모리 사용을 효율적으로 하기 위해 paging기법을 만들었다. 그런데 paging기법에서 사용하는 page table은 각 프로세스 별로 페이지 테이블이 필요하며, 또한 그 크기는
    • (해당 프로세스를 사용하는 page 개수) * ( 포인터 크기 + valid와 같은 추가 데이터 공간 )이다.
  • 근데 이걸 disk에 넣을거면 애초에 그냥 disk를 읽으면 되는거고, cpu에는 공간 크기상 불가능하다. 즉, 메모리에 넣어야 한다.
  • 그래서 shared page, multi level page table등을 사용한다.

Context switching을 하면서 vm은 어떻게 바뀌는지?

  • pml4가 thread 마다 다른 값을 가지고 있는데, context switching 할때마다 pml4_activate()함수를 사용해서 각 process의 pml4를 활성화 시킨다. 그래서 같은 va를 넣어도 다른 pa를 받을 수 있다. 즉, vm을 갈아끼울 수 있다는 것이다.

Process 별로 pml4 table을 만드는데 base_pml4를 복사하는 과정이 포함된 이유

  • 모든 process들은 kernel관련 코드와 데이터들은 돌일한 것을 공유한다. 그런데 kernel 관련 table을 따로 만들기에는 메모리가 아깝다. 그래서 커널 연관된 pte를 index 1에 저장한 table인 base_pml4를 복사해, 커널 괄련 table을 따로 만들지 말고 pml4 table 하나만 사용하도록 했다.
  • 이렇게 해서 process 당 pml4 table은 하나만 만들면 된다.

'SW 정글 일지' 카테고리의 다른 글

정글 개발일지 week10 핀토스의 마무리  (0) 2024.05.28
정글 개발일지 week08  (0) 2024.05.14
정글 개발일지 week07  (0) 2024.05.02
정글 개발일지 week02  (0) 2024.03.31
정글 에세이 : 과거와 앞으로의 정글  (1) 2024.03.16
  1. OS별 페이지 테이블 엔트리(PTE) 개수의 차이
  2. 데이터와 물리, 가상 주소
  3. KERN_BASE & USER_STACK의 용량 계산
  4. Swap File(Area)
  5. Page Table의 위치 
  6. Context switching을 하면서 vm은 어떻게 바뀌는지?
  7. Process 별로 pml4 table을 만드는데 base_pml4를 복사하는 과정이 포함된 이유
'SW 정글 일지' 카테고리의 다른 글
  • 정글 개발일지 week10 핀토스의 마무리
  • 정글 개발일지 week08
  • 정글 개발일지 week07
  • 정글 개발일지 week02
forrest13
forrest13
forrest13
forrest
forrest13
전체
오늘
어제
  • 분류 전체보기 (49)
    • CS (25)
    • 에러 (3)
    • 백준 (10)
    • 알고리즘 (1)
    • Java (1)
    • Flutter (1)
    • SW 정글 일지 (6)
    • 독서 후기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.3
forrest13
정글 개발일지week09
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.