일단 씻고 나가자
25.02.07 본문
2025. 02. 07 금요일
- [Java] Object a; 와 Object a = null;의 차이?
: 선언만 하거나 null로 초기화 한 것의 차이이며, 의미적인 차이가 존재한다.
선언만 한 경우 의도적으로 초기화를 미루고자 할 때, 반드시 후에 초기화할 필요가 있다는 것을 보이기 위한 의미로 사용하며,
null의 경우 해당 변수가 아직 참조 객체가 없다는 것을 보이기 위한, 혹은 특정 조건에 해당 변수에 객체를 할당하고 싶을 때 사용한다.
선언의 경우 해당 변수를 사용하면 컴파일러가 빨간 줄을 띄워주며, null의 경우는 개발자가 직접 해당 변수 사용 시 null check를 해주어야 한다.
- [Java] 배열 크기 초기화와 초깃값을 동시에 선언할 수 없는 이유?
: 자바는 int[] arr = new int[3] {1, 2, 3}; 같이 배열의 크기와 초깃값을 동시에 선언하는 것을 막는다.
(Cannot define dimension when an array initializer is provided 에러를 띄우게 된다)
이는 배열 크기를 먼저 선언했을 때 이후에 선언되는 초깃값을 몇 번 index에 각각 넣어 주어야 할지에 대한 모호함을 방지한 명확함을 위한 것이며, (ex. new int[5] {1} 와 같은 상황)
크기 명시 혹은 초깃값 명시 두 방법 중 하나만 사용해야 한다.
- [Java] JVM의 역할? 자바의 컴파일러와 파일?
: Java는 플랫폼 독립적으로 어느 OS에서나 실행될 수 있게끔 설계되었는데,
이는 JVM이 OS와 Java application 사이에서 도움을 주기 때문이다.
JVM은 컴파일러가 ‘.java(for human)’파일에서 ‘.class(for JVM)’인 바이트 코드로 컴파일한 파일을 읽고, OS에 맞는 시스템 콜 기계어로 변환 (바이트 코드 실행 + 운영 체제와 응용 프로그램 사이의 중재자) 및 가비지 컬렉터를 통한 메모리 관리 등을 수행한다.
https://droptable.tistory.com/42
- [OS] Deadlock 예방 기법?
: deadlock의 예방 기법은 deadlock 발생 이유 4가지와 연관하여 해결할 수 있다.
deadlock의 발생 필요조건 4가지 중 하나 이상을 제거하는 것으로 (예방 4가지 중 하나 이상을 수행하는 것으로) 예방할 수 있다.
1. Mutual Exclusion Prevention (상호 배제 예방)
// 공유 자원에 대해 여러 프로세스가 접근할 수 있도록 함.
읽기 전용 파일에 대해 허용하거나, 스풀링 기법(Spooling, 요청을 다 받고 순차적으로 실행)으로 구현.
2. No Preemption Prevention (자원 선점 예방)
// 프로세스가 다른 프로세스의 자원 선점을 해제할 수 있도록 함.
프로세스별 우선순위를 두어 우선순위가 높은 프로세스가 자원을 요청할 시 현재 자원을 할당하고 있는 프로세스의 선점을 해제시키고 할당하거나, 아예 강제 종료시키는 것으로 구현.
3. Hold & Wait Prevention (점유 및 대기 예방)
// 프로세스가 자원을 점유한 상태로 다른 자원을 요청할 수 있도록 함.
프로세스 최초 실행 시 필요한 자원을 전부 할당하거나(All-at-Once allocation),
자원을 점유하지 않을 때만 (혹은 반납해야만) 자원을 요청할 수 있도록 구현.
4. Circular Wait Prevention (순환 대기 예방)
// 순환 대기를 방지하도록 자원 요청 순서를 강제하도록 함.
자원별 다른 숫자를 부여하고, 항상 현재 자원의 바로 다음 숫자(오름차순)만 요청할 수 있도록 구현.
- [OS] 스케줄러의 종류, 설명?
: 스케줄러의 종류에는 단기, 중기, 장기 스케줄러가 있다.
1. Long-term Scheduler (장기 스케줄러)
// 실행되는 프로그램을 메모리에 올릴지 결정하는 스케줄러.
I/O bound와 CPU bound의 비율을 조절하기 위해 사용되나, 현대 시스템의 즉시 메모리에 올리는 방식으로 잘 사용되지 않음.
2. Short-term Scheduler (단기 스케줄러)
// Ready Queue에서 어떤 프로세스에게 CPU를 할당할지 결정하는 스케줄러.
스케줄러 알고리즘(ex. round robin, FCFS)을 적용하여 결정.
3. Medium-term Scheduler (중기 스케줄러)
// 메모리 부족으로 인한 성능저하를 막기 위해 메모리에 적재된 프로세스 수를 동적으로 조절(Swapping)하는 스케줄러. I/O를 기다리는 blocked 상태의 프로세스를 중지(suspended, stop) 상태로 바꾸거나, 이로도 해결되지 않는다면 타이머 인터럽트가 발생하여 ready queue로 이동하는 프로세스를 중지 상태로 바꿈.
이때 중지 상태란 해당 프로세스의 메모리 일부를 디스크로 내보내는 것으로,
내보내는 것을 Swap-out, 여유가 생겨 다시 적재하는 것을 Swap-in이라 한다.