내용 출처
KOCW 반효경 교수님 <운영체제> 강의
책 <운영체제와 정보기술의 원리>
반효경 교수님의 <운영체제> 강의 내용을 기반으로 정리했으며,
교수님의 저서 <운영체제와 정보기술의 원리>에서 추가할 만한 내용을 이와 같은 인용문 형식으로 추가함.
주소 바인딩 : 주소를 결정하는 것
Symbolic Address -> Logical Address -> Physical Address
프로그래머는 숫자가 아닌 symbol로 된 주소인 symbolic address를 사용한다. 이것이 컴파일 되면 숫자로 된 주소인 logical address가 된다. 그런데 프로세스가 실행되려면 해당 프로그램이 physical address에 올라가야 한다. 그래서 논리적 주소를 물리적 메모리 주소로 연결시켜주어야 하는데, 이러한 작업을 주소 바인딩이라고 한다.
그렇다면 논리적 주소는 언제 물리적 주소로 결정되는가?
Compile time binding
Load time binding
Execution time binding = Run time binding
앞서 이야기한 것처럼 CPU가 보는 주소는 logical address다. 실행파일이 메모리에 올라갈 때 시작 주소는 바뀌지만, 그 안의 코드 상의 주소는 logical address로 남아있게 된다. (위 그림에서도 load time binding을 하면 500번지부터 시작하지만, 그 안의 Add 20, 30와 같은 코드 내의 주소는 바뀌지 않는다.) 그래서 CPU가 메모리 주소를 요청하면, 주소 변환을 해서 물리적 메모리 위치를 찾은 뒤 그 내용을 읽어서 CPU에 전달한다.
logical address를 physical address로 매핑해주는 하드웨어 장치
MMU scheme
user program
논리적 주소 : 0 ~ 3000번지
물리적 주소 : 14000 ~ 17000번지
주소 변환 방법 : 물리적 주소의 시작 위치에 요청한 논리적 주소를 더해준다.
(14000 + 346 = 14346)
[운영체제 및 사용자 프로세스 간의 메모리 보호를 위해 사용하는 레지스터]
base register = relocation register
프로그램의 시작 위치, 즉 접근할 수 있는 물리적 메모리 주소의 최소값을 지정한다.
limit register
프로그램의 크기, 즉 현재 CPU에서 수행 중인 프로세스의 논리적 주소의 최대값을 저장하고 있다. CPU가 요청한 프로세스의 논리적 주소값이 이 값보다 크다면, 트랩을 발생시켜 해당 프로세스를 강제종료시킨다.
동적로딩은 메모리에 더 많은 프로세스를 동시에 올려놓고 실행하기 위한 용도인 반면, 중첩은 단일 프로세스만을 메모리에 올려놓는 환경에서 메모리 용량보다 큰 프로세스를 실행하기 위한 어쩔 수 없는 선택이었다.
프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것
Backing store = swap area
많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간
Swap In / Swap Out
Linking을 실행 시간까지 미루는 기법
연결(linking)이란 프로그래머가 작성한 소스 코드를 컴파일하여 생성된 목적 파일(object file)과, 이미 컴파일된 라이브러리 파일(library file)들을 묶어 하나의 실행파일을 생성하는 과정을 말한다.
동적연결(dynamic linking)은 컴파일을 통해 생성된 목적 파일과 라이브러리 파일 사이의 연결을 프로그램의 실행 시점까지 지연시키는 기법이다.
Static Linking
Dynamic Linking
cf) shared library : dynamic linking을 해주는 라이브러리
(ex. 리눅스의 shared object, 윈도우의 DLL 파일)
메모리는 일반적으로 두 영역으로 나뉘어 사용한다.
[사용자 프로세스 영역의 할당 방법]
Contiguous allocation (연속 할당)
Noncontiguous allocation (불연속 할당)
내부 조각(internal fragmentation)
분할의 크기보다 작은 프로그램이 적재되는 경우 남는 공간
외부 조각(external fragmentation)
프로그램에 할당되지는 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역
동적 메모리 할당 문제 (Dynamic Storage-Allocation Problem)
가변 분할 방식에서 size n인 프로세스를 할당할 가장 적절한 hole을 찾는 문제
First-fit (최초적합)
Best-fit (최적적합)
Worst-fit (최악적합)
Compaction = 한 곳으로 몰기