들어가기 앞서서 용어정리스와핑(Swapping)프로세스를 보조기억장치의 스왑 영역으로 내보내고, 당장 필요한 프로세스를 메모리에 적재하는 메모리 관리 기법스왑 아웃(Swap-out)실행 중인 프로세스를 메모리에서 제거하고, 보조기억장치의 스왑 영역으로 이동시키는 작업스왑 인(Swap-in)스왑 아웃된 프로세스를 보조기억장치에서 다시 메모리로 적재하는 작업스왑 영역(Swap Area)스왑 아웃된 프로세스가 저장되는 보조기억장치의 특정 영역일반적으로 디스크의 일부 공간이 사용되며, 메모리 관리의 효율성을 높이는 데 활용됨 스와핑의 동작방식스와핑을 사용할 시 현재 메모리의 크기보다 더 많은 프로세스를 적재할 수 있는 장점이 있다. 만약 프로세스 A, B, C, D가 있고 이 프로세스의 메모리의 합은 현재 메..
자바의 메모리 구조자바의 메모리 구조는 자바의 JVM 메모리 구조를 말하는 것과 같다. 자바 애플리케이션이 실행되는 동안 사용되는 메모리를 구분하고 효율적으로 관리하기 위해 여러 영역으로 나눠져 있다. 크게 보면 JVM 메모리는 메서드 영역, 스택 영역, 힙 영역의 3가지로 나뉜다. 이 외에도 PC 레지스터나 네이티브 메서드 스택 같은 영역이 있지만, 자바 동작을 이해하는 데는 이 3개의 영역만 인지해도 충분하다. 1. 메서드(Method) 영역메서드 영역은 JVM이 실행 중에 클래스 수준의 정보를 저장하는 중요한 메모리 공간이다. 프로그램 실행 도중 로드된 클래스와 관련된 데이터가 이곳에 저장되며, 모든 스레드가 공유하는 영역이다. 메서드 영역에 저장되는 주요 데이터는 다음과 같다. 클래스 메타데..
접근 제어자가 필요한 이유접근 제어자를 학습하기 전 한 가지 예시를 통해 접근 제어자가 필요한 이유를 알아보자. Speaker 객체 설계와 접근 제어자의 필요성`Speaker` 클래스는 음량을 관리하는 객체로, 메서드를 통해 음량을 조절하도록 설계되었습니다. 다음은 `Speaker` 객체를 생성하고, 초기 음량을 설정한 뒤, 음량을 높이는 메서드를 호출하는 예제입니다.요구사항• 스피커의 음량은 절대 100을 넘으면 안 된다. (100을 넘어가면 스피커의 부품들이 고장 난다.)스피커 객체 설계(클래스)• 데이터(필드) : 음량• 기능(메서드) : 음량을 높이고, 내리고, 현재 음량을 확인할 수 있는 단순한 기능• 요구사항대로 스피커의 음량은 100까지만 증가할 수 있다.package access; pu..
객체를 생성하고 초기화하는 방법생성자가 필요한 이유와 생성자를 알아보긴 어떤 방식으로 객체를 생성했는지 알아보자.package construct;public class MemberInit { String name; int age; int grade;}package construct;public class MethodInitMain1 { public static void main(String[] args) { MemberInit member1 = new MemberInit(); member1.name = "user1"; member1.age = 15; member1.grade = 90; MemberInit m..
nullJava에서 `null`은 참조 변수가 어떤 객체도 가리키지 않음을 나타내는 특별한 값이다. `null`은 값이 존재하지 않는,없다는 뜻이다. 기본형(int, double, float)과 달리 참조형(String, int[], Class Object)에는 `null`을 할당할 수 있다. int a = null; // illgaldouble b = null; // illgalString c = null; // possibleint[] d = null; // possible 클래스 객체에서의 예제package ref;public class Data { int value;}package ref;public class NullMain1 { public static void main(S..
변수의 종류 멤버 변수(필드)클래스 안에 선언된 변수로, 클래스의 상태를 나타내는 속성이다.인스턴스 변수와 클래스 변수(정적 변수)로 나눤다.인스턴스 변수: 객체 생성 시 각 인스턴스에 독립적으로 존재한다. static 키워드가 없다.클래스 변수: 클래스 레벨에서 공유되는 변수로, static 키워드가 붙는다.지역 변수메서드나 생성자 내부에 선언된 변수로, 해당 블록 내에서만 유효한다.메서드 호출이 끝나면 메모리에서 사라진다.매개변수도 지역 변수의 일종으로, 메서드나 생성자 호출 시 값을 전달받기 위해 사용된다. 변수의 초기화멤버변수의 경우 멤버 변수는 명시적으로 초기화하지 않으면 기본값으로 초기화(자동 초기화)된다. 반면에 지역 변수는 반드시 명시적으로 초기화(수동 초기화)해야 한다. 변수 초기화의 ..
교착 상태교착 상태는 시스템 내에서 두 개 이상의 프로세스가 서로의 작업을 완료하기 위해 상대방이 점유하고 있는 자원을 기다리며 무한정 대기하는 상황을 말한다. 즉, 교착 상태(deadlock)는 일어나지 않을 사건을 기다리며 프로세스의 진행이 멈춰 버리는 현상을 의미한다. 교착 상태 발생 조건 교착상태가 발생하기 위한 네 가지 조건은 상호 배제, 점유와 대기, 비선점, 원형 대기이다. 이 중 하나라도 만족하지 않는다면 교착 상태는 발생하지 않고, 네 가지 조건이 모두 만족할 때 교착 상태가 발생할 가능성이 생긴다. 상호배제한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상호 배제의 상황에서 교착 상태가 발생한다.점유와 대기한 프로세스가 어떤 자원을 할당받은 상황(점유)에서 다른 자원을 ..
기존 동기화 도구의 문제점세마포어는 훌륭한 동기화 도구지만 사용에 있어선 불편한 점이 있다. 다음과 같은 실수를 발생할 가능성이 있다.세마포어를 누락할 가능성wait과 signal 순서를 헷갈리는 경우wait과 signal를 중복하여 사용하는 경우 조건 변수와 모니터모니터는 운영체제에서 사용이 간편한 동기화 도구로, 공유 자원에 대한 접근을 제어하는 인터페이스를 제공하여 상호 배제를 보장한다. 조건 변수는 모니터 내에서 실행 순서 제어를 위한 동기화 도구로 사용되며, 특별한 변수로 `wait()`와 `signal()`연산을 지원한다. wait(): 호출한 프로세스를 대기 상태로 전환하는 함수signal(): 대기 중인 프로세스를 깨워 실행을 재개하는 함수 조건 변수를 활용한 실행 순서 제어는 다음과 같..
동기화 해결의 세 가지 원칙 운영체제에서 임계 구역 문제를 해결하기 위한 세 가지 원칙은 다음과 같다.상호 배제 (mutual exclusion): 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다.진행 (progress): 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 진입이 가능하다. 유한 대기 (bounded waiting): 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 진입이 가능해야 한다. 동기화 기법1. 뮤텍스 락 (Mutex Lock)상호 배제를 위한 동기화 도구이다. 공유 자원이 하나만 있는 경우에 적용이 가능하다. 자물쇠(lock)의 기능을 코드로 구현한 게 뮤텍스 락이다. 뮤텍스 락은 다음과 같이 구성된다. 자물쇠 역할을..
프로세스 동기화스케줄링과 동기화는 프로세스와 스레드 모두에 적용된다. 본 포스팅에서는 이를 통칭하여 `프로세스`라 부르겠다 프로세스 동기화란 한정된 자원 속에서 동시다발적으로 실행되는 프로세스 안에서 실행 순서와 자원의 일관성을 보장하는 것을 말한다. 운영체제가 제공하는 동기화의 의미실행 순서 제어 : 프로세스를 올바른 순서로 실행하기 상호 배제 : 동시에 접근해서는 안되는 자원에 하나만 접근하기 1. 실행 순서 제어 실행 순서 제어는 특정 조건에서 올바른 실행 순서를 보장하기 위한 동기화 과정이다. 예를 들어, 다음과 같은 두 프로세스가 있다고 하자.1. Book.txt가 없으면 파일을 생성하고 내용을 작성한 뒤 저장하는 프로세스.2. Book.txt를 읽는 프로세스.이 경우, 1번 프로세스는 실행 순..