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의 크기를 나타냄
- 페이지의 비트 수 만큼 페이지의 개수 나타냄!