Paging

누디·2022년 10월 23일
0

OS

목록 보기
4/5

Paging

  • 프로그램, 메모리를 자르는 것
  • 어떻게?
    • 메모리 공간을 전부 n개의 공간으로 나눈다.
    • 그리고 하나하나를 page frame이라 부르고 0~n-1번 까지의 번호가 붙어있다.
    • 다음은 프로그램도 동일한 크기로 나눈다. = page
    • 페이지 크기랑 페이지 프레임 크기가 똑같으니까 프레임 하나에 페에지가 들어가게 되면 남는 게 없음
    • 근데 마지막 페이지는 좀 남을수도 → internal fragmentation
      • 근데 frame 크기 자체가 작기 때문에 이 fragmentation도 작게 됨
    • 또 다른 프로그램 B 실행하고 싶으면 얘도 잘라서 집어넣음
    • 그렇게 여러 프로그램 실행하다가 한 프로세스 메모리에서 빼면 하드디스크로 옮겨감
    • 또 다른 조각 빈 자리에 계속 넣으면 됨
  • page table
    • 각각의 프로세스마다 페이지가 여러개가 있으니까 각각의 page들이 어떤 page frame에 들어가있는지 frame 번호를 적어줌
      • 즉!! page frame은 메모리에, page는 프로그램 자른거
    • 배열이고, page 번호가 index로, 배열의 원소로 프레임 번호가
  • address
    • physical address - 실제 메모리 주소 ( 메모리 상 내 프로그램이 한줄 한줄 어디에 들어있는지)
    • relative address - 프로그램이 컴파일 하는 과정에서 실제 내프로그램이 메모리 어디에 들어가는지 알 수 없기 때문에 특정 번지를 기준으로 컴파일, 이 기준이 되는 주소
    • logical address - 실제 메모리 상의 데이터가 어디에 들어있다고 하는 주소구조와 다른 독립적인 구조
    • page 시스템은 logical address 사용
  • Logical address
    • 페이지 번호 + offset
    • 예를 들어 원하는 번지가 1502번지면 두번째 페이지 478번째 줄에 있다고 가정
    • 페이지 번호는 몇번째 페이지냐, offset은 이 페이지 안에서 몇번째 줄(byte)냐는 것
    • 위 쪽 6비트를 페이지 번호, 아래쪽 10비트를 offset
  • relocation
    • page table 이용
    • 먼저 page
      • 앞에 6비트 - 1
      • 페이지 테이블에서 1 찾으면 000110 = 6 페이지 프레임
    • 이제 중요한 건 페이지 테이블에서 6번째 페이지 프레임에 들어있다는 건 알겠는데
    • 그럼 physical address로 정확히 몇번지에 있느냐고 하는 것
      • 앞에 6비트 - 페이지 번호 - 페이지 테이블에서 찾아낸 프레임 번호 - 000110
      • 뒤에 10비트 - offset - 그대로 가져다 씀
  • 페이지의 크기
    • offset의 비트 수가 page의 크기를 나타냄
    • 페이지의 비트 수 만큼 페이지의 개수 나타냄!

0개의 댓글