일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스택(Stack)
- 그리디 알고리즘(Greedy Algorithm)
- 분할 정복(Divide and Conquer)
- DFS & BFS
- 백준 1707번
- 그래프(Graph)
- 백준 10000번
- 이분 그래프(Bipartite Graph)
- DFS(Depth First Search)
- 큐(Queue)
- 백준 2504번
- 백준 1948번
- 백준 9012번
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 알고리즘 개념
- BFS
- 이분 탐색(Binary Search)
- BFS(Breadth First Search)
- 위상 정렬(Topology Sort)
- 백준 21606번
- 백준 2493번
- 백준 2261번
- 백준 2812번
- 트리(Tree)
- 위상 정렬(Topological Sort)
- DFS
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 동적 프로그래밍(Dynamic Programming)
- 백준 17608번
- 백준 18352번
- Today
- Total
Always Be Wise
메모리와 주소 바인딩 본문
메모리(기억장치)의 종류와 계층 구조
Block이란? : 보조기억장치와 주기억장치 사이의 데이터 전송 단위(1KB~4KB)
Word란? : 주기억장치와 레지스터 사이의 데이터 전송 단위(16~64 Bits)
주소 바인딩(Address Binding)
주소 바인딩(Address Binding)이란 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업을 의미한다.
논리 주소란 프로세스마다 독립적으로 갖는 주소 공간을 의미하며, 각 프로세스마다 0부터 시작한다. CPU가 보는 주소는 논리적 주소이다.
물리 주소란 메모리에 실제 올라가는 위치를 의미한다.
바인딩(Binding) 시점에 따른 구분
1. 컴파일 타임 바인딩(Compile Time Binding)
컴파일러가 메모리에 적재될 프로세스의 위치를 알 수 있는 경우 컴파일 시 물리적 주소를 결정할 수 있다.
물리적 주소는결정된 이후 그 위치가 변하지 않으며, 프로그램 전체가 메모리에 올라가야 한다.
2. 로드 타임 바인딩(Load Time Binding)
메모리 적재 위치를 컴파일 시점에 알 수 없는 경우, 대체 가능한 상대 주소를 생성하고 적재 시점의 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정한다. 로더의 책임하에 물리적 주소가 부여되며 프로그램 전체가 메모리에 올라가야 한다.
3. 런 타임 바인딩(Run Time Binding)
주소 바인딩(Address Binding)을 수행 시까지 연기하는 경우로, 수행이 시작된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있다.
아래 오른쪽 그림처럼 CPU가 주소를 참조할 때마다 바인딩을 점검하며, 논리적 주소를 물리적 주소로 매핑해주는 하드웨어의 지원이
필요하다(MMU, Memory Management Unit). 사용자 프로세스가 생성하는 주소 값에 reloacation register(base register)의 값을
더하여 물리적 주소를 구한다. 대부분의 OS가 런 타임 바인딩을 사용한다.
기타 개념
다이내믹 로딩
모든 루틴을 교체 가능한 형태로 디스크에 저장한다. 실제 호출 전까지는 루틴을 적재하지 않는다.
프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 로드하는 것을 의미한다.
루틴 호출 시점에 address binding 수행한다. 메인 프로그램만 메모리에 적재하여 수행한다. 메모리 공간을 효율적으로 사용한다.
가끔씩 사용되는 많은 양의 코드의 경우 유용하다. 운영체제의 특별한 지원 없이 프로그램 자체에서 구현 가능하다.
스와핑
프로세서 할당이 끝나고 수행 완료된 프로세스는 Swap_device로 보내고(Swap-Out),
새롭게 시작하는 프로세스는 메모리에 적재(Swap-In)하는 방법을 의미한다.
프로세스를 일시적으로 메모리에서 디스크(스왑 에이리어)로 쫓아내는 것이라 할 수 있다.
일반적으로 중기 스케줄러에 의해 스왑 아웃시킬 프로세스 선정한다. 우선순위가 낮은 프로세스를 아웃시키고, 높은 프로세스를 인시킨다.
다이내믹 링킹
링킹을 실행 시간까지 미루는 기법이다. 그 중 정적 링킹은 라이브러리가 프로그램의 실행 파일 코드에 포함된다.
실행 파일의 크기가 커지고, 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비가 발생한다.
동적 링킹이란 라이브러리가 실행 시 연결되는 것을 의미한다.
라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드를 둔다.
라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고 없으면 디스크에서 읽어온다. 운영체제의 도움이 필요하다.
'컴퓨터 시스템 > 운영체제' 카테고리의 다른 글
메모리 할당(2) - 비연속 할당 (0) | 2022.01.04 |
---|---|
메모리 할당(1) - 연속 할당 (0) | 2022.01.04 |
교착 상태(Deadlock) (0) | 2021.12.25 |
프로세스 동기화 & 상호배제 (0) | 2021.12.25 |
프로세스 스케줄링 (0) | 2021.12.24 |