[SW_Jungle] Memory Management - Background

Jin Lee·2021년 12월 31일
0

PintOS

목록 보기
5/16
post-thumbnail

Memory 를 이해하기 위한 background

block : 보조기억장치와 주기억 장치 사이의 데이터 전송 단위, 1 ~ 4 KB
word : 주기억 장치와 레지스터 사이의 데이터 전송 단위, 16 ~ 64 bit

address binding : 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업
binding 시점에 따른 구분 : compile time binding, load time binding, run time binding

Source code가 memory에 올라가기 가지의 과정


comfile(compiler 가 하는 일) : object module을 생성한다
linking(linker 가 하는 일) : object module과 other object module을 더해서 실행가능한 파일인 load module을 만드는 과정
loading(loader 가 하는 일) : load module을 memory에 올려주는 과정

Address Binding

  • compile time binding : 프로세스가 적재될 위치를 컴파일러가 알 수 있는 경우, 프로그램 전체가 메모리에 올라가야 함
  • load time binding : 메모리 적재 위치를 컴파일 시점에서 모르면 대체 가능한 상대주소를 생성, 적재 시점(load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정, 프로그램 전체가 메모리에 올라가야 함
  • run-time binding : address binding을 수행시간까지 연기(프로세스가 수행 도중 다른 메모리 위치로 이동 할 수 있음), HW의 도움이 필요하며(MMMU : memory mangement unit) 대부분의 OS가 사용

Dynamic Loading

  • 모든 루틴을 교체 가능한 형태로 디스크에 저장
  • 실제 호출 전까지는 루틴을 적재하지 않음
    • 메인 프로그램만 메모리에 적재하여 수행
    • 루틴의 호출 시점에 address bidning 수행
  • 메모리 공간의 효율적 사용

Swapping

  • 프로세서 할당이 끝나고 수행 완료 된 프로세스는 swqp-device로 보내고(swap-out) 새롭게 시작하는 프로세스는 메모리에 적재(swap-in)

ref)
1. https://www.youtube.com/watch?v=es3WGii_7mc&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=24

profile
깃허브 : https://github.com/jinlee9270

0개의 댓글