사용자 프로그램의 다단계 프로세스

주소 바인딩(Address binding)
주소 바인딩
- 프로그램 명령 및 데이터를 실제 메모리 주소에 연결하는 프로세스

주소 바인딩의 세 단계
- 컴파일 시간 바인딩(Compile time binding)
- 로드 시간 바인딩(Load time binding)
- 실행 시간 바인딩(Execution time binding)
컴파일 시간 바인딩(Compile time binding)
- 컴파일 시간에 메모리 위치를 알면 절대 주소의 절대 코드를 생성할 수 있다.

- 시작 위치가 변경되면 코드를 재컴파일해야 한다.
로드 시간 바인딩(Load time binding)
- 컴파일 시간에 메모리 위치를 알 수 없는 경우, 상대 주소로 재배치 가능한 코드를 생성할 수 있다.

- 시작 위치가 변경된 경우에만 리로드하면 된다.
실행 시간 바인딩(Execution time binding)
- 실행 시간(run time)까지 바인딩이 지연된다.
- CPU가 주소를 생성할 때마다 바인딩이 확인된다.

- 주소 매핑을 위한 MMU와 같은 하드웨어 지원이 필요하다.
- 대부분의 OS에서 사용
메모리 관리 장치
논리적 주소(Logical address)
- = 가상 주소(virtual address)
- CPU에 의해 생성
물리적 주소(Physical address)
- 메모리 장치에서 주소를 확인

MMU
- 논리적 주소를 물리적 주소에 매핑하는 하드웨어
단순 MMU 체계
- 재배치 레지스터의 값은 CPU에 의해 생성된 모든 주소에 추가된다.

프로그램 & CPU
- 논리적 주소를 다루지만 물리적 주소는 보지 못한다.
동적 로딩(Dynamic Loading)
호출될 때까지 루틴이 로드되지 않는다.
메모리 공간 활용도 향상
- 사용하지 않는 루틴은 로드되지 않는다.
대량의 오류 처리 코드가 필요할 때 유용
- 오류가 자주 발생하지 않는다.

Load할 때마다 매번 동일한 address가 비어 있을까? No.
- → 어디든지 load될 수 있기 때문에 dynamic linking이 필요
동적 링킹(Dynamic Linking)
동적 링킹
- 실행시간까지 연결이 지연
공유 라이브러리
- 라이브러리가 필요한 모든 프로세스의 경우 메모리에 복사본 하나만 있으면 충분하다.

스와핑(Swapping)
스와핑
- 프로세스를 메모리 부족 상태에서 백업 저장소로 일시적으로 스왑할 수 있다.
- 그리고 나중에 메모리에 되살아난다.
백업 저장소(Backing store)
- 모든 이미지를 수용할 수 있을 정도로 빠르고 크다.
- 예) 디스크
스와핑의 개략도

연속 할당(Contiguous Allocation)
주 메모리의 두 개의 파티션
- 운영 체제 용도
- 사용자 프로세스 용도
메모리 매핑 및 보호
- 재배치(Relocation) 레지스터 : 사용자 프로세스를 보호하는 데 사용
- 제한(Limit) 레지스터 : 다양한 논리 주소가 포함, 각 논리적 주소는 제한 레지스터보다 작아야 한다.
- MMU : 재배치 레지스터에 값을 추가하여 논리적 주소를 동적으로 매핑
연속 메모리 할당을 위한 하드웨어 지원

메모리 할당

- 홀(Hole) : 사용 가능한 메모리의 큰 블록, 다양한 크기의 홀이 메모리 전체에 흩어져 있다.
- 프로세스 생성 : 프로세스를 수용할 수 있을 만큼 큰 홀에서 메모리가 할당
- 운영 체제가 유지하는 정보 : 할당된 파티션, 사용 가능한 파티션(홀)
동적 스토리지 할당 문제

- First-fit : 충분한 크기의 첫 번째 홀을 할당
- Best-fit : 충분히 크기의 가장 작은 홀을 할당
- Worst-fit : 충분히 크기의 가장 큰 홀을 할당
외부 조각화(External Fragmentation)
- 요청을 충족하기 위한 총 사용 가능한 메모리 공간이 존재하지만 연속되지는 않는다.
- 압축으로 줄일 수 있다.
- 모든 사용 가능한 메모리를 하나의 큰 블록에 함께 배치
내부 조각화(Internal Fragmentation)
- 할당된 메모리가 요청된 메모리보다 약간 클 수 있다.
- 크기 차이는 파티션 내부에 있지만 사용되지 않는다.

페이징
메모리와 이미지를 각각 고정 크기로 나눈다.
- 페이지 프레임 및 페이지
- 크기는 2의 거듭제곱으로 512B에서 8KB 사이
전체 프로그램 이미지가 디스크에 있다.
프로그램이 시작되면 첫 페이지만 로드한다.
나머지 페이지는 on-demand 메모리에 로드된다.
프로그램의 특정 페이지 X
- 이미 메모리 페이지 프레임 Y에 로드
- 로드된 적이 없고 디스크에 있다.
페이지는 메모리의 모든 위치에 배치할 수 있다.
CPU가 주소를 표시할 때마다 MMU는 페이지 테이블(page table)을 검색한다.
- 논리적 주소를 물리적 주소로 변환하는 데 사용
페이지 테이블 예

다른 페이징 예
- 32바이트 메모리 및 4바이트 페이지

주소 변환 체계
- CPU에서 생성되는 논리적 주소는 두 부분으로 나뉜다.
- 예) 지정된 주소 길이 32 및 페이지 크기 4KB

- 페이지 번호(p)
- 페이지 테이블의 인덱스로 사용
- 물리적 메모리에 있는 각 페이지 프레임의 기본 주소를 포함
- 페이지 오프셋(d)
- 기본 주소와 결합되어 물리적 메모리 주소를 정의

공유 페이지

메모리 보호가 구현
- 보호 비트를 각 프레임에 연결
- Read-only, read-write, execute-only bit
- Valid-invalid bit
장점
- 물리적 메모리보다 큰 메모리 공간을 제공
- 32비트 프로세서라면 4GB의 논리적 주소 공간이 가능
- demand 페이징 지원
- 메모리 배치 정책이 필요 없다.
- 페이지 공유 제공
- 메모리 공간을 서로 보호
단점
- 시간적 오버헤드
- → TLB(번역 색인 버퍼)
- 공간 오버헤드
- → 다단계 페이지 테이블, 해시된 페이지 테이블, 역 페이지 테이블
페이지 테이블 구현
페이지 테이블은 메인 메모리에 보관
- PTBR(페이지 테이블 베이스 레지스터) : 페이지 테이블을 가리킨다.
모든 데이터/명령 액세스에는 두 개의 메모리 접근 필요
- 페이지 테이블용, 데이터/명령용
→ 두 가지 메모리 접근 문제를 해결할 수 있다.
- TLB(번역 색인 버퍼) 사용
TLB(번역 색인 버퍼)를 사용한 페이징

유효 접근 시간
- TLB 검색 시간 : ε
- 메모리 접근 시간 : 1
- 적중률: α
- TLB에서 발견된 백분율
- 유효 접근 시간 = (1 + µ)α + (2 + µ)(1 – α) = 2 + µ – α
페이지 테이블을 저장하려면 추가 메모리 공간이 필요
프로그램에 주소 공간이 크다.
- 32비트 주소를 사용하면,
- → 4GB 크기의 프로그램 주소 가능
- → 100만 페이지 테이블 항목(페이지 크기가 4KB인 경우)
- → 4MB 페이지 테이블(항목 크기가 4B인 경우)
페이지 테이블은 프로세스별 데이터 구조
- 페이지 테이블을 저장할때 필요한 크기 : 4MB * N(프로세스 수)
페이지 테이블의 구조
- 계층적 페이지 테이블
- 2단계 페이지 테이블 구성표
- 3단계 페이지 테이블 구성표
- 해시된 페이지 테이블(hashed page table)
- 역 페이지 테이블(inverted page table)
2단계 페이지 테이블 구성표
2단계 페이지 테이블 구성표
- 페이지 표 자체도 페이지화
- 전체 페이지 테이블을 디스크에 저장
- 페이지 테이블의 페이지를 필요에 따라 로드

2단계 페이지 테이블 구조를 사용한 주소 변환
- 논리적 주소(페이지 크기가 4K인 32비트)가 분할
- 20비트 페이지 번호
- 12비트 페이지 오프셋
- 페이지 테이블 자체가 페이지로 되어 있기 때문에 페이지 번호가 더 구분
- 외부 페이지 테이블의 인덱스에 대한 10비트
- 내부 페이지 테이블의 인덱스에 대한 10비트

64비트 프로세서용 3단계 페이징

해시된 페이지 테이블
논리적 페이지 번호는 테이블로 해시
- 해시 테이블
해시 테이블의 포함된 내용
- 일련의 요소가 동일한 위치에 해시
논리적 페이지 번호를 다음과 비교
- 일치하는 항목의 체인에 있는 첫 번째 필드
일치하는 항목이 발견되면,
- 해당 물리적 프레임 번호가 추출

역 페이지 테이블(inverted page table)
페이지 테이블의 공간 오버헤드
- 페이지 테이블의 크기는 프로그램 크기에 비례
- 각 페이지에 대해 하나의 페이지 테이블 항목
- 사실, 한 번에 몇 페이지만 필요
역 페이지 테이블
- 각 페이지 프레임에 대해 하나의 페이지 테이블 항목
- 각 페이지 테이블 항목에는 process-id 포함
- 시스템에서는 한 페이지 테이블로 충분
- 항목은 페이지 프레임 수만큼 필요
- 연관 검색이므로 전체 테이블을 검색
- 각 페이지 테이블을 저장하는 데 필요한 메모리를 줄인다.
- 테이블을 검색하는 데 필요한 시간이 늘어난다.
- 따라서 해시 테이블 또는 연관 레지스터를 사용해야 한다.

세그먼트
프로그램은 세그먼트의 모음

세그먼트 테이블

논리적 주소 구성
- <세그먼트 번호, 오프셋>
세그먼트 테이블
- 각 테이블 항목
- base : 세그먼트가 메모리에 상주하는 시작 물리적 주소
- limit : 세그먼트의 길이
세그먼트 테이블 베이스 레지스터(STBR)
- 세그먼트 테이블의 메모리 위치를 가리킨다.
세그먼트 테이블 길이 레지스터(STLR)
- 프로그램에서 사용하는 세그먼트 수를 나타낸다.
- 세그먼트 번호는 < STLR인 경우 합법적
세분화 아키텍처를 통한 주소 변환

보호
- 보호 비트는 세그먼트와 연결
- 유효성 검사 비트
- 읽기/쓰기/쓰기 권한
코드 공유는 세그먼트 수준에서 발생
세그먼트의 길이가 다양한다.
- 동적 스토리지 할당 문제가 존재
- first-fit, best-fit, worst-fit
요약
- 주소 바인딩
- 프로그램 명령 및 데이터를 실제 메모리 주소에 연결하는 프로세스
- 컴파일 시간, 로드 시간, 실행 시간의 세 가지 단계에서 발생
- 실행 시간 바인딩 : 바인딩은 실행 시간까지 지연, CPU가 주소를 생성할 때마다 바인딩이 확인
- MMU(Memory Management Unit) : 논리적 주소를 물리적 주소에 매핑하는 하드웨어
- 페이징
- 전체 프로그램 이미지가 디스크에 상주
- 프로그램이 시작되면 첫 페이지만 로드
- 나머지 페이지는 on-demand 메모리에 로드
- 실제 메모리보다 큰 프로그램을 실행 가능
- 모든 데이터/명령어 접근에는 두 개의 메모리 액세스가 필요, 페이지 테이블용, 데이터/명령어용
- 다단계 페이지 테이블 구조 : 페이지 테이블 자체도 페이지로 이동
'운영체제' 카테고리의 다른 글
[OS] 대량 저장 구조(Mass-Storage Structure) (0) | 2023.05.08 |
---|---|
[OS] 가상메모리(Virtual Memory) (0) | 2023.05.01 |
[OS] 교착상태(Deadlocks) (0) | 2023.04.17 |
[OS] 동기화 도구 (0) | 2023.04.03 |
[OS] CPU 스케줄링 (0) | 2023.03.27 |
사용자 프로그램의 다단계 프로세스

주소 바인딩(Address binding)
주소 바인딩
- 프로그램 명령 및 데이터를 실제 메모리 주소에 연결하는 프로세스

주소 바인딩의 세 단계
- 컴파일 시간 바인딩(Compile time binding)
- 로드 시간 바인딩(Load time binding)
- 실행 시간 바인딩(Execution time binding)
컴파일 시간 바인딩(Compile time binding)
- 컴파일 시간에 메모리 위치를 알면 절대 주소의 절대 코드를 생성할 수 있다.

- 시작 위치가 변경되면 코드를 재컴파일해야 한다.
로드 시간 바인딩(Load time binding)
- 컴파일 시간에 메모리 위치를 알 수 없는 경우, 상대 주소로 재배치 가능한 코드를 생성할 수 있다.

- 시작 위치가 변경된 경우에만 리로드하면 된다.
실행 시간 바인딩(Execution time binding)
- 실행 시간(run time)까지 바인딩이 지연된다.
- CPU가 주소를 생성할 때마다 바인딩이 확인된다.

- 주소 매핑을 위한 MMU와 같은 하드웨어 지원이 필요하다.
- 대부분의 OS에서 사용
메모리 관리 장치
논리적 주소(Logical address)
- = 가상 주소(virtual address)
- CPU에 의해 생성
물리적 주소(Physical address)
- 메모리 장치에서 주소를 확인

MMU
- 논리적 주소를 물리적 주소에 매핑하는 하드웨어
단순 MMU 체계
- 재배치 레지스터의 값은 CPU에 의해 생성된 모든 주소에 추가된다.

프로그램 & CPU
- 논리적 주소를 다루지만 물리적 주소는 보지 못한다.
동적 로딩(Dynamic Loading)
호출될 때까지 루틴이 로드되지 않는다.
메모리 공간 활용도 향상
- 사용하지 않는 루틴은 로드되지 않는다.
대량의 오류 처리 코드가 필요할 때 유용
- 오류가 자주 발생하지 않는다.

Load할 때마다 매번 동일한 address가 비어 있을까? No.
- → 어디든지 load될 수 있기 때문에 dynamic linking이 필요
동적 링킹(Dynamic Linking)
동적 링킹
- 실행시간까지 연결이 지연
공유 라이브러리
- 라이브러리가 필요한 모든 프로세스의 경우 메모리에 복사본 하나만 있으면 충분하다.

스와핑(Swapping)
스와핑
- 프로세스를 메모리 부족 상태에서 백업 저장소로 일시적으로 스왑할 수 있다.
- 그리고 나중에 메모리에 되살아난다.
백업 저장소(Backing store)
- 모든 이미지를 수용할 수 있을 정도로 빠르고 크다.
- 예) 디스크
스와핑의 개략도

연속 할당(Contiguous Allocation)
주 메모리의 두 개의 파티션
- 운영 체제 용도
- 사용자 프로세스 용도
메모리 매핑 및 보호
- 재배치(Relocation) 레지스터 : 사용자 프로세스를 보호하는 데 사용
- 제한(Limit) 레지스터 : 다양한 논리 주소가 포함, 각 논리적 주소는 제한 레지스터보다 작아야 한다.
- MMU : 재배치 레지스터에 값을 추가하여 논리적 주소를 동적으로 매핑
연속 메모리 할당을 위한 하드웨어 지원

메모리 할당

- 홀(Hole) : 사용 가능한 메모리의 큰 블록, 다양한 크기의 홀이 메모리 전체에 흩어져 있다.
- 프로세스 생성 : 프로세스를 수용할 수 있을 만큼 큰 홀에서 메모리가 할당
- 운영 체제가 유지하는 정보 : 할당된 파티션, 사용 가능한 파티션(홀)
동적 스토리지 할당 문제

- First-fit : 충분한 크기의 첫 번째 홀을 할당
- Best-fit : 충분히 크기의 가장 작은 홀을 할당
- Worst-fit : 충분히 크기의 가장 큰 홀을 할당
외부 조각화(External Fragmentation)
- 요청을 충족하기 위한 총 사용 가능한 메모리 공간이 존재하지만 연속되지는 않는다.
- 압축으로 줄일 수 있다.
- 모든 사용 가능한 메모리를 하나의 큰 블록에 함께 배치
내부 조각화(Internal Fragmentation)
- 할당된 메모리가 요청된 메모리보다 약간 클 수 있다.
- 크기 차이는 파티션 내부에 있지만 사용되지 않는다.

페이징
메모리와 이미지를 각각 고정 크기로 나눈다.
- 페이지 프레임 및 페이지
- 크기는 2의 거듭제곱으로 512B에서 8KB 사이
전체 프로그램 이미지가 디스크에 있다.
프로그램이 시작되면 첫 페이지만 로드한다.
나머지 페이지는 on-demand 메모리에 로드된다.
프로그램의 특정 페이지 X
- 이미 메모리 페이지 프레임 Y에 로드
- 로드된 적이 없고 디스크에 있다.
페이지는 메모리의 모든 위치에 배치할 수 있다.
CPU가 주소를 표시할 때마다 MMU는 페이지 테이블(page table)을 검색한다.
- 논리적 주소를 물리적 주소로 변환하는 데 사용
페이지 테이블 예

다른 페이징 예
- 32바이트 메모리 및 4바이트 페이지

주소 변환 체계
- CPU에서 생성되는 논리적 주소는 두 부분으로 나뉜다.
- 예) 지정된 주소 길이 32 및 페이지 크기 4KB

- 페이지 번호(p)
- 페이지 테이블의 인덱스로 사용
- 물리적 메모리에 있는 각 페이지 프레임의 기본 주소를 포함
- 페이지 오프셋(d)
- 기본 주소와 결합되어 물리적 메모리 주소를 정의

공유 페이지

메모리 보호가 구현
- 보호 비트를 각 프레임에 연결
- Read-only, read-write, execute-only bit
- Valid-invalid bit
장점
- 물리적 메모리보다 큰 메모리 공간을 제공
- 32비트 프로세서라면 4GB의 논리적 주소 공간이 가능
- demand 페이징 지원
- 메모리 배치 정책이 필요 없다.
- 페이지 공유 제공
- 메모리 공간을 서로 보호
단점
- 시간적 오버헤드
- → TLB(번역 색인 버퍼)
- 공간 오버헤드
- → 다단계 페이지 테이블, 해시된 페이지 테이블, 역 페이지 테이블
페이지 테이블 구현
페이지 테이블은 메인 메모리에 보관
- PTBR(페이지 테이블 베이스 레지스터) : 페이지 테이블을 가리킨다.
모든 데이터/명령 액세스에는 두 개의 메모리 접근 필요
- 페이지 테이블용, 데이터/명령용
→ 두 가지 메모리 접근 문제를 해결할 수 있다.
- TLB(번역 색인 버퍼) 사용
TLB(번역 색인 버퍼)를 사용한 페이징

유효 접근 시간
- TLB 검색 시간 : ε
- 메모리 접근 시간 : 1
- 적중률: α
- TLB에서 발견된 백분율
- 유효 접근 시간 = (1 + µ)α + (2 + µ)(1 – α) = 2 + µ – α
페이지 테이블을 저장하려면 추가 메모리 공간이 필요
프로그램에 주소 공간이 크다.
- 32비트 주소를 사용하면,
- → 4GB 크기의 프로그램 주소 가능
- → 100만 페이지 테이블 항목(페이지 크기가 4KB인 경우)
- → 4MB 페이지 테이블(항목 크기가 4B인 경우)
페이지 테이블은 프로세스별 데이터 구조
- 페이지 테이블을 저장할때 필요한 크기 : 4MB * N(프로세스 수)
페이지 테이블의 구조
- 계층적 페이지 테이블
- 2단계 페이지 테이블 구성표
- 3단계 페이지 테이블 구성표
- 해시된 페이지 테이블(hashed page table)
- 역 페이지 테이블(inverted page table)
2단계 페이지 테이블 구성표
2단계 페이지 테이블 구성표
- 페이지 표 자체도 페이지화
- 전체 페이지 테이블을 디스크에 저장
- 페이지 테이블의 페이지를 필요에 따라 로드

2단계 페이지 테이블 구조를 사용한 주소 변환
- 논리적 주소(페이지 크기가 4K인 32비트)가 분할
- 20비트 페이지 번호
- 12비트 페이지 오프셋
- 페이지 테이블 자체가 페이지로 되어 있기 때문에 페이지 번호가 더 구분
- 외부 페이지 테이블의 인덱스에 대한 10비트
- 내부 페이지 테이블의 인덱스에 대한 10비트

64비트 프로세서용 3단계 페이징

해시된 페이지 테이블
논리적 페이지 번호는 테이블로 해시
- 해시 테이블
해시 테이블의 포함된 내용
- 일련의 요소가 동일한 위치에 해시
논리적 페이지 번호를 다음과 비교
- 일치하는 항목의 체인에 있는 첫 번째 필드
일치하는 항목이 발견되면,
- 해당 물리적 프레임 번호가 추출

역 페이지 테이블(inverted page table)
페이지 테이블의 공간 오버헤드
- 페이지 테이블의 크기는 프로그램 크기에 비례
- 각 페이지에 대해 하나의 페이지 테이블 항목
- 사실, 한 번에 몇 페이지만 필요
역 페이지 테이블
- 각 페이지 프레임에 대해 하나의 페이지 테이블 항목
- 각 페이지 테이블 항목에는 process-id 포함
- 시스템에서는 한 페이지 테이블로 충분
- 항목은 페이지 프레임 수만큼 필요
- 연관 검색이므로 전체 테이블을 검색
- 각 페이지 테이블을 저장하는 데 필요한 메모리를 줄인다.
- 테이블을 검색하는 데 필요한 시간이 늘어난다.
- 따라서 해시 테이블 또는 연관 레지스터를 사용해야 한다.

세그먼트
프로그램은 세그먼트의 모음

세그먼트 테이블

논리적 주소 구성
- <세그먼트 번호, 오프셋>
세그먼트 테이블
- 각 테이블 항목
- base : 세그먼트가 메모리에 상주하는 시작 물리적 주소
- limit : 세그먼트의 길이
세그먼트 테이블 베이스 레지스터(STBR)
- 세그먼트 테이블의 메모리 위치를 가리킨다.
세그먼트 테이블 길이 레지스터(STLR)
- 프로그램에서 사용하는 세그먼트 수를 나타낸다.
- 세그먼트 번호는 < STLR인 경우 합법적
세분화 아키텍처를 통한 주소 변환

보호
- 보호 비트는 세그먼트와 연결
- 유효성 검사 비트
- 읽기/쓰기/쓰기 권한
코드 공유는 세그먼트 수준에서 발생
세그먼트의 길이가 다양한다.
- 동적 스토리지 할당 문제가 존재
- first-fit, best-fit, worst-fit
요약
- 주소 바인딩
- 프로그램 명령 및 데이터를 실제 메모리 주소에 연결하는 프로세스
- 컴파일 시간, 로드 시간, 실행 시간의 세 가지 단계에서 발생
- 실행 시간 바인딩 : 바인딩은 실행 시간까지 지연, CPU가 주소를 생성할 때마다 바인딩이 확인
- MMU(Memory Management Unit) : 논리적 주소를 물리적 주소에 매핑하는 하드웨어
- 페이징
- 전체 프로그램 이미지가 디스크에 상주
- 프로그램이 시작되면 첫 페이지만 로드
- 나머지 페이지는 on-demand 메모리에 로드
- 실제 메모리보다 큰 프로그램을 실행 가능
- 모든 데이터/명령어 접근에는 두 개의 메모리 액세스가 필요, 페이지 테이블용, 데이터/명령어용
- 다단계 페이지 테이블 구조 : 페이지 테이블 자체도 페이지로 이동
'운영체제' 카테고리의 다른 글
[OS] 대량 저장 구조(Mass-Storage Structure) (0) | 2023.05.08 |
---|---|
[OS] 가상메모리(Virtual Memory) (0) | 2023.05.01 |
[OS] 교착상태(Deadlocks) (0) | 2023.04.17 |
[OS] 동기화 도구 (0) | 2023.04.03 |
[OS] CPU 스케줄링 (0) | 2023.03.27 |