1. Segmentation 기법 Paging 기법이 프로그램의 주소 공간을 같은 크기의 Page 단위로 쪼갠 것이라면, Segmentation 기법은 크기를 기준으로 자르는 것이 아닌 의미 있는 단위로 자르는 것을 말합니다. 프로그램이 의미 있는 단위인 Segment로 구성되고, 일반적으로는 하나 씩의 세그먼트가 code, data, stack으로 구성됩니다. (1) Segmentation ArchitectureSegmentation에서의 주소 변환은 페이징 기법과 비슷한 측면이 있습니다. 우선 논리적 주소를 Segment-number와 segment table안에서 얼마만큼 떨어져있는지 나타내는 Offset으로 구성합니다. 각 세그먼트 별로 서로 다른 물리적 메모리 주소에 올라갈 수 있기에 ..
분류 전체보기
이번 포스팅에서는 Page table에 대해 좀 더 구체적으로 살펴보겠습니다. 1. Memory Protection 이전 포스팅에서 Page Table에는 Entry와 물리적 주소 정보로 구성된다고 했습니다. 그런데 이 두 가지뿐 아니라 Valid-Invalid bit와 Protection bit이라는 부가적인 bit가 페이지 테이블의 Entry마다 존재합니다. (1) Valid - Invalid Bit in a Page Table Valid-Invalid bit은 정말 엔트리가 사용되는지 여부를 나타내기 위한 것입니다. 테이블이라는 자료 구조상 인덱스로 접근하기 때문에 프로그램에 주소 공간이 가질 수 있는 최대 크기만큼 페이지 테이블 Entry가 있어야 합니다. 위 그림에서는 논리적 메모리가 Pa..
문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 소스코드 import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.Scanner; public class Main { static int N,M,X; static int INF = Integer.MAX_VALUE; static int[] ..
이전 포스팅에서 연속 할당에 대해 살펴보았습니다. 연속 할당 방법은 프로그램이 메모리에 올라갈 때 통째로 메모리에 올라가는 방식입니다. 각각의 프로세스가 메모리의 연속적인 공간에 적재됩니다. 반면 불연속 할당은 프로그램을 구성하는 주소 공간을 같은 크기의 단위(페이지)로 잘개 쪼개서 페이지 단위로 메모리에 올리는 방식입니다. 즉 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있습니다. 불연속 할당에는 Paging 기법과 Segmentation기법, Page Segmentation기법 등이 있습니다. 이번 포스팅에서는 불연속 할당의 Paging 기법에 대해 살펴보겠습니다. 1. Paging (1) Paging 기법이란? Paging 기법은 프로그램을 구성하는 논리적 메모리(가상 ..
이번 포스팅부터는 물리적인 메모리를 어떻게 관리할 것인가에 대해 살펴보겠습니다. 물리적 메모리는 일반적으로 두 영역으로 나뉘어 사용됩니다.낮은 주소 영역에는 운영체제 커널이 항상 상주해있고, 높은 주소 영역에는 사용자 프로그램이 있습니다. 사용자 프로그램이 올라간 영역을 관리하는 방법은 크게 두 가지로 나누어 볼 수 있습니다. 첫 번째는 연속 할당(Contiguous allocation)으로 프로그램이 메모리에 올라갈 때 통째로 메모리에 올라가는 방식입니다. 즉 각각의 프로세스가 메모리의 연속적인 공간에 적재되는 것입니다. 두 번째는 불연속 할당(Noncontiguous allocation)으로 프로그램을 구성하는 주소 공간을 같은 크기의 페이지 단위로 쪼개서 페이지 단위로 메모리에 올리는 방식입..
1. 동적 로딩(Dynamic loading) 프로그램을 메모리에 동적으로 올린다는 것은 프로그램 전체를 메모리에 미리 다 올리는 것이 아니라, 필요할 때마다 해당하는 루틴을 메모리에 올리는 것을 말합니다. 프로그램이 실행될 때 프로그램 전체가 균일하게 사용되는 것이 아니라, 자주 사용되는 부분은 한정적이고, 오류 처리 루틴과 같이 가끔씩 사용되는 많은 양의 코드가 있습니다. 그래서 프로그램이 실행될 때마다 이것을 전부 메모리에 올리는 것은 비효율적이기 때문에, 미리 올려놓는 것이 아닌 필요할 때마다 메모리에 올리는 방식을 동적 로딩이라고 합니다. 여기서 주의해야할 개념이 한 가지 있습니다. 이후에 다룰 Paging 기법인데, Paging은 물리적인 메모리를 고정 크기의 페이지로 나누어 프로그램 ..