분류 전체보기
-
[OS] 페이지 교체 알고리즘 (FIFO, LRU, LFU, NRU, NUR)OS 2021. 12. 7. 10:15
페이지 교체 알고리즘 (FIFO, LRU, LFU, NRU, NUR) 안녕하세요? 장장스입니다. 가상 메모리 기법을 구현하는 방식 중 하나인 요구 페이징 방식은 페이지 부재가 발생하게 됩니다. 페이지를 교체하는 작업은 오버헤드를 동반하므로 가능하면 페이지 교체가 적게 일어나도록 하는 것이 좋습니다. 페이지 교체가 무엇인지, 페이지 교체 페이지 부재(page fault)가 발생하면 요청된 페이지를 디스크에서 메모리로 읽어와야 합니다. 이때 물리적 메모리에 빈 프레임이 존재하지 않을 수 있습니다. 이 경우 물리적 메모리에 올라와 있는 페이지 중 하나를 선택해서 디스크의 스왑 영역으로 보내야 합니다. 이와 같은 과정을 페이지 교체라고 합니다. 페이지 교체 알고리즘 어떠한 프레임에 있는 페이지를 디스크의 스왑 ..
-
[OS] 요구 페이징(가상메모리)OS 2021. 12. 6. 09:53
요구 페이징(가상메모리) 안녕하세요? 장장스입니다. 우리가 일반적으로 사용하는 컴퓨터의 메모리는 8GB, 16GB로 그 크기가 한정되어 있습니다. 그럼에도 우리는 많은 프로그램을 동시에 띄워 사용하고 있습니다. 운영체제는 한정된 메모리 공간을 효율적으로 사용하기 위해 가상메모리 기법을 사용합니다. 가상메모리 기법은 크게 요구 페이징 방식(demand paging)과 요구 세그먼테이션 방식(demand segmentation)으로 구현이 됩니다. 요구 세그먼테이션 방식의 경우에는 페이지드 세그먼테이션 기법을 사용하는 경우입니다. 대부분의 경우에는 요구 페이징 방식을 사용합니다. 요구 페이징(demand paging) 요구 페이징은 프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는..
-
[GoF] 팩토리 메서드 패턴(Factory Method Pattern)Gof Design Pattern 2021. 12. 5. 20:03
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴이란? 인스턴스 생성을 하위 클래스로 분리하도록 위임하는 패턴이다. 인스턴스를 생성하기 위한 인터페이스를 정의하고자 하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정을 하위 클래스에서 결정하도록 할 수 있습니다. (비유하자면 고객이 자량 구매를 요청 했을 때, 공장에서 요청에 맞게 차량을 생산하는 것과 같다.) 팩토리 메서드 패턴 왜 사용할까? 인스턴스를 생성할 때 관련된 동일한 메서드는 상위 클래스에서 처리하여 공통처리되도록 구현이 가능하고, 나머지 상황에 따른 각각 일어날 수 있는 인스턴스에 대한 생성을 하위 클래스에게 처리할 수 있습니다. 팩토리 메서드 패턴을 사용하게 되면 하위 클래스에서 상황에 따라 다양한 인스..
-
[ GoF] 템플릿 메서드 패턴(Template Method Pattern)Gof Design Pattern 2021. 12. 4. 13:40
템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴이란? 상위 클래스(abstract class)에서 전반적인 흐름을 구현하고 하위 클래스에서 이를 상속받아 구체적인 처리를 하도록 위임하는 패턴이다. 템플릿 메서드 패턴 왜 사용할까? 오퍼레이션에 알고리즘(단계)의 기본 골격 구조를 정의하고 구체적인 단계는 하위 클래스에 정의한다. abstract 메서드를 통해서 알고리즘(단계)의 일부 단계를 정의함으로써 템플릿 메소드의 처리순서를 정할 수 있다. 템플릿 메서드를 사용하게 되면 템플릿 메서드를 통해 코드 재사용을 할 수 있다. 프레임워크에서 가장 많이 사용되는 패턴 중 하나 이다. 클래스의 공통부분을 분리할 수 있다. 템플릿 메서드에서 사용하는 오퍼레이션들 ConcreteC..
-
[GoF] 빌더 패턴(Builder Pattern)Gof Design Pattern 2021. 12. 3. 13:30
빌더 패턴(Builder Pattern) 빌더 패턴이란? 복잡한 객체를 생성하는 클래스와 구현하는 클래스를 분리하여, 동일한 생성 과정에서도 서로 다른 결과물이 나올 수 있도록 방법을 제공합니다. 사용자는 Builder에서 제공하는 메서드를 사용하여 (구현)결과물을 얻을 수 있습니다. 빌더 패턴 왜 사용할까? 객체를 생성할 때 생성 과정과 구현 방법을 분리함으로써 동일한 객체를 생성에서 과정에서 여러 다른 표현이 나올 수 있다. 빌더 패턴을 사용하게 되면 생성과 구현을 분리할 수 있다. 구현을 다양하게 할 수 있다. 복잡한 객체를 생성하는 절차를 세밀하게 나눌 수 있다. 사용자는 구체적인 사항을 알 필요가 없다. 클래스 다이어그램 객체 협력 Builder Product의 각 요소들을 생성하는데 필요한 추..
-
[OS] 메모리 불연속할당 - (3) 페이지드 세그먼테이션OS 2021. 12. 2. 19:16
[OS] 메모리 불연속할당 - (3) 페이지드 세그먼테이션 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 불연속할당 방식중 하나인 페이지드 세그먼테이션에 대해 정리해보겠습니다. 페이지드 세그먼테이션 앞선 두 가지 포스팅을 보면 (1) 페이징 기법 (2) 세그먼테이션 각각의 장단점을 갖고 있음을 알 수 있다. 페이지드 세그먼테이션은 페이징 기법과 세그먼테이션 기법의 장점을 취하는 주소 변환 기법이다. 세그먼테이션과 마찬가지로 프로세스를 의미 단위의 세그먼트로 분할한다. 단, 세그먼테이션 처럼 불규칙한 길이가 아니라 동일한 크기의 페이지들의 집합으로 구성하는 것이다. 페이지드 세그먼테이션 테이블 하나의 세그먼트를 여러개의 페이지로 구성되므로..
-
[OS] 메모리 불연속할당 - (2) 세그먼테이션OS 2021. 12. 1. 18:37
[OS] 메모리 불연속할당 - (2) 세그먼테이션 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 불연속할당 방식중 하나인 세그먼테이션에 대해 정리해보겠습니다. 세그먼테이션 세그먼테이션은 프로세스의 주소공간을 의미 단위의 세그먼트(segment)로 나누어 물리적 메모리에 올리는 방법이다. 프로세스의 주소 공간은 일반적으로 코드, 데이터, 스택 등의 의미 있는 단위들로 구성이 된다. 세그먼트는 이와 같은 주소 공간 전체를 크게는 하나의 세그먼트로 보기도 한다. 일반적으로 코드, 데이터, 스택 등의 기능 단위로 세그먼트를 정의하며, 프로그램을 구성하는 함수 하나하나를 각각 세그먼트라고 정의할 수도 있다. 주의할 점은 논리적 단위로 나눈 것이기..
-
[OS] 메모리 불연속할당 - (1) 페이징 기법OS 2021. 11. 30. 15:38
[OS] 메모리 불연속할당 - (1) 페이징 기법 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 불연속할당 방식중 하나인 페이징 기법에 대해 정리해보겠습니다. 메모리 불연속할당 기법 불연속할당 기법은 하나의 프로세스가 물리적 메모리의 여러 위치에 분산되어 올라갈 수 있는 메모리 할당 기법을 말합니다. 페이징 기법 페이징 기법은 프로세스의 주소 공간을 동일한 크기의 페이지 단위로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식을 말한다. 페이징 기법에서는 각 프로세스의 주소 공간 일부는 백킹스토어에, 일부는 물리적 메모리에 혼재시키는 것이 가능하다. 페이징 기법에서는 물리적 메모리를 페이지와 동일한 크기의 프레임으로 미리..
-
[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식OS 2021. 11. 28. 16:24
[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 연속할당 방식인 고정분할 방식과 가변분할 방식에 대해 정리해보겠습니다. 메모리 연속할당 기법 연속할당 기법은 프로세스를 메모리에 올릴 때 주소 공간을 메모리의 한 곳에 연속적으로 적재하는 방식입니다. 연속 할당 방식에서는 물리적 메모리를 다수의 분할로 나누어 하나의 분할에 하나의 프로세스가 적재되도록 합니다. 연속할당 기법은 크게 고정분할 방식과 가변분할 방식으로 나뉩니다. 고정분할 방식 고정분할 방식은 물리적 메모리를 정해진 개수만큼의 영구적인 분할로 나누어두고 각 분할에 하나의 프로세스를 적재하는 방식입니다. 분할의 크기는 모두 ..
-
[백준] 2461 대표선수 #JAVA #투포인터Algorithm Solving/BAEKJOON 2021. 11. 27. 08:01
[백준] 2461 대표선수 #JAVA #투포인터 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static int N,M; static int count[]; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); S..