OS 운영체제가 프로세스 메모리 주소를 바인딩 하는 시점
저번에 OS 메모리 계층 구조를 적으면서 바인딩하는 시점과 연결하여 적으려고 했지만 글이 너무 길어지는 것 같아
짧게 끊어 썻던점 양해 부탁드립니다 OS의 메모리 계층 구조와 메모리 읽는 단위를 알아야 이해할 수 있으니 밑에 글을
잘 모르신다면 한번 읽어주시기를 부탁드려요
https://rlagmlqja11.tistory.com/entry/OS가-관리하는-메모리-계층-구조와-OS-가-읽는-단위
메모리에 프로세스가 등록되면서 언제 주소가 바인딩되는지 궁금하시지 않았나요? 만약 C 언어로 int a; 를 선언했다고 생각해보면 메모리에 int 형 4 byte 만큼 메모리 자리를 차지할 것입니다
그리고 4byte 의 메모리의 물리적 주소와 int 형의 변수 a 값과 맵핑이 되어야 하는데요 근대이게 컴파일되면서 exe 파일로
될떄 바인딩이 되는 것인지 아니면 언제 바인딩 이 되는 것 인지 제가 밑에서 설명해드리겠습니다 ~!
프로세스가 메모리에 등록되면서 주소가 바인딩 ( 연결 ) 되는 시점
프로세스가 메모리에 등록되면서 주소가 바인딩 ( 연결되는 시점 ) 은 총 3가지가 있습니다
1. 우리에 소스코드가 컴파일되면서 Object module 이 되는 동안 메모리의 주소 가 바인딩되는 시점
( Complie time )
2. 실행파일 ( .exe) 갇히면서 실행파일 되면 실행할 때 메모리에 올라가서 주소가 등록되는 시점
( Load time )
3. 메모리에 올라가 실행할떄 주소가 바인딩되는 시점
( Run time )
총이렇게 3가지 방법론이 있는데요 무엇이라고 생각하시나요? 현재 운영체제에서는 Run Time 바인딩을
많이 사용하는데요 밑에 단점과 장점 그리고 왜 그런지 쉽게 설명해보겠습니다
1. Complie time Binding
컴파일 단계에서 메모리에 올리려면 컴파일러가 메모리를 완벽히 알고 있어야 합니다
단점은 프로그램 전체가 메모리에올라와야 하고 위치가 변하지 않는 단점이 있는데요 초창기 컴퓨터에서는
이렇게 많이 사용했다고 합니다
2. Load Time Binding
메모리 주소를 대체주소 즉 랜덤 값으로 하나를 잡아 로드를 시키는데요 만약 Load time 때 메모리 주소를
바인딩한다면 랜덤값으로 0번 주소에 저장했다고 생각해봅니다
근대 만약 0번 주소에 다른 프로세스가 있다면 적당한 위치를 잡아 옮기는데요 옮긴 위치가 만약 메모리 400번 주소를 했다고 하면 기존 메모리 위치에 400을 더하여 메모리 위치를 조정해줍니다
이것도 프로그램이 한 번에 다 올라가야 한다는 단점이 있고 랜덤 값을 다 올렸을 때 만약 메모리 파편화 즉 메모리의 적당한 위치가 없다면 랜덤으로 잡았던 메모리를 어떻게 처리해야할까요 이것도 문제가 있어 보입니다
3. Run Time binding
실행 시간에 메모리 주소를 바인딩시켜 주겠다는 것인데요 메모리에 올렸을 때 수행할 때까지
즉 Cpu에 올라오기 전까지 기다렸다가 메모리 주소를 바인딩해주겠다는 뜻인데요
즉 메모리에는 그냥 수행 시간까지 연기한후에 cpu에 등록되어 프로세스가 자원을 받고 작업을 받을 때 메모리 주소를 바인딩해주는 것입니다 현재 OS에서 사용을 많이 하는데요, 사실 이것을 알려면 OS 에 시분할 체계를 쫌 알아둬야 합니다 하지만 이렇게 하면프로세스가 CPU에 등록될 때마다 주소가 바뀌니까 물리적이 아니라 메모리 위치를 자유자재로 이동시킬 수있다는 장점이 있습니다
이렇게 3 가지 방법론들을 많이 봤는데요 현재 운영체제에서 Run time binding 방법을 많이 사용하고 있습니다
감사합니다