일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택(Stack)
- 알고리즘 개념
- 트리(Tree)
- 백준 18352번
- BFS
- 백준 10000번
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 2493번
- 백준 1707번
- 백준 1948번
- 이분 그래프(Bipartite Graph)
- 백준 9012번
- DFS & BFS
- 이분 탐색(Binary Search)
- 분할 정복(Divide and Conquer)
- 백준 2504번
- 그리디 알고리즘(Greedy Algorithm)
- BFS(Breadth First Search)
- 백준 2812번
- 백준 17608번
- 백준 2261번
- 그래프(Graph)
- 큐(Queue)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 21606번
- 위상 정렬(Topology Sort)
- DFS
- 동적 프로그래밍(Dynamic Programming)
- DFS(Depth First Search)
- 위상 정렬(Topological Sort)
- Today
- Total
목록컴퓨터 시스템 (42)
Always Be Wise

지금까지 가상 메모리 시스템을 구성하는 여러 중요 구성 요소에 대해 살펴보았다. 이 구성 요소에는 페이지 테이블 설계 방식, TLB를 비롯한 하드웨어와의 상호 작용, 페이지 관리 정책 등이 포함된다. 두 개의 가상 메모리 시스템, VAX/VMS(Virtual Address Extension/Virtual Memory System)와 Linux를 상세히 살펴보면서 보다 완전한 가상 메모리 시스템을 구현하기 위해 필요한 특징들이 무엇인지 살펴보도록 하자. VAX/ VMS 가상 메모리 VAX/VMS는 컴퓨터의 구조적 결함을 소프트웨어로 보완한 훌륭한 사례다. 운영체제가 이상적인 개념과 환상을 제공하기 위해 하드웨어 의존하지만, 하드웨어가 모든 것을 제대로 해내지 못할 경우도 있다. 하드웨어 결함에도 불구하고 ..
가상 메모리를 관리하는 입장에서 비어 있는 메모리가 많을수록 일은 수월해진다. 페이지 폴트가 발생하면 빈 페이지 리스트에서 비어 있는 페이지를 찾아서 페이지 폴트를 일으킨 페이지에게 할당하면 된다. 다만, 불행하게도 빈 메모리 공간이 거의 없으면 일이 복잡해진다. 그런 경우 운영체제는 메모리 압박을 해소하기 위해 다른 페이지들을 강제적으로 페이징 아웃하여 활발히 사용 중인 페이지들을 위한 공간을 확보한다. 내보낼 페이지 선택은 운영체제의 교체 정책에 따른다. 캐시 관리 시스템의 전체 페이지들 중 일부분만이 메인 메모리에 유지된다는 것을 가정하면, 메인 메모리를 일종의 캐시로 생각할 수 있다. 교체 정책의 목표는 캐시 미스의 횟수를 최소화하는 것이다. 즉, 디스크로부터 페이지를 가져오는 횟수를 최소로 만드..

지금까지는 가상 주소 공간이 비현실적으로 작아서 실행 중인 프로세스의 전체 가상 주소 공간이 메모리에 탑재된 것으로 가정하였다. 이제부터는 다수의 프로세스들이 동시에 매우 큰 가상 주소 공간을 사용하고 있다고 가정하자. 이 경우, 개별 프로세스가 자신의 가상 주소 공간 전부를 메모리에 탑재하는 것이 불가능하다. 현재는 크게 필요하지 않은 가상 주소 공간의 일부를 메모리가 아닌 다른 공간(스왑 공간, Swap Space)에 보관해두어야 한다. 일반적으로 그 공간은 메모리보다 더 크며, 더 느리다. 현대 시스템에서는 보통 하드 디스크나 SSD가 그 역할을 담당한다. 스왑 공간 스왑 공간의 입출력 단위를 페이지라고 가정하자. 운영체제는 스왑 아웃(Swap Out) 시, 메모리의 페이지 내용을 읽어서 스왑 공간..

페이징의 두 번째 문제점은 페이지 테이블의 크기이다. 페이지 테이블이 크면 많은 메모리 공간을 차지한다. 앞선 예와 같이 페이지 크기가 4KB이고, 배열 형태를 가지는 선형 페이지 테이블의 각 항목이 4바이트인 32비트 주소 공간을 가정해보자. 하나의 페이지 테이블 크기가 약 4MB가 된다. 그런데 페이지 테이블은 프로세스마다 존재한다. 프로세스가 100개만 되어도 페이지 테이블을 위해 400MB가 필요하다. 이는 엄청난 메모리 부담이다. 간단한 해법 : 더 큰 페이지 페이지 크기를 증가시키면 페이지 테이블의 크기를 간단하게 줄일 수 있다. 그런데 페이지 크기의 증가는 부작용을 수반한다. 가장 큰 문제는 페이지 내부의 낭비 공간이 증가하는 것이다. 이를 내부 단편화라 한다. 만약 프로그램이 커다란 페이지..

페이징은 주소 공간을 작은 크기(페이지)로 나누고 각 페이지의 실제 위치(매핑 정보)를 메모리에 저장하는 기법이다. 이때, 매핑 정보를 저장하는 자료 구조를 페이지 테이블이라 하며, 큰 메모리 공간을 요구한다. 그런데 더욱 문제가 되는 것은 가상 주소에서 물리 주소로의 주소 변환을 위해 메모리에 존재하는 매핑 정보를 읽어야 한다는 사실이다. 페이지 테이블 접근을 위한 메모리 읽기 작업은 엄청난 성능 저하를 유발한다. 운영체제의 실행 속도를 개선하려면 도움이 필요하다. 대부분의 경우 하드웨어로부터 도움을 받는다. 주소 변환을 빠르게 하기 위해서 메모리 관리부(MMU)의 변환 색인 버퍼(TLB, Translation Lookaside Buffer)를 이용할 수 있다. TLB는 자주 참조되는 가상 주소-실제 ..

프로세스의 주소 공간을 가변 크기의 논리 세그먼트로 나누는 것이 아니라, 고정 크기의 페이지로 나누는 것을 페이징 기법이라 한다. 페이징 기법에서는 물리 메모리를 페이지 프레임이라고 불리는 고정 크기 슬롯의 배열로 간주하며, 프레임 각각은 하나의 가상 메모리 페이지를 저장할 수 있다. 페이지를 사용하여 어떻게 메모리를 가상화할 수 있을까? 간단한 예제 및 개요 아래 왼쪽 그림은 4개의 16바이트 페이지로 구성된 64 바이트 크기의 가상 주소 공간을, 오른쪽 그림은 8개의 16바이트 페이지 프레임으로 구성된 128 바이트 크기의 물리 메모리를 표현한 것이다. 그림에서 알 수 있듯이 물리 메모리는 고정 크기의 슬롯들로 이루어져 있으며, 가상 주소 공간의 페이지들이 분산 배치되어 있다. 페이징은 이전 방식들에..

베이스, 바운드 레지스터를 사용하면 운영체제는 프로세스를 물리 메모리의 다른 부분으로 쉽게 재배치할 수 있다. 그런데 문제는 주소 공간을 물리 메모리에 재배치할 때, 스택과 힙 사이의 빈 공간이 물리 메모리를 차지한다는 것이다. 이는 물리 메모리를 낭비이다. 또한, 주소 공간이 물리 메모리보다 큰 경우 베이스, 바운드 레지스터 기법은 실행이 어렵다. 세그멘테이션 세그먼트는 특정 길이를 갖는 연속적인 주소 공간을 의미한다. 세그멘테이션이란 MMU에 하나의 베이스와 바운드 값이 존재하는 것이 아니라, 세그먼트마다 베이스와 바운드 값이 존재하여, 각 세그먼트를 물리 메모리의 각기 다른 위치에 배치하는 기법이다. 아래 왼쪽 그림의 주소 공간을 물리 메모리에 배치하려고 한다고 가정하자. 각 세그먼트의 베이스와 바..

현대 운영체제의 중요한 목표는 효율성과 제어이다. 효율성을 높이려면 하드웨어 지원을 활용할 수밖에 없다. 처음에는 몇 개의 레지스터만 사용하는 정도부터 TLB, 페이지 테이블 등으로 점차 복잡한 하드웨어를 사용하게 될 것이다. 제어는 응용 프로그램이 자기 자신의 메모리 이외에는 다른 메모리에 접근하지 못한다는 것을 운영체제가 보장하는 것을 의미한다. 프로그램을 다른 프로그램으로부터 보호하고, 운영체제를 프로그램으로부터 보호하기 위하여 하드웨어의 도움이 필요하다. 마지막으로 유연성 측면에서 VM 시스템에서 필요한 사항이 있다. 프로그래머가 원하는 대로 주소 공간을 사용하고 프로그래밍하기 쉬운 시스템을 만들기 원한다. 우리가 다룰 기법은 하드웨어 기반 주소 변환이다. 주소 변환을 통해 하드웨어는 명령어 반입..

초기 시스템 메모리 관점에서 초기 컴퓨터는 많은 개념을 사용자에게 제공하지 않았다. 운영체제는 메모리에 상주하는 루틴, 라이브러리의 집합이었다. 물리 메모리에는 하나의 실행 중인 프로그램(프로세스)이 존재하였고 나머지 메모리 전부를 사용하였다. 멀티프로그래밍과 시분할 컴퓨터는 고가 장비였기 때문에 사람들은더 효과적으로 컴퓨터를 사용하고자 하였다. 한 컴퓨터에서 여러 프로세스(멀티프로그래밍)를 짧은 시간 동안 번갈아가며 실행하면서(시분할) 효율을 높이고자 하였다. 그런데 큰 문제가 있었다. 한 프로세스에서 다른 프로세스로 전환하는 것이 너무 느리게 동작한다는 것이었다. 특히, 메모리가 커질수록 느려졌다. 하드웨어의 특성상, 한 프로세스의 레지스터 상태를 저장하고 복원하는 것은 빠르지만, 메모리 내용 전체..

물리 및 가상 주소 방식 컴퓨터 시스템의 메인 메모리는 M개의 연속적인 바이트 크기 셀의 배열로 구성된다. 각 바이트는 고유의 물리 주소를 가진다. CPU가 메모리에 접근하는 가장 자연스러운 방식은 물리 주소(PA)를 사용하는 것이다. 이러한 접근을 물리 주소 방식이라고 한다. 초기 PC들, 현재의 일부 시스템들은 여전히 물리 주소 방식을 사용하지만, 현대의 프로세스 대부분은 가상 주소 방식을 사용한다. CPU는 가상 주소(VA)를 생성해서 메인 메모리에 접근하며, 이것은 메모리로 보내지기 전에 적절한 물리 주소로 변환된다. 가상 주소를 물리 주소로 변환하는 작업을 주소 번역이라고 하며, 이는 CPU 하드웨어와 운영체제 간에 긴밀한 협력을 필요로 한다. CPU 칩 내에 메모리 관리 유닛(MMU)이라는 하..