본문 바로가기

SP20

[SP] Virtual Memory 1. Address Spaces (1) A System using Physical Addressing CPU가 Physical address를 통해 메인 메모리에 접근 자동차, 엘레베이터 등의 장치에 단순하게 사용 (2) A System using Virtual Addressing CPU는 MMU를 통해 virtual address를 physical address로 변환하고 메인 메모리에 접근 스마트폰, 랩탑 등에 사용 (3) - Linear address space : 음수가 아닌 정수의 연속된 집합 ex) {0, 1, 2, 3, ...} - Virtual address space : N = 2^n 세트의 가상 주소 ex) {0,1, 2, 3, ..., N-1 } - Physical address sp.. 2022. 6. 18.
[SP] Linking (2) Step 1 : Symbol resolution - 링커가 symbol resolution을 완료하면, 링커는 코드의 각 symbol reference와 하나의 symbol 정의를 연결시킴 - 이때 링커는 input object module에서의 코드와 데이터의 확실한 사이즈를 알고 있음 Step 2 : Relocation - input module들을 합치고 각 심볼에 런타임 주소들을 할당 1. Relocation relocatable object 파일들을 relocation하여 메모리를 채움 sum()은 externally defined (1) Relocation Entries - 어셈블러가 object module들을 생성할 때, 어셈블러는 코드와 데이터가 궁극적으로 메모리 어디에 저장돼 있는지 알.. 2022. 6. 7.
[SP] Linking 1. Linking (1) 다양한 코드와 데이터를 메모리에 로드하고 실행할 수 있는 싱글 파일로 만드는 프로세스 (2) 컴파일 타임, 로드 타임, 런타임에 수행 (3) linker에 의해 자동적으로 수행 2. 왜 linking은 배우기 어려울까; 링커 이해하기 (1) 큰 프로그램 설계 - 링커가 reference를 어떻게 해결하는지 이해하지 못하면, 라이브러리가 무엇인지, 링커가 reference를 해결하기 위해 어떻게 라이브러리를 사용하는지에 대해 알 수 없음 (2) 위험한 프로그래밍 에러 피하기 - 다양한 글로벌 변수를 부정확하게 정의하는 프로그램은 경고 업이 링커를 통해 통과할 수 있음 -> 결과 프로그램은 당황스러운 런타임 동작을 낼 것이고 디버그 하기 어려움 (3) language scoping.. 2022. 6. 3.
[sp] Dynamic Memory Allocation : Advanced (2) 1. Segregated List (Seglist) Allocators (1) 블럭의 각 크기별 클래스는 각자의 free list를 가짐 malloc(6)을 했을 때 알맞는 클래스를 찾아서 6만큼 할당하고, 나머지 남은 블럭은 이 블럭의 사이즈에 맞는 클래스에 연결해줌 (2) 종종 각각의 작은 사이즈에 대한 분리된 클래스를 가짐 (3) 큰 사이즈 : 각 2의 지수 크기의 블럭 클래스 (4) 크기가 n인 블럭을 할당하기 위해 - n보다 큰 사이즈의 블럭에 대한 적절한 free list를 찾음 - 만약 적절한 크기의 블럭을 찾았다면 -> 블럭을 분리하고, 이 분리된 블럭 중 할당되지 않은 블럭은 적절한 클래스를 찾아 이어줌 (선택) - 만약 블럭이 없으면, 다음의 큰 클래스에 이 과정을 반복 (5) 블럭이 .. 2022. 5. 26.
[sp] Dynamic Memory Allocation : Advanced (1) 1. Explicit free list : 포인터를 사용하여 free 블럭만 순회할 수 있음 (1) free block의 리스트를 유지, (모든 블럭 아님) - NEXT free block은 어디에나 있을 수 있음 -> 따라서 free 블럭의 사이즈, 앞/뒤의 free 포인터 필요 - coalescing을 위한 boundary tag 필요 - free한 블럭만 추적할 수 있으므로, payload 영역 사용 가능 (2) - 블럭은 임의의 순서로 있을 수 있음 (3) Allocating from explicit free lists (4) Freeing with explicit free lists - Insertion policy : 1. LIFO (last-in-first-out) policy : free .. 2022. 5. 25.
[sp] Dynamic Memory Allocation (3) 1. Implicit List : Bidirectional Coalescing (1) Boundary tags - free block의 bottom(end) 부분에 블럭의 사이즈를 입력 - list를 거꾸로 탐색할 수 있음, 추가 공간 필요 블럭의 마지막에 사이즈 적음 -> footer (2) Constant Time Coalescing - Case 1 - Case 2 - Case 3 - Case 4 2. Allocated block vs free block (1) 이전 블럭이 allocated라면, 이전 블럭의 boundary tag 필요 없음 (2) 이전 블럭이 free라면, 이전 블럭의 boundary tag가 필요 -> 블럭의 크기를 알 수 있음 2022. 5. 24.