- 메모리 관리
- 메모리는 주소를 통해서 접근이 가능함
- 주소는 논리적 주소(logical address)와 물리적주소(physical address)가 있음
- 주소 바인딩: 논리적 주소를 실제 어느 물리적주소에 올릴지 정함
- Symbolic Addredd: 프로그래머 입장에서는 해당 데이터를 몇번지 주소에 올릴지 생각하지 않음, 그냥 변수에 담음, 변수가 심볼릭 어드레스
- CPU가 참조하는건 논리적 주소
실제 물리적 주소에 올리는 방법3가지(주소 바인딩):
1) Compile time binding
- 컴파일시에 물리적주소에 올라감, 논리적 주소와 물리적 주소 번지가 똑같음, 프로그램 시작중에 주소가 바뀌지 않음
2) Load time binding
- 논리적주소만 가지고 있다가 프로그램이 시작되면 그때 물리적 주소에 올라감, 프로그램 시작중에 주소가 바뀌진 않지만 논리적 주소와 물리적 주소의 번지수가 다를 수 있음
3) Execution time binding
- 프로그램이 실행되다가 중간에 바뀔수도 있음
- 프로그래머는 Symbolic address로 코드를 작성
- 컴파일시 프로그래머가 짠 코드의 변수가 논리적 주소로 바뀜(A->20, B->30)
- 컴파일타임 바인딩은 컴파일시 물리적주소에 올라가는데, 항상 이미 결정되어 있는 논리적 주소와 똑같은 주소에 올려야됨
- 논리적주소는 0번지부터 시작하기 때문에 실제 물리적주소도 그렇게 배정하면 비효율적임, 그래서 현대에는 별로 사용하지 않음
- 컴파일타임 바인딩은 한번 주소가 정해지고 주소를 바꿀경우 다시 컴파일을 해야하기 때문에 absolute code라고 불림
- load time binding은 프로그램 실행시 물리적 주소의 남는 공간을 찾아서 거기에 올림
- 재배치가 가능하여 relocatable code라고 불림
- run time binding은 똑같이 실행시에 올라가나, 실행 도중에 주소가 바뀔수도 있음, 현대에 가장 많이 사용
- 프로그램 실행 중에도 계속 주소가 바뀌기 때문에 CPU가 주소를 참조할때마다 바인딩을 점검
- MMU라는 하드웨어적 지원이 필요함
- 논리적주소 -> 물리적주소로 매핑시켜 주는 하드웨어 기기
- 물리적 주소는 실제로 14000에 위치해 있음
- CPU가 346이라는 논리 주소를 요청, 346을 14346으로 변환시켜줘야됨
- reloaction register는 14000만큼 더해주는, 논리주소를 물리주소로 변환시키는 역할을 담당
- limit register는 요청하는 주소가 프로그램 최대 크기를 넘는지 체크, 혹시 모를 악성 코드가 다른 불필요한 주소에 접근하는걸 방지하기 위함
- 우선 limit register가 요청한 주소가 프로그램 범위를 넘는지 체크
- 만약 넘으면 에러를 발생시킴
- 안넘으면 relocation register가 논리적 주소를 물리적 주소로 변환시켜줘서 실제 메모리에 접근할수 있도록 함
Dynamic Loading
- 프로세스가 시작하기 전 전체를 메모리에 미리 올리는 것이 아닌 불려질때마다 메모리에 load 시키는것
-42분
'[개발일지] > 필기' 카테고리의 다른 글
Deadlock (0) | 2021.09.03 |
---|---|
Process Synchronization 4 - monitor (0) | 2021.09.01 |
Process Synchronization 3 - classical problems (0) | 2021.08.29 |
Process Synchronization 2 - Semaphores (0) | 2021.08.26 |
Process Synchronization1 - lock and unlock (0) | 2021.08.22 |