CPU 스케줄링의 결과로 CPU 이용률과 사용자에 제공하는 컴퓨터 응답속도를 모두 향상할 수 있다.
그러나 이러한 성능 향상을 실현하려면 많은 프로세스를 메모리에 유지해야 한다.
1. CPU와 Main Memory
(1) CPU의 Main Memory 접근
- 메인 메모리와 각 처리 코어에 내장된 레지스터들은 CPU가 직접 접근할 수 있는 유일한 범용 저장장치이다.
- 모든 실행되는 명령어와 데이터들은 CPU가 직접적으로 접근할 수 있는 메인 메모리와 레지스터에 있어야 한다.
- 각 CPU 코어에 내장된 레지스터들은 일반적으로 CPU 클록(clock)의 1사이클 내에 접근이 가능
- 메인 메모리의 접근을 완료하기 위해서는 많은 CPU 클록 틱 사이클이 소요
- 이 경우 CPU가 필요한 데이터가 없어서 명령어를 수행하지 못하고 지연되는(stall) 현상이 발생
- 해결방안으로 메모리의 접근을 줄이기 위해 빠른 속도의 메모리인 캐시를 추가한다.
(2) 메모리 공간의 보호
시스템이 올바르게 동작하기 위해서는 사용자 프로그램으로부터 운영체제 영역을 보호해야 할 뿐만 아니라 사용자 프로그램 사이도 보호해야 한다.
(i) 독립된 메모리 공간 보장
- 프로그램은 실행을 위해 메모리로 옮겨져서 독립된 공간에 위치함
- 각 프로세스는 분리된 메모리 공간을 확보한다.
- 기준(base register)과 상한(limit register)는 물리 메모리 내의 프로세스 주소 공간을 결정하는 데 사용된다.
- 기준 레지스터(Base Register)
- 가장 작은 물리 메모리 주소를 가진다.
- 상한 레지스터(Limit Register)
- 프로세스 주소 공간의 크기를 가진다.
(ii) 주소와 레지스터 비교
- CPU 하드웨어가 사용자 모드에서 만들어진 모든 주소와 레지스터를 비교한다.
- 사용자 모드에서 만들어진 모든 주소는 레지스터 범위 안에 있어야 한다.
- 사용자 모드에서 수행되는 프로그램이 운영체제의 메모리 공간이나 다른 사용자 프로그램의 메모리 공간에 접근하면 트랩(trap)을 발생
- 기준과 상한 레지스터는 special priviledged instruction(특권 명령)을 사용하는 운영체제에 의해서만 적재된다.
- 특권 명령은 커널 모드에서만 수행되고, 운영체제만 커널 모드에서 수행된다.
2. 주소의 할당 (Address Binding)
(1) 주소의 할당
- 운영체제가 프로세스를 물리 메모리에 적재한다.
- 주소들은 여러 가지 다른 표현 방식을 거친다.
- 원시 프로그램에서 주소는 숫자가 아닌 심볼 형태로 표현
- 컴파일러는 이 심볼 주소를 재배치 가능 주소로 바인딩
- 링커나 로더가 재배치 가능 주소를 절대 주소로 바인딩시킨다.
(2) 바인딩이 이루어지는 시점 종류
- 컴파일 시간(compile time) 바인딩
- 프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 컴파일러는 절대 코드를 생성
- 적재 시간(Load time) 바인딩
- 컴파일 시간에 바인딩이 안 되는 경우 컴파일러는 이진 코드를 재배치 가능 코드로 만든다.
- 재배칭 가능 코드는 시작 주소가 변경되면 아무 때나 사용자 코드를 다시 적재하기만 하면 된다.
- 이후 진짜 번지수와의 바인딩은 프로그램이 메인 메모리로 실제로 적재되는 시간에 이루어진다.
- 실행 시간(execution time) 바인딩
- 프로세스가 실행하는 중간에 메모리 내의 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다.
- 바인딩이 실행 시간까지 허용되는 경우에만 가능하다.
- 프로세스가 실행하는 중간에 메모리 내의 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다.
3. 논리 대 물리 주소 공간 (Logical VS Physical Address Space)
(1) 논리 주소(Logical Address)와 물리 주소(Physical Address)
- Logical Address
- CPU가 생성하는 주소
- 모든 논리 주소 집합 : 논리 주소 공간 (logical address space)
- Physical Address
- 메모리가 취급하는 주소 (메모리 주소 레지스터(MAR)에 주어지는 주소)
- 모든 물리 주소 집합 : 물리 주소 공간 (physical address space)
- 특징
- 컴파일 또는 적재 시에 주소를 바인딩하면 논리 주소와 물리 주소가 같다.
- 실행 시간 바인딩 기번에서는 논리, 물리 주소가 다르다. (논리 주소 = 가상 주소, virtual address)
(2) 메모리 관리 장치 (memory management unit, MMU)
가상 주소를 물리 주소로 바꾸어주는 변환(mapping) 작업을 해주는 하드웨어 장치
- 기준 레지스터(base register) 기법을 일반화시킨 아주 단순한 MMU 기법의 예시
- 기준 레지스터(base register) = 재배치 레지스터(relocation register)
- 논리 주소 : 346, 재배치 레지스터 : 14000 => 물리 주소 : 14346
- 사용자 프로그램은 실제적인 물리 주소에 접근하지 않는다.
- 사용자 프로그램은 346에 대한 포인터를 생성하여 저장, 연산 등의 일을 한다.
- 이후 참조된 논리 주소들은 실행 시간에 실제 메모리에 바인딩된다.
4. 동적 적재 (Dynamic Loading)
루틴(Routine)은 실제 호출되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에서 대기하고 있다.
호출되면 메모리에 적재된다.
- 메모리 공간의 더 효율적 이용을 위해서 동적 적재를 한다.
- 필요한 경우에만 적재된다.
- 실행할 코드가 많은 경우에 특히 유용하다.
5. 동적 연결 및 공유 라이브러리 (Dynamic Linking & Shared Libraries)
동적 연결 라이브러리(DLL)
사용자 프로그램이 실행될 때, 사용자 프로그램에 연결되는 시스템 라이브러리
- 라이브러리 연결을 실행 시기까지 미룬다.
- 이 기능이 없다면 시스템의 각 프로그램은 실행 가능 이미지에 해당 언어 라이브러리의 사본을 포함해야 한다.
- 메인 메모리를 낭비할 수도 있다.
- 라이브러리를 여러 프로세스 간에 공유할 수 있다.
- 메인 메모리에 DDL 인스턴스가 하나만 있을 수 있다.
- 공유 라이브러리라고도 한다.
- 운영체제의 도움이 필요하다.
- 운영체제가 메모리 주소 공간에 routine이 있는지 확인해준다.
- 여러 프로세스가 같은 메모리 주소를 공용할 수 있도록 해줄 수 있다.
반응형
'OS(운영체제)' 카테고리의 다른 글
페이징 (Paging) - (1) (0) | 2021.12.09 |
---|---|
연속 메모리 할당 (Contiguous Memory Allocation) (0) | 2021.12.09 |
실시간 CPU 스케줄링 (Real-Time CPU Scheduling) (0) | 2021.12.09 |
Multiple-Processor Scheduling (다중 처리기 스케줄링) (0) | 2021.12.09 |
CPU 스케줄링 알고리즘 (CPU Scheduling Algorithms) (1) | 2021.12.09 |
댓글