주소 바인딩
주소 바인딩이란, Instruction이나 Data의 Physical Address를 결정하는 것을 말한다. 바인딩이 일어나는 시점에 따라 Compile Binding, Loading Binding, Execute Binding으로 분류할 수 있다.
Compile Binding
프로그램 작성 후 소스코드를 바이너리코드로 변환하는 시점에 바인딩하는 것을 말한다.
프로세스 시작 지점($BA, 상대주소)을 100으로 지정해주고 컴파일 스캔 과정에서 계산한 코드의 길이에 따라 다음 변수의 절대 주소를 지정해준다. (I -> $BA + 406) Code Relocation 시 충돌로 인하여 명령어들이 꼬이게 된다.
Load Time
실제로 메인 메모리에 데이터를 넣는 로딩 과정에서, 운영체제가 물리적 주소로 변환하여 바인딩하는 것을 말한다. 해당 방법론 또한 Compile Binding과 마찬가지로 Relocation 문제로 인해 변수 선언에서 충돌이 발생한다. 운영체제가 바라보는 Logical Address와 하드웨어가 바라보는 Physical Address가 일치하는 것이 특징이다.
Execution Time
Instruction을 실행할 때 논리적 주소에 해당하는 물리적 주소를 계산하여 바인딩하는 것을 말한다. 실행시간이 조금 늘어난다는 단점이 있지만, Relocation 시에도 프로그램이 이상없이 작동한다.
Relocation
시작 주소(논리적 주소, Logical address)를 바꾸는 행위를 말한다. 시간 지연을 최소화하기 위해 하드웨어로 처리하는데, 이 때 시작 주소를 저장하는 Base Register와 프로세스의 끝주소를 받아 주소값을 비교하는 (= 시작주소 + 상대주소) Bounds Register가 사용된다.
페이징
지난 시간 학습한 가변 동적 메모리 할당 과정에서 External Fragmentation이라고 하는 프로세스 외부의 잉여 메모리 조각들이 발생하는 문제가 존재하였는데, 이러한 잉여 메모리 조각을 할당하고 관리하는 방식을 페이징(Paging)이라고 한다.
페이지
페이지라고 하는 일정한 크기의 메모리 단위로 프로세스를 조각낸다. 프로세스 뿐 아니라 메인 메모리도 마찬가지로 페이지 프레임이라고 하는 일정 단위의 메모리 크기로 분할한다. 이 때 프레임 사이즈는 기존 메모리의 블록 단위 크기와 동일하다. (4KB) 따라서 잉여 공간이 발생해도 그 크기에 맞게 페이지를 집어넣고 관리할 수 있다. 물론 Compaction 방법을 사용해도 되지만, 처리 시간이 오래 걸려 잘 사용하지 않는다. 페이지 또한 크기가 일정하게 정해져 있기 때문에, Internal Fragment 문제가 발생한다. 그러나 감안하고 사용하는 편이다.
페이지 테이블
잉여 공간의 크기에 맞춰 프로세스를 페이지 단위로 집어넣었지만, 논리적으로는 떨어져 있는 프로세스들을 연결시켜 실행해주어야 한다. 이는 페이지 테이블***을 통해 관리한다. 페이지 테이블은 프로세스 당 하나씩 운영체제에 의해 생성된다. 따라서 페이지 테이블 또한 PCB의 일부 정보에 속한다.
프레임 테이블을 통해 물리적으로 떨어져 있는 프로세스들을 논리적으로 연결하여 처리할 수 있게 되었다. 우측에 빈 프레임인 Free frame list는 파일 시스템의 슈퍼 블록에 저장된다.
기존 논리 주소가 페이지의 번호와 페이지 내의 오프셋으로 별개의 인덱스 체계를 갖는다는 단점이 존재한다. 오프셋이라 함은 페이지 내 데이터의 위치 정보를 말하며, 논리적 주소에서 1024*N을 뺀 값이 오프셋이 된다. (ex. 1502번지 데이터를 찾고 싶고, 한 페이지 크기는 1024일 때 원하는 데이터의 오프셋 주소는 Page1, 478이 된다.)
오프셋 주소로 정해지는 논리적 주소에서, 물리적 주소로의 변환 과정인 Address translation이 행해진다. 페이지 테이블에 존재하는 해당 페이지 인덱스의 6비트 정보와, 오프셋 10비트 정보가 합해져 16비트 정보로 물리적 주소가 결정된다.
세그먼테이션
페이징과 유사한 조각 메모리 할당 방법이다. 단 일정한 크기의 페이징이 아닌 가변적인 크기의 Segment 단위로 프로세스가 조각난다. 또한 가변 동적 할당 방법에서의 Best-fit, First-fit 알고리즘이 적용된다.
세그먼테이션은 프로세스를 구성하는 어떤 논리적인 단위(Stack, Sqrt, Main program, Symbol table...)로 조각을 나누는데, 최대 크기 제한이 존재한다.
세그먼테이션 테이블에서 세그먼트의 길이와 시작 주소를 관리한다. 이 또한 PCB에 저장되어 관리된다.
페이징보다 비효율적이기 때문에, 잘 사용되지는 않는 방법론으로 알고만 있으면 될 듯 하다.